diff --git a/.editorconfig b/.editorconfig
index a25dbdfc85..df93ae3a16 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -2,3 +2,7 @@
insert_final_newline = true
indent_style = tab
indent_size = 4
+
+[*.yml]
+indent_style = space
+indent_size = 2
diff --git a/.travis.yml b/.travis.yml
index bef3a69ad7..ab3b1003c3 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,28 +1,34 @@
language: generic
-sudo: false
dist: xenial
+sudo: false
+
branches:
except:
- ___TGS3TempBranch
- ___TGSTempBranch
+
matrix:
include:
- - env:
- - BUILD_TOOLS=true
- name: "Build Tools"
+ - name: "Run Linters"
addons:
apt:
packages:
- python3
- python3-pip
- python3-setuptools
- cache:
- directories:
- - tgui/node_modules
- - env:
- - BUILD_TESTING=true
- - BUILD_TOOLS=false
- name: "Build All Maps"
+ install:
+ - tools/travis/install_build_tools.sh
+ - tools/travis/install_dreamchecker.sh
+ script:
+ - tools/travis/check_filedirs.sh tgstation.dme
+ - tools/travis/check_changelogs.sh
+ - find . -name "*.php" -print0 | xargs -0 -n1 php -l
+ - find . -name "*.json" -not -path "./tgui/node_modules/*" -print0 | xargs -0 python3 ./tools/json_verifier.py
+ - tools/travis/build_tgui.sh
+ - tools/travis/check_grep.sh
+ - ~/dreamchecker
+
+ - name: "Compile All Maps"
addons:
apt:
packages:
@@ -30,10 +36,15 @@ matrix:
cache:
directories:
- $HOME/BYOND
- - env:
- - BUILD_TESTING=false
- - BUILD_TOOLS=false
- name: "Build and Run Unit Tests"
+ install:
+ - tools/travis/install_byond.sh
+ - source $HOME/BYOND/byond/bin/byondsetup
+ before_script:
+ - tools/travis/template_dm_generator.py
+ script:
+ - tools/travis/dm.sh -DTRAVISBUILDING -DTRAVISTESTING -DALL_MAPS tgstation.dme
+
+ - name: "Compile and Run Tests"
addons:
mariadb: '10.2'
apt:
@@ -41,7 +52,6 @@ matrix:
- ubuntu-toolchain-r-test
packages:
- libstdc++6:i386
- - libssl-dev:i386
- gcc-multilib
- g++-7
- g++-7-multilib
@@ -49,25 +59,19 @@ matrix:
- libmariadbd-dev
cache:
directories:
- - $HOME/.cargo
- $HOME/BYOND
- - $HOME/MariaDB
- - $HOME/.rustup
-
-install:
- - tools/travis/install_build_tools.sh
- - if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then mysql -u root -e 'CREATE DATABASE tg_travis;'; fi
- - if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then mysql -u root tg_travis < SQL/tgstation_schema.sql; fi
- - if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then mysql -u root -e 'CREATE DATABASE tg_travis_prefixed;'; fi
- - if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then mysql -u root tg_travis_prefixed < SQL/tgstation_schema_prefixed.sql; fi
-
-before_script:
- - tools/travis/before_build_tools.sh
- - tools/travis/before_build_byond.sh
-
-script:
- - tools/travis/check_filedirs.sh tgstation.dme
- - tools/travis/build_tools.sh || travis_terminate 1
- - tools/travis/build_dependencies.sh || travis_terminate 1
- - tools/travis/build_byond.sh
-
+ - $HOME/libmariadb
+ install:
+ - tools/travis/install_byond.sh
+ - source $HOME/BYOND/byond/bin/byondsetup
+ - tools/travis/install_libmariadb.sh
+ - tools/travis/install_rust_g.sh
+ before_script:
+ - mysql -u root -e 'CREATE DATABASE tg_travis;'
+ - mysql -u root tg_travis < SQL/tgstation_schema.sql
+ - mysql -u root -e 'CREATE DATABASE tg_travis_prefixed;'
+ - mysql -u root tg_travis_prefixed < SQL/tgstation_schema_prefixed.sql
+ - tools/travis/build_bsql.sh
+ script:
+ - tools/travis/dm.sh -DTRAVISBUILDING tgstation.dme || travis_terminate 1
+ - tools/travis/run_server.sh
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm
index 9b7ca819cc..639d63772c 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm
@@ -49,7 +49,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"as" = (
@@ -70,7 +70,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"at" = (
@@ -89,7 +89,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"au" = (
@@ -129,7 +129,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"ay" = (
@@ -149,7 +149,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"az" = (
@@ -170,7 +170,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aA" = (
@@ -190,7 +190,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aB" = (
@@ -209,7 +209,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aC" = (
@@ -225,7 +225,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aD" = (
@@ -242,7 +242,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aE" = (
@@ -261,7 +261,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aF" = (
@@ -282,7 +282,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aG" = (
@@ -301,7 +301,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aH" = (
@@ -321,7 +321,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aI" = (
@@ -341,7 +341,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aJ" = (
@@ -368,7 +368,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aL" = (
@@ -394,7 +394,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aO" = (
@@ -415,7 +415,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aP" = (
@@ -448,7 +448,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aU" = (
@@ -472,7 +472,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aW" = (
@@ -493,7 +493,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aX" = (
@@ -522,7 +522,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"aZ" = (
@@ -542,7 +542,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"ba" = (
@@ -559,7 +559,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bb" = (
@@ -588,7 +588,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bd" = (
@@ -631,7 +631,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bg" = (
@@ -732,7 +732,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bt" = (
@@ -758,7 +758,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bx" = (
@@ -775,7 +775,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"by" = (
@@ -792,7 +792,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bz" = (
@@ -817,7 +817,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bB" = (
@@ -825,7 +825,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bC" = (
@@ -846,7 +846,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bD" = (
@@ -872,7 +872,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bH" = (
@@ -881,7 +881,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bI" = (
@@ -899,7 +899,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bK" = (
@@ -918,7 +918,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bL" = (
@@ -942,7 +942,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bP" = (
@@ -970,8 +970,8 @@
/turf/open/floor/carpet,
/area/ruin/powered/clownplanet)
"bT" = (
-/obj/item/slime_extract/rainbow,
/obj/structure/table/glass,
+/obj/item/reagent_containers/spray/waterflower/superlube,
/turf/open/floor/carpet,
/area/ruin/powered/clownplanet)
"bU" = (
@@ -989,7 +989,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bY" = (
@@ -999,7 +999,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"bZ" = (
@@ -1008,7 +1008,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"ca" = (
@@ -1018,7 +1018,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"cc" = (
@@ -1052,7 +1052,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"dC" = (
@@ -1075,7 +1075,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"dD" = (
@@ -1097,7 +1097,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"dE" = (
@@ -1120,7 +1120,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"dF" = (
@@ -1175,7 +1175,7 @@
},
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"dK" = (
@@ -1202,7 +1202,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"dO" = (
@@ -1211,7 +1211,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"eX" = (
@@ -1260,7 +1260,7 @@
/obj/effect/turf_decal/tile/yellow,
/turf/open/indestructible{
icon_state = "darkfull";
- wet = 8
+ wet = 16
},
/area/ruin/powered/clownplanet)
"KX" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_elite_tumor.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_elite_tumor.dmm
new file mode 100644
index 0000000000..6e44ec3197
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_elite_tumor.dmm
@@ -0,0 +1,111 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/lavaland/surface/outdoors)
+"b" = (
+/obj/structure/elite_tumor,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"c" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+c
+c
+c
+a
+a
+a
+"}
+(5,1,1) = {"
+a
+a
+a
+c
+b
+c
+a
+a
+a
+"}
+(6,1,1) = {"
+a
+a
+a
+c
+c
+c
+a
+a
+a
+"}
+(7,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(9,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/RandomRuins/SpaceRuins/spacehermit.dmm b/_maps/RandomRuins/SpaceRuins/spacehermit.dmm
index 341dcf7b99..f64bfa8a4e 100644
--- a/_maps/RandomRuins/SpaceRuins/spacehermit.dmm
+++ b/_maps/RandomRuins/SpaceRuins/spacehermit.dmm
@@ -338,6 +338,9 @@
/obj/item/flashlight/lamp/bananalamp,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
+"bt" = (
+/turf/closed/mineral/random/low_chance/earth_like,
+/area/ruin/unpowered)
(1,1,1) = {"
aa
@@ -474,13 +477,13 @@ ab
ab
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
ab
ab
@@ -520,22 +523,22 @@ aA
ab
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
ab
aA
@@ -569,27 +572,27 @@ aA
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -620,29 +623,29 @@ ab
ab
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -666,36 +669,36 @@ aM
aa
aA
ab
+bt
+bt
+bt
+bt
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -718,37 +721,37 @@ aa
aa
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ae
af
ae
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -770,38 +773,38 @@ aa
aa
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
af
aq
af
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -822,38 +825,38 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ae
ae
ao
ae
ae
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -874,39 +877,39 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
af
an
an
an
af
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -927,24 +930,24 @@ aA
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ae
ae
bh
@@ -952,13 +955,13 @@ an
an
ae
aZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -979,24 +982,24 @@ aA
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
af
aY
ao
@@ -1004,13 +1007,13 @@ ao
ao
ak
ba
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -1031,24 +1034,24 @@ aA
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
al
aj
ap
@@ -1056,13 +1059,13 @@ an
as
aj
aE
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -1083,24 +1086,24 @@ aA
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
af
ak
ao
@@ -1109,12 +1112,12 @@ ao
ak
ba
ac
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -1134,24 +1137,24 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ah
az
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
aR
ae
ae
@@ -1161,12 +1164,12 @@ an
ae
aZ
ac
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aM
@@ -1186,24 +1189,24 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ac
ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
aR
ag
ag
@@ -1213,12 +1216,12 @@ af
at
bb
ac
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -1238,24 +1241,24 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ad
ac
ac
ac
ac
-ab
+bt
aH
aJ
aL
-ab
-ab
+bt
+bt
aT
ac
ac
@@ -1265,12 +1268,12 @@ ac
ac
ac
aR
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -1289,14 +1292,14 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ad
au
ac
@@ -1306,8 +1309,8 @@ ac
ac
ac
ac
-ab
-ab
+bt
+bt
ac
ac
ac
@@ -1317,12 +1320,12 @@ ac
ac
ac
bg
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -1341,14 +1344,14 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ad
aw
bs
@@ -1358,9 +1361,9 @@ ac
ac
ac
ac
-ab
-ab
-ab
+bt
+bt
+bt
ac
ac
ac
@@ -1368,13 +1371,13 @@ ac
ac
ac
ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -1393,14 +1396,14 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ad
ax
ac
@@ -1409,9 +1412,9 @@ aF
ac
ac
ac
-ab
-ab
-ab
+bt
+bt
+bt
aU
bd
ac
@@ -1420,13 +1423,13 @@ bl
bm
ac
ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -1445,14 +1448,14 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ad
ay
ac
@@ -1461,9 +1464,9 @@ ac
aG
ac
ac
-ab
-ab
-ab
+bt
+bt
+bt
av
be
ac
@@ -1473,12 +1476,12 @@ bn
bo
bo
bq
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -1496,16 +1499,16 @@ aa
aa
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ac
ac
ac
@@ -1513,9 +1516,9 @@ ac
ac
ac
ac
-ab
-ab
-ab
+bt
+bt
+bt
bc
bf
ac
@@ -1525,11 +1528,11 @@ ac
ac
ac
br
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -1548,26 +1551,26 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ac
-ab
+bt
ac
ac
ac
ac
ac
-ab
-ab
+bt
+bt
ac
ac
ac
@@ -1577,11 +1580,11 @@ ac
ac
ac
ac
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -1599,20 +1602,20 @@ aa
aa
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ac
ac
ac
@@ -1628,11 +1631,11 @@ ac
ac
ac
ac
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -1651,26 +1654,26 @@ aa
aa
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ac
ac
ac
-ab
-ab
+bt
+bt
ac
ac
ac
@@ -1682,9 +1685,9 @@ ac
ac
ac
ac
-ab
-ab
-ab
+bt
+bt
+bt
ab
aa
aa
@@ -1703,26 +1706,26 @@ aa
aa
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
aK
-ab
-ab
+bt
+bt
ac
ac
ac
@@ -1734,8 +1737,8 @@ bp
ac
ac
aR
-ab
-ab
+bt
+bt
ab
aA
aa
@@ -1756,25 +1759,25 @@ aa
aa
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
aP
ac
ac
@@ -1786,8 +1789,8 @@ ac
ac
ac
aR
-ab
-ab
+bt
+bt
ab
aA
aa
@@ -1808,25 +1811,25 @@ aa
aa
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
aQ
aP
ac
@@ -1836,10 +1839,10 @@ ac
ac
ac
ac
-ab
+bt
ac
-ab
-ab
+bt
+bt
ab
aA
aa
@@ -1860,27 +1863,27 @@ aa
aa
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ac
ac
ac
@@ -1888,10 +1891,10 @@ ac
aP
ac
bg
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
ab
aa
aa
@@ -1913,26 +1916,26 @@ aa
aA
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ac
ac
ac
@@ -1940,9 +1943,9 @@ ac
ac
ac
aS
-ab
-ab
-ab
+bt
+bt
+bt
ab
aA
aa
@@ -1966,25 +1969,25 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
bg
ac
ac
@@ -1992,9 +1995,9 @@ ac
ac
ac
aS
-ab
-ab
-ab
+bt
+bt
+bt
ab
aA
aa
@@ -2018,25 +2021,25 @@ aa
aa
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ac
ac
bj
@@ -2044,9 +2047,9 @@ ac
ac
ac
aS
-ab
-ab
-ab
+bt
+bt
+bt
ab
aA
aa
@@ -2071,24 +2074,24 @@ aa
aa
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
aS
bi
ac
@@ -2096,9 +2099,9 @@ ac
ac
aS
aS
-ab
-ab
-ab
+bt
+bt
+bt
ab
aA
aa
@@ -2124,23 +2127,23 @@ aM
aa
aA
ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
aS
ac
ac
@@ -2148,8 +2151,8 @@ ac
ac
aS
aS
-ab
-ab
+bt
+bt
ab
aA
aa
@@ -2176,20 +2179,20 @@ aa
aa
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aS
@@ -2229,18 +2232,18 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aA
@@ -2282,17 +2285,17 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aA
@@ -2335,16 +2338,16 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
aA
aa
@@ -2388,16 +2391,16 @@ aa
aA
aA
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
+bt
ab
ab
aa
@@ -2448,9 +2451,9 @@ ab
ab
ab
ab
-ab
-ab
-ab
+bt
+bt
+bt
ab
aa
aa
@@ -2933,7 +2936,7 @@ aa
aa
aa
aa
-ab
+bt
aa
aa
aa
diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm
new file mode 100644
index 0000000000..76cb8bb9db
--- /dev/null
+++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm
@@ -0,0 +1,1698 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/button/door{
+ dir = 4;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = 24;
+ req_access_txt = "10"
+ },
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cB" = (
+/obj/machinery/button/door{
+ dir = 1;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ req_access_txt = "10"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"cP" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"dz" = (
+/turf/open/space/basic,
+/area/space/nearstation)
+"dN" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"dW" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ea" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"eA" = (
+/obj/structure/table,
+/obj/item/clothing/suit/radiation,
+/obj/item/clothing/head/radiation,
+/obj/item/clothing/glasses/meson,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"eI" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"eJ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"eL" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"fh" = (
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"fr" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine Southwest";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"fH" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"gf" = (
+/obj/item/storage/toolbox/mechanical,
+/obj/item/flashlight,
+/obj/item/pipe_dispenser,
+/obj/structure/table,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ht" = (
+/obj/structure/reflector/single/anchored{
+ dir = 5
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"hR" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"ic" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"jx" = (
+/obj/structure/reflector/single/anchored{
+ dir = 9
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"jH" = (
+/obj/structure/sign/warning/radiation/rad_area,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"kh" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"kC" = (
+/obj/structure/sign/warning/radiation/rad_area,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"kK" = (
+/turf/closed/wall,
+/area/engine/engineering)
+"la" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_y = 5
+ },
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"lJ" = (
+/obj/structure/sign/warning/electricshock,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"lY" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"me" = (
+/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
+/obj/structure/closet/radiation,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"mB" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"mZ" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"nR" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"nW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"qH" = (
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = -32
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"qP" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"rj" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"rm" = (
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"rM" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow,
+/obj/machinery/power/rad_collector,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"sr" = (
+/obj/machinery/light,
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine South";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"tl" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"to" = (
+/obj/structure/sign/warning/radiation/rad_area,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"tv" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable,
+/obj/machinery/power/emitter,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"tC" = (
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"tE" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"tT" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/door{
+ dir = 4;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = 24;
+ req_access_txt = "10"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"uG" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"wt" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"xg" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xx" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xJ" = (
+/obj/item/tank/internals/emergency_oxygen/engi{
+ pixel_x = 5
+ },
+/obj/item/clothing/gloves/color/black,
+/obj/item/clothing/glasses/meson/engine,
+/obj/structure/table,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xQ" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/rad_collector,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"yo" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"yq" = (
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/rad_collector,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"yU" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/obj/structure/fans/tiny,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"zW" = (
+/obj/structure/chair/stool,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"zZ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/door{
+ dir = 8;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = -24;
+ req_access_txt = "10"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Aw" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"AF" = (
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Bb" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#c1caff"
+ },
+/obj/machinery/camera/emp_proof{
+ c_tag = "Particle Accelerator";
+ network = list("ss13","engine")
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/the_singularitygen,
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Bj" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/rad_collector,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"BG" = (
+/obj/structure/closet/emcloset/anchored,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Ce" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Ch" = (
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"CN" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine East";
+ dir = 8;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"DK" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine West";
+ dir = 4;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Eu" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ER" = (
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = 32
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ES" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/item/clothing/head/welding,
+/obj/item/weldingtool/largetank,
+/obj/item/wrench,
+/obj/item/stack/cable_coil/red,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"FK" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"FM" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"FP" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
+"FY" = (
+/obj/structure/table,
+/obj/item/book/manual/wiki/engineering_singulo_tesla,
+/obj/item/geiger_counter,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Hc" = (
+/obj/machinery/light,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"HQ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/button/door{
+ dir = 8;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = -24;
+ req_access_txt = "10"
+ },
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"HW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"In" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Js" = (
+/obj/structure/particle_accelerator/end_cap,
+/obj/structure/particle_accelerator/fuel_chamber,
+/obj/structure/particle_accelerator/particle_emitter/center,
+/obj/structure/particle_accelerator/particle_emitter/left,
+/obj/structure/particle_accelerator/particle_emitter/right,
+/obj/structure/particle_accelerator/power_box,
+/obj/machinery/particle_accelerator/control_box,
+/obj/structure/closet/crate/engineering{
+ name = "Particle Accelerator Crate"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"JC" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Kg" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Lr" = (
+/obj/structure/table,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/storage/toolbox/electrical{
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Ls" = (
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"LB" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"LJ" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine Southeast";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"LO" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"LV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Mi" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Mn" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"MD" = (
+/obj/structure/reagent_dispensers/fueltank,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"MJ" = (
+/turf/open/space/basic,
+/area/space)
+"Nm" = (
+/obj/structure/sign/warning/securearea,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"No" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Nz" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"NS" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Og" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Ox" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/box,
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Pg" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Pt" = (
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Qk" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine Northeast";
+ network = list("ss13","engine")
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Ra" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/closet/emcloset/anchored,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Rp" = (
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Rr" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector{
+ dir = 1
+ },
+/turf/open/space/basic,
+/area/engine/engineering)
+"Si" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"SD" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Um" = (
+/turf/template_noop,
+/area/template_noop)
+"UL" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine Northwest";
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"UV" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Wf" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ww" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"WQ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"WX" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Xk" = (
+/obj/machinery/field/generator,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Yd" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Yl" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
+"Yn" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/engine/engineering)
+"YY" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Zb" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Zx" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Zz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ZF" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ZK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ZY" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light,
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+
+(1,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(2,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(3,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(4,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(5,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+Yl
+dz
+dz
+MJ
+MJ
+dz
+dz
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(6,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+rm
+Yl
+dz
+dz
+dz
+dz
+Yl
+dz
+dz
+dz
+dz
+dz
+dz
+dz
+dz
+Um
+Um
+Um
+Um
+"}
+(7,1,1) = {"
+Um
+Um
+Um
+Um
+kK
+kK
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+jH
+Ch
+Ch
+Ch
+Ch
+lJ
+Ch
+Nm
+dz
+MJ
+MJ
+MJ
+MJ
+"}
+(8,1,1) = {"
+Um
+Um
+Lr
+la
+kK
+Ra
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+Ch
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+dz
+dz
+MJ
+MJ
+MJ
+"}
+(9,1,1) = {"
+Um
+Um
+FM
+FM
+In
+ER
+yU
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+DK
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+Ls
+Pt
+dz
+dz
+MJ
+MJ
+"}
+(10,1,1) = {"
+Um
+Si
+fh
+ZY
+to
+Ch
+Ch
+UL
+dz
+Yl
+dz
+dz
+FP
+dz
+FP
+dz
+dz
+Yl
+dz
+Pt
+Ch
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(11,1,1) = {"
+xJ
+gf
+fh
+dN
+YY
+MD
+Ch
+Pt
+dz
+Yl
+dz
+dz
+FP
+dz
+FP
+dz
+dz
+Yl
+dz
+Pt
+fr
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(12,1,1) = {"
+LO
+Eu
+Pg
+cP
+JC
+tv
+rj
+Pt
+dz
+Yl
+ht
+dz
+FP
+dz
+FP
+dz
+dz
+Yl
+dz
+Yl
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(13,1,1) = {"
+NS
+xx
+fh
+zW
+dW
+ea
+rj
+Pt
+eL
+Kg
+Kg
+rM
+Kg
+rM
+Kg
+rM
+Kg
+Kg
+tl
+Yl
+Hc
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(14,1,1) = {"
+yo
+me
+aT
+Aw
+JC
+tv
+rj
+Og
+hR
+dz
+FP
+dz
+dz
+rm
+dz
+dz
+ht
+dz
+hR
+Yl
+Pt
+Ch
+jH
+Yl
+dz
+MJ
+"}
+(15,1,1) = {"
+jH
+FK
+Ch
+wt
+tE
+rj
+rj
+Og
+hR
+FP
+Xk
+FP
+FP
+rm
+FP
+FP
+Xk
+FP
+hR
+dz
+Pt
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(16,1,1) = {"
+Ch
+ES
+ZK
+ZK
+zZ
+ZK
+fH
+Og
+hR
+dz
+FP
+dz
+dz
+rm
+dz
+dz
+FP
+dz
+xQ
+dz
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(17,1,1) = {"
+wt
+Zz
+Wf
+Ox
+nR
+Zb
+lY
+Og
+hR
+dz
+FP
+dz
+dz
+rm
+dz
+dz
+FP
+dz
+hR
+Yl
+Pt
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(18,1,1) = {"
+cB
+Bb
+qP
+ZF
+SD
+Yd
+eI
+LB
+UV
+rm
+rm
+rm
+rm
+rm
+rm
+rm
+rm
+rm
+yq
+Yl
+sr
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(19,1,1) = {"
+wt
+eJ
+Zx
+nW
+Mn
+WQ
+lY
+Og
+hR
+dz
+FP
+dz
+dz
+rm
+dz
+dz
+FP
+dz
+hR
+Yl
+Pt
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(20,1,1) = {"
+Ch
+Js
+No
+No
+tT
+No
+LV
+Og
+hR
+dz
+FP
+dz
+dz
+rm
+dz
+dz
+FP
+dz
+Bj
+dz
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(21,1,1) = {"
+jH
+Nz
+Ch
+wt
+tE
+rj
+rj
+Og
+hR
+FP
+Xk
+FP
+FP
+rm
+FP
+FP
+Xk
+FP
+hR
+dz
+Pt
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(22,1,1) = {"
+AF
+WX
+HQ
+Aw
+JC
+tv
+rj
+Og
+hR
+dz
+FP
+dz
+dz
+rm
+dz
+dz
+jx
+dz
+hR
+Yl
+Pt
+Ch
+jH
+Yl
+dz
+MJ
+"}
+(23,1,1) = {"
+fh
+kh
+fh
+fh
+dW
+ea
+rj
+Pt
+ic
+Kg
+Kg
+rM
+Kg
+rM
+Kg
+rM
+Kg
+Kg
+Ce
+Yl
+Hc
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(24,1,1) = {"
+fh
+kh
+uG
+cP
+xg
+tv
+rj
+Pt
+dz
+Yl
+jx
+dz
+FP
+dz
+FP
+dz
+dz
+Yl
+dz
+Yl
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(25,1,1) = {"
+eA
+FY
+mB
+Rp
+HW
+Mi
+Ch
+Pt
+dz
+Yl
+dz
+dz
+FP
+dz
+FP
+dz
+dz
+Yl
+dz
+Pt
+LJ
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(26,1,1) = {"
+fh
+kh
+mB
+ZY
+kC
+mZ
+mZ
+Qk
+Rr
+Yl
+dz
+dz
+FP
+dz
+FP
+dz
+dz
+Yl
+dz
+Pt
+Ch
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(27,1,1) = {"
+Um
+Um
+Um
+fh
+Ww
+qH
+yU
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+CN
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+Ls
+Pt
+dz
+dz
+MJ
+MJ
+"}
+(28,1,1) = {"
+Um
+Um
+Um
+fh
+Yn
+BG
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+Ch
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+Yl
+dz
+dz
+dz
+MJ
+"}
+(29,1,1) = {"
+Um
+Um
+Um
+fh
+Yn
+kK
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+jH
+Ch
+Ch
+Ch
+Ch
+lJ
+Ch
+Nm
+Yl
+Yl
+Yl
+dz
+MJ
+"}
diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm
new file mode 100644
index 0000000000..6462cef211
--- /dev/null
+++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm
@@ -0,0 +1,2827 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"ab" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ac" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"at" = (
+/obj/structure/closet/crate/bin,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/item/cartridge/atmos,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"av" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"aw" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"aA" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"aC" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/table/reinforced,
+/obj/item/tank/internals/emergency_oxygen/engi{
+ pixel_x = 5
+ },
+/obj/item/clothing/gloves/color/black,
+/obj/item/clothing/glasses/meson/engine,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"aV" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"aX" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 5
+ },
+/turf/open/space,
+/area/space/nearstation)
+"aY" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"bo" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"bH" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/components/binary/valve{
+ dir = 4;
+ name = "Output to Waste"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"bI" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/turf/open/space,
+/area/space/nearstation)
+"bT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"bW" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ck" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"cp" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"cP" = (
+/obj/structure/table,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/storage/toolbox/electrical{
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cS" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/sign/poster/official/safety_eye_protection,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"cX" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 8;
+ name = "Gas to Cooling Loop"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"de" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Port";
+ dir = 4;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"df" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/effect/decal/cleanable/oil,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"dl" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"dw" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space,
+/area/space/nearstation)
+"dD" = (
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/turf/open/space,
+/area/space/nearstation)
+"ej" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Cooling Loop Bypass"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ey" = (
+/obj/structure/reflector/single/anchored{
+ dir = 9
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"ez" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"fa" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"fj" = (
+/obj/machinery/status_display,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"fq" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"fK" = (
+/obj/structure/sign/warning/radiation,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"fW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"gf" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"gj" = (
+/obj/effect/turf_decal/stripes/corner,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"gx" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"gB" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 5
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"gQ" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"hy" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"hJ" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"hK" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 5
+ },
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"ii" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"in" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"iC" = (
+/obj/structure/rack,
+/obj/item/storage/toolbox/artistic{
+ icon_state = "yellow";
+ item_state = "toolbox_yellow";
+ name = "Cable Toolbox";
+ pixel_y = 6
+ },
+/obj/item/storage/toolbox/artistic{
+ icon_state = "yellow";
+ item_state = "toolbox_yellow";
+ name = "Cable Toolbox";
+ pixel_y = -4
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"iD" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"iJ" = (
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"iU" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light,
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"jg" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"jp" = (
+/obj/machinery/door/airlock/engineering/glass/critical{
+ heat_proof = 1;
+ name = "Supermatter Chamber";
+ req_access_txt = "10"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"js" = (
+/obj/structure/sign/warning/electricshock,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"jB" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"jZ" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"kA" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Supermatter Engine Room";
+ req_access_txt = "10"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"kW" = (
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"ln" = (
+/obj/structure/closet/firecloset,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"lw" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"lE" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Gas to Chamber"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"lG" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 9
+ },
+/turf/open/space,
+/area/space/nearstation)
+"mi" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"mj" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/machinery/meter,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"mE" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"mH" = (
+/obj/structure/sign/poster/official/safety_eye_protection,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"mU" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"mW" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 4
+ },
+/obj/machinery/power/rad_collector/anchored,
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"mX" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"na" = (
+/obj/machinery/camera{
+ c_tag = "Supermatter Chamber";
+ network = list("engine");
+ pixel_x = 23
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"nd" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 4;
+ name = "Cooling Loop to Gas"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ni" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"nz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"nH" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"nR" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"nV" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/table/reinforced,
+/obj/item/clothing/suit/radiation,
+/obj/item/clothing/head/radiation,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"nW" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/item/tank/internals/plasma,
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"ou" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"oC" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"oS" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Supermatter Engine Room";
+ req_access_txt = "10"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"px" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"pA" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"pL" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 6
+ },
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"pP" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/emitter/anchored{
+ dir = 4;
+ state = 2
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"qc" = (
+/obj/structure/table,
+/obj/item/pipe_dispenser,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"qe" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"qm" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "Mix Bypass"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"qo" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"qr" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"qA" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "Gas to Filter"
+ },
+/obj/machinery/airalarm/engine{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"re" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"rt" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+ dir = 4
+ },
+/obj/machinery/meter,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"ry" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"rJ" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"rY" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"sm" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 6
+ },
+/turf/open/space,
+/area/space/nearstation)
+"sn" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"so" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"sq" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
+ dir = 8
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"sA" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 4;
+ name = "Gas to Mix"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"td" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"te" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ti" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 8
+ },
+/obj/machinery/power/rad_collector/anchored,
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"tn" = (
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"tw" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
+"tE" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"un" = (
+/obj/structure/reflector/single/anchored{
+ dir = 5
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"uC" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"uR" = (
+/obj/machinery/power/supermatter_crystal/engine,
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"vD" = (
+/obj/structure/girder,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"vN" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"vO" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"vX" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"wt" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"wz" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"wG" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"wS" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/turf/open/space,
+/area/space/nearstation)
+"xo" = (
+/obj/structure/reflector/box/anchored{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"xB" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"yd" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"yf" = (
+/turf/open/space/basic,
+/area/space/nearstation)
+"yA" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"yD" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"yZ" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"zf" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Atmos to Loop"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"zh" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/structure/table/reinforced,
+/obj/item/storage/toolbox/mechanical,
+/obj/item/flashlight,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/item/pipe_dispenser,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"zF" = (
+/obj/structure/table,
+/obj/item/stack/sheet/metal/fifty,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"zS" = (
+/turf/open/space/basic,
+/area/space)
+"Ab" = (
+/obj/item/crowbar/large,
+/obj/structure/rack,
+/obj/item/flashlight,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"Ah" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"AH" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Supermatter Engine Room";
+ req_access_txt = "10"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Bc" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Bk" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 5
+ },
+/obj/machinery/power/rad_collector/anchored,
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"Bl" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/table/reinforced,
+/obj/item/clothing/suit/radiation,
+/obj/item/clothing/head/radiation,
+/obj/item/clothing/glasses/meson,
+/obj/item/geiger_counter,
+/obj/item/geiger_counter,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"BD" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/machinery/atmospherics/components/binary/valve/digital/on{
+ dir = 4;
+ name = "Output Release"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Cb" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/machinery/meter,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"Cn" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"CH" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Supermatter Engine Room";
+ req_access_txt = "10"
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"CT" = (
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"CW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Dj" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Dz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"DA" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"DC" = (
+/obj/structure/rack,
+/obj/item/clothing/mask/gas{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/clothing/mask/gas,
+/obj/item/clothing/mask/gas{
+ pixel_x = -3;
+ pixel_y = -3
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Ef" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ei" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Es" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ex" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"EL" = (
+/turf/closed/wall,
+/area/engine/engineering)
+"EM" = (
+/obj/item/wrench,
+/obj/structure/rack,
+/obj/item/weldingtool/hugetank,
+/obj/item/clothing/head/welding{
+ pixel_x = -3;
+ pixel_y = 5
+ },
+/obj/item/clothing/head/welding{
+ pixel_x = -3;
+ pixel_y = 5
+ },
+/obj/item/clothing/glasses/welding,
+/obj/item/clothing/glasses/welding,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"EX" = (
+/obj/item/wrench,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 6
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"Fr" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"FG" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Gl" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Starboard";
+ dir = 8;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Gz" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"GB" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"GI" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"GK" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"GX" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Hj" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Hn" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Hw" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Aft";
+ network = list("ss13","engine");
+ pixel_x = 23
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"Hz" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ik" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"In" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"IE" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"IF" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/emitter/anchored{
+ dir = 8;
+ state = 2
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Jn" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"JH" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"JK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"JL" = (
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"JV" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Laser Room";
+ req_access_txt = "10"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ke" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_y = 5
+ },
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Kv" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"KX" = (
+/obj/machinery/status_display/ai,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"KZ" = (
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 10
+ },
+/turf/open/space,
+/area/space/nearstation)
+"Le" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 10
+ },
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"Lg" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Lv" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Lw" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"LE" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/button/door{
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_y = -24;
+ req_access_txt = "10"
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"LJ" = (
+/obj/machinery/light,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"LS" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Ml" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 8;
+ filter_type = "n2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Mr" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/green/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ME" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"MI" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"MJ" = (
+/turf/open/floor/plating,
+/area/engine/engineering)
+"MK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"MP" = (
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"Ne" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Np" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Nw" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"Nx" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ND" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"NK" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"NU" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"NZ" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Oj" = (
+/turf/closed/wall/r_wall,
+/area/space/nearstation)
+"Ok" = (
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"OK" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Mix to Gas"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"OR" = (
+/obj/structure/sign/warning/fire,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"OU" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/obj/machinery/meter,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Pa" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "External Gas to Loop"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"Ph" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Py" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Qn" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible,
+/obj/machinery/meter,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Qu" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/airlock/engineering/glass/critical{
+ heat_proof = 1;
+ name = "Supermatter Chamber";
+ req_access_txt = "10"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"QD" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"QJ" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Rh" = (
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"RA" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 9
+ },
+/obj/machinery/power/rad_collector/anchored,
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"RV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Sn" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/turf/open/space,
+/area/space/nearstation)
+"SL" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"SR" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"SX" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Tk" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/closet/emcloset/anchored,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"TB" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"TC" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"TO" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ub" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"Uq" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"Ur" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Uu" = (
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"UM" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"UN" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"UP" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"Vg" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"Vn" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"VN" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "External Gas to Loop"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"VP" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Wf" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 10
+ },
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"Ws" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"WB" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/open/space/basic,
+/area/space/nearstation)
+"WI" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"WT" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Xy" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"XA" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"XG" = (
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/turf/open/space,
+/area/space/nearstation)
+"XK" = (
+/obj/structure/closet/secure_closet/engineering_personal,
+/obj/item/radio/headset/headset_eng,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"XY" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"YB" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"YD" = (
+/obj/structure/reflector/double/anchored{
+ dir = 6
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"YF" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"YX" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 8;
+ name = "Gas to Filter"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"YZ" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/open/space,
+/area/space/nearstation)
+"Zn" = (
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = 32
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ZH" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"ZO" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Fore";
+ dir = 1;
+ network = list("ss13","engine");
+ pixel_x = 23
+ },
+/obj/machinery/atmospherics/pipe/manifold/green/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ZT" = (
+/turf/template_noop,
+/area/template_noop)
+
+(1,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+yf
+Rh
+yf
+yf
+Rh
+yf
+yf
+Rh
+yf
+yf
+yf
+YZ
+YZ
+YZ
+ZT
+ZT
+ZT
+ZT
+ZT
+"}
+(2,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+pL
+aX
+pL
+yA
+Sn
+yA
+yA
+Sn
+hK
+yf
+yf
+YZ
+Oj
+YZ
+ZT
+ZT
+ZT
+ZT
+ZT
+"}
+(3,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+bI
+XG
+bI
+sm
+dD
+Sn
+Sn
+dD
+lG
+Rh
+Rh
+YZ
+Oj
+YZ
+ZT
+ZT
+ZT
+ZT
+ZT
+"}
+(4,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+uC
+XG
+uC
+Le
+dD
+yA
+yA
+dD
+hK
+yf
+yf
+YZ
+Oj
+YZ
+ZT
+ZT
+ZT
+ZT
+ZT
+"}
+(5,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+bI
+XG
+bI
+sm
+dD
+Sn
+Sn
+dD
+lG
+Rh
+Rh
+YZ
+Oj
+YZ
+ZT
+ZT
+ZT
+ZT
+ZT
+"}
+(6,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+wS
+XG
+uC
+Le
+dD
+yA
+yA
+dD
+hK
+yf
+yf
+YZ
+Oj
+YZ
+ZT
+ZT
+ZT
+ZT
+ZT
+"}
+(7,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+EL
+EL
+MP
+bI
+XG
+bI
+sm
+dD
+Sn
+Sn
+dD
+lG
+Rh
+Rh
+YZ
+Oj
+YZ
+yf
+yf
+yf
+yf
+zS
+"}
+(8,1,1) = {"
+ZT
+ZT
+cP
+Ke
+EL
+Tk
+MP
+wS
+XG
+uC
+Le
+dD
+yA
+yA
+dD
+hK
+yf
+yf
+YZ
+Oj
+YZ
+yf
+yf
+Rh
+yf
+yf
+"}
+(9,1,1) = {"
+ZT
+ZT
+dl
+Ok
+ND
+Zn
+Ei
+bI
+KZ
+lG
+sm
+dD
+Sn
+Sn
+dD
+lG
+Rh
+Rh
+YZ
+YZ
+YZ
+tw
+Rh
+Rh
+Rh
+yf
+"}
+(10,1,1) = {"
+ZT
+nR
+AH
+iD
+MP
+MP
+MP
+sq
+aA
+rJ
+gf
+rJ
+rJ
+td
+yf
+yf
+yf
+yf
+Rh
+yf
+yf
+yf
+yf
+Rh
+yf
+yf
+"}
+(11,1,1) = {"
+oC
+GB
+UN
+sn
+sn
+sn
+de
+GK
+wG
+TC
+mj
+fW
+at
+XA
+td
+MP
+MP
+MP
+MP
+MP
+MP
+yf
+WB
+YZ
+WB
+yf
+"}
+(12,1,1) = {"
+cS
+hJ
+qe
+ry
+ry
+ry
+ry
+cX
+ry
+ry
+nd
+ry
+yD
+Ex
+ck
+iC
+Uu
+kW
+Uu
+EM
+MP
+yf
+YZ
+Oj
+YZ
+yf
+"}
+(13,1,1) = {"
+ME
+qr
+Hz
+gj
+te
+te
+ez
+Mr
+DA
+ej
+Dz
+jZ
+gB
+SR
+SX
+Vn
+Vn
+cp
+Uu
+Uu
+MP
+yf
+YZ
+Oj
+YZ
+yf
+"}
+(14,1,1) = {"
+Ne
+yd
+bW
+VP
+EX
+Vg
+KX
+px
+nW
+Cn
+fj
+xB
+WI
+IE
+JV
+Bc
+JH
+Lv
+XY
+LJ
+MP
+Rh
+YZ
+Oj
+YZ
+Rh
+"}
+(15,1,1) = {"
+MP
+zh
+QD
+Hj
+rt
+Vg
+JL
+na
+tE
+tE
+JL
+Xy
+Ml
+Ef
+iD
+MJ
+QJ
+pP
+pP
+MJ
+MP
+yf
+YZ
+Oj
+YZ
+yf
+"}
+(16,1,1) = {"
+MP
+aC
+bW
+TO
+fK
+JL
+UP
+ti
+ti
+Bk
+JL
+JK
+WT
+Ef
+MP
+Lw
+Uu
+Uu
+Uu
+Uu
+MP
+Rh
+YZ
+Oj
+YZ
+yf
+"}
+(17,1,1) = {"
+oS
+fa
+bW
+ZO
+yZ
+qA
+iJ
+so
+so
+so
+js
+CW
+YF
+Py
+iD
+YD
+Uu
+Uu
+ey
+Uu
+MP
+yf
+YZ
+Oj
+YZ
+yf
+"}
+(18,1,1) = {"
+iD
+fa
+bW
+YX
+Qu
+aV
+jp
+tn
+uR
+tn
+NU
+Hw
+ac
+ac
+iD
+xo
+Uu
+xo
+vD
+Uu
+MP
+yf
+YZ
+Oj
+YZ
+yf
+"}
+(19,1,1) = {"
+oS
+fa
+bW
+LE
+Gz
+lE
+CT
+UM
+UM
+UM
+OR
+jB
+Nx
+aw
+iD
+Uu
+Uu
+Uu
+un
+Uu
+MP
+Rh
+YZ
+Oj
+YZ
+yf
+"}
+(20,1,1) = {"
+MP
+Bl
+bW
+iU
+JL
+OR
+Wf
+mW
+mW
+RA
+JL
+JK
+WT
+Ef
+MP
+Lw
+Uu
+Uu
+Uu
+Uu
+MP
+Rh
+YZ
+Oj
+YZ
+yf
+"}
+(21,1,1) = {"
+MP
+nV
+mE
+Ws
+VN
+wz
+JL
+tE
+tE
+tE
+JL
+vO
+Np
+Ef
+iD
+MJ
+Dj
+IF
+Dj
+MJ
+MP
+yf
+YZ
+Oj
+YZ
+yf
+"}
+(22,1,1) = {"
+iD
+fa
+hy
+Ws
+Pa
+wz
+fj
+Nw
+df
+re
+KX
+ni
+lw
+bH
+JV
+Bc
+Ph
+Ph
+nH
+LJ
+MP
+Rh
+YZ
+Oj
+YZ
+Rh
+"}
+(23,1,1) = {"
+iD
+vX
+bo
+GX
+Ik
+Ik
+SL
+YB
+RV
+qm
+MK
+ii
+rY
+Qn
+ab
+ZH
+ZH
+MI
+Uu
+Uu
+MP
+Rh
+YZ
+Oj
+YZ
+yf
+"}
+(24,1,1) = {"
+mH
+bT
+Lg
+zf
+ry
+ry
+ry
+OK
+ry
+ry
+sA
+ry
+mX
+BD
+Uq
+zF
+Uu
+GI
+Uu
+Ab
+MP
+Rh
+YZ
+Oj
+YZ
+yf
+"}
+(25,1,1) = {"
+iD
+mU
+in
+Ur
+Es
+Kv
+Gl
+aY
+Kv
+Kv
+Fr
+vN
+nz
+In
+Ub
+MP
+MP
+MP
+MP
+MP
+MP
+yf
+YZ
+YZ
+YZ
+yf
+"}
+(26,1,1) = {"
+wt
+av
+kA
+qo
+EL
+MP
+MP
+Cb
+Uu
+Uu
+pA
+jg
+qc
+fq
+LS
+Hn
+dw
+yf
+Rh
+yf
+yf
+yf
+yf
+Rh
+yf
+yf
+"}
+(27,1,1) = {"
+ZT
+ZT
+ZT
+ou
+DC
+iD
+Uu
+mi
+NK
+NK
+Ah
+Uu
+Jn
+MP
+dw
+dw
+dw
+Rh
+Rh
+Rh
+Rh
+tw
+Rh
+Rh
+Rh
+Rh
+"}
+(28,1,1) = {"
+ZT
+ZT
+ZT
+OU
+Ok
+CH
+GI
+gx
+TB
+gQ
+gQ
+ln
+XK
+MP
+yf
+yf
+Rh
+yf
+Rh
+Oj
+YZ
+yf
+yf
+Rh
+yf
+yf
+"}
+(29,1,1) = {"
+ZT
+ZT
+ZT
+FG
+NZ
+MP
+MP
+MP
+MP
+MP
+iD
+iD
+iD
+MP
+Rh
+Rh
+Rh
+Rh
+Rh
+Oj
+YZ
+yf
+yf
+Rh
+yf
+zS
+"}
diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm
new file mode 100644
index 0000000000..7f55d69b17
--- /dev/null
+++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm
@@ -0,0 +1,1855 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/button/door{
+ dir = 4;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = 24;
+ req_access_txt = "10"
+ },
+/obj/structure/rack,
+/obj/item/clothing/gloves/color/yellow,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cB" = (
+/obj/machinery/button/door{
+ dir = 1;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ req_access_txt = "10"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"cP" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"dz" = (
+/turf/open/space/basic,
+/area/space/nearstation)
+"dN" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"dW" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"ea" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"eA" = (
+/obj/structure/table,
+/obj/item/clothing/suit/radiation,
+/obj/item/clothing/head/radiation,
+/obj/item/clothing/glasses/meson,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"eI" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"eJ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"eL" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"fh" = (
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"fr" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine Southwest";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"fH" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"gf" = (
+/obj/item/storage/toolbox/mechanical,
+/obj/item/flashlight,
+/obj/item/pipe_dispenser,
+/obj/structure/table,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ht" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"hR" = (
+/obj/machinery/power/tesla_coil,
+/obj/structure/cable,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"ic" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"js" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine East";
+ dir = 8;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"jx" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"jH" = (
+/obj/structure/sign/warning/radiation/rad_area,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"kh" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ku" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"kK" = (
+/turf/closed/wall,
+/area/engine/engineering)
+"la" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_y = 5
+ },
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"lJ" = (
+/obj/structure/sign/warning/electricshock,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"lY" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"me" = (
+/obj/structure/rack,
+/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/item/clothing/gloves/color/yellow,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"mB" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"nL" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector{
+ dir = 1
+ },
+/turf/open/space/basic,
+/area/engine/engineering)
+"nR" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"nW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"qH" = (
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = -32
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"qP" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"rj" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"rm" = (
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"rM" = (
+/obj/machinery/field/generator,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"rT" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"tc" = (
+/obj/machinery/light,
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine South";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"tl" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"to" = (
+/obj/structure/sign/warning/radiation/rad_area,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"tv" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable,
+/obj/machinery/power/emitter,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"tC" = (
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"tE" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"tT" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/door{
+ dir = 4;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = 24;
+ req_access_txt = "10"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"uG" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"wt" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"xg" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xx" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xJ" = (
+/obj/item/tank/internals/emergency_oxygen/engi{
+ pixel_x = 5
+ },
+/obj/item/clothing/gloves/color/black,
+/obj/item/clothing/glasses/meson/engine,
+/obj/structure/table,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xQ" = (
+/obj/machinery/power/tesla_coil,
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"yj" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine West";
+ dir = 4;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"yo" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/rack,
+/obj/item/clothing/gloves/color/yellow,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"yq" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
+"yU" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/obj/structure/fans/tiny,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"zW" = (
+/obj/structure/chair/stool,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"zZ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/door{
+ dir = 8;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = -24;
+ req_access_txt = "10"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Aw" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"AF" = (
+/obj/structure/rack,
+/obj/item/clothing/gloves/color/yellow,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Bb" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#c1caff"
+ },
+/obj/machinery/camera/emp_proof{
+ c_tag = "Particle Accelerator";
+ network = list("ss13","engine")
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/the_singularitygen/tesla,
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Bh" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Bj" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"BG" = (
+/obj/structure/closet/emcloset/anchored,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Ce" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"Ch" = (
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"DF" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"Eu" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ER" = (
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = 32
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ES" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/item/clothing/head/welding,
+/obj/item/weldingtool/largetank,
+/obj/item/wrench,
+/obj/item/stack/cable_coil/red,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"FK" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"FM" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"FP" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
+"FY" = (
+/obj/structure/table,
+/obj/item/book/manual/wiki/engineering_singulo_tesla,
+/obj/item/geiger_counter,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Hc" = (
+/obj/machinery/light,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"HQ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/button/door{
+ dir = 8;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = -24;
+ req_access_txt = "10"
+ },
+/obj/structure/rack,
+/obj/item/clothing/gloves/color/yellow,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"HW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"In" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Js" = (
+/obj/structure/particle_accelerator/end_cap,
+/obj/structure/particle_accelerator/fuel_chamber,
+/obj/structure/particle_accelerator/particle_emitter/center,
+/obj/structure/particle_accelerator/particle_emitter/left,
+/obj/structure/particle_accelerator/particle_emitter/right,
+/obj/structure/particle_accelerator/power_box,
+/obj/machinery/particle_accelerator/control_box,
+/obj/structure/closet/crate/engineering{
+ name = "Particle Accelerator Crate"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"JC" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"JZ" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/engine/engineering)
+"Kg" = (
+/obj/structure/reflector/single/anchored{
+ dir = 5
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Lr" = (
+/obj/structure/table,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/storage/toolbox/electrical{
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Ls" = (
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"LB" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"LJ" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine Southeast";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"LO" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"LV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Mi" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Mn" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"MD" = (
+/obj/structure/reagent_dispensers/fueltank,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"MJ" = (
+/turf/open/space/basic,
+/area/space)
+"Nm" = (
+/obj/structure/sign/warning/securearea,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"No" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Nz" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"NS" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Oe" = (
+/obj/structure/reflector/single/anchored{
+ dir = 9
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Og" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Ox" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/box,
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Pg" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Pj" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"Pk" = (
+/obj/machinery/power/tesla_coil,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Pt" = (
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Qk" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine Northeast";
+ network = list("ss13","engine")
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Ra" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/closet/emcloset/anchored,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Rp" = (
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"RE" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"RL" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"Si" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"SD" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Tr" = (
+/obj/structure/sign/warning/radiation/rad_area,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"TE" = (
+/obj/machinery/power/tesla_coil,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"TN" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"Um" = (
+/turf/template_noop,
+/area/template_noop)
+"UL" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine Northwest";
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"UV" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Vf" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"VR" = (
+/obj/structure/lattice/catwalk,
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine Northeast";
+ network = list("ss13","engine")
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"Wf" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ww" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"WI" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"WP" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"WQ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"WX" = (
+/obj/structure/rack,
+/obj/item/clothing/gloves/color/yellow,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Xk" = (
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Yd" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Yl" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
+"YY" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Zb" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Zx" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Zz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ZF" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ZK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ZS" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"ZY" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+
+(1,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(2,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(3,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(4,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(5,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+Yl
+dz
+dz
+MJ
+MJ
+dz
+dz
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(6,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+rm
+Yl
+dz
+dz
+dz
+dz
+Yl
+dz
+dz
+dz
+dz
+dz
+dz
+dz
+dz
+Um
+Um
+Um
+Um
+"}
+(7,1,1) = {"
+Um
+Um
+Um
+Um
+kK
+kK
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+jH
+Ch
+Ch
+Ch
+Ch
+lJ
+Ch
+Nm
+dz
+MJ
+MJ
+MJ
+MJ
+"}
+(8,1,1) = {"
+Um
+Um
+Lr
+la
+kK
+Ra
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+Ch
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+dz
+dz
+MJ
+MJ
+MJ
+"}
+(9,1,1) = {"
+Um
+Um
+FM
+FM
+In
+ER
+yU
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+yj
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+Ls
+Pt
+dz
+dz
+MJ
+MJ
+"}
+(10,1,1) = {"
+Um
+Si
+fh
+ZY
+to
+Ch
+Ch
+UL
+dz
+Yl
+dz
+dz
+FP
+FP
+FP
+dz
+dz
+Yl
+dz
+Pt
+Ch
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(11,1,1) = {"
+xJ
+gf
+fh
+dN
+YY
+MD
+Ch
+Pt
+dz
+Yl
+dz
+dz
+FP
+FP
+FP
+dz
+dz
+Yl
+dz
+Pt
+fr
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(12,1,1) = {"
+LO
+Eu
+Pg
+cP
+Bh
+tv
+rj
+Pt
+dz
+Yl
+dz
+dz
+Kg
+FP
+FP
+FP
+dz
+Yl
+dz
+Yl
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(13,1,1) = {"
+NS
+xx
+fh
+zW
+Bh
+tv
+rj
+Pt
+rm
+rm
+rm
+rm
+rm
+rm
+Kg
+rm
+rm
+rm
+rm
+Yl
+Hc
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(14,1,1) = {"
+yo
+me
+aT
+Aw
+JC
+WI
+rj
+Og
+rm
+tl
+ht
+Bj
+ht
+WP
+ht
+Pj
+ht
+TN
+rm
+Yl
+Pt
+Ch
+jH
+Yl
+dz
+MJ
+"}
+(15,1,1) = {"
+jH
+FK
+Ch
+wt
+tE
+rj
+rj
+Og
+rm
+ZS
+Xk
+TE
+rm
+TE
+rm
+TE
+Xk
+ZS
+rm
+dz
+Pt
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(16,1,1) = {"
+Ch
+ES
+ZK
+ZK
+zZ
+ZK
+fH
+Og
+rm
+ea
+hR
+FP
+FP
+FP
+FP
+FP
+xQ
+RL
+rm
+dz
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(17,1,1) = {"
+wt
+Zz
+Wf
+Ox
+nR
+Zb
+lY
+Og
+rm
+yq
+rm
+FP
+rM
+rm
+rM
+FP
+rm
+yq
+rm
+Yl
+Pt
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(18,1,1) = {"
+cB
+Bb
+qP
+ZF
+SD
+Yd
+eI
+LB
+UV
+dW
+hR
+FP
+rm
+rm
+rm
+FP
+xQ
+ku
+rm
+Yl
+tc
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(19,1,1) = {"
+wt
+eJ
+Zx
+nW
+Mn
+WQ
+lY
+Og
+rm
+ZS
+rm
+FP
+rM
+rm
+rM
+FP
+rm
+ZS
+rm
+Yl
+Pt
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(20,1,1) = {"
+Ch
+Js
+No
+No
+tT
+No
+LV
+Og
+rm
+DF
+hR
+FP
+FP
+FP
+FP
+FP
+xQ
+RE
+rm
+dz
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(21,1,1) = {"
+jH
+Nz
+Ch
+wt
+tE
+rj
+rj
+Og
+rm
+ZS
+Xk
+Pk
+rm
+Pk
+rm
+Pk
+Xk
+ZS
+rm
+dz
+Pt
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(22,1,1) = {"
+AF
+WX
+HQ
+Aw
+JC
+WI
+rj
+Og
+rm
+Ce
+ht
+ic
+ht
+eL
+ht
+Vf
+ht
+jx
+rm
+Yl
+Pt
+Ch
+jH
+Yl
+dz
+MJ
+"}
+(23,1,1) = {"
+fh
+kh
+fh
+fh
+Bh
+tv
+rj
+Pt
+rm
+rm
+rm
+rm
+rm
+rm
+Oe
+rm
+rm
+rm
+rm
+Yl
+Hc
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(24,1,1) = {"
+fh
+kh
+uG
+cP
+xg
+tv
+rj
+Pt
+dz
+Yl
+dz
+dz
+Oe
+FP
+FP
+FP
+dz
+Yl
+dz
+Yl
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(25,1,1) = {"
+eA
+FY
+mB
+Rp
+HW
+Mi
+Ch
+Pt
+dz
+Yl
+dz
+dz
+FP
+FP
+VR
+dz
+dz
+Yl
+dz
+Pt
+LJ
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(26,1,1) = {"
+fh
+kh
+mB
+ZY
+Tr
+rT
+rT
+Qk
+nL
+Yl
+dz
+dz
+FP
+FP
+FP
+dz
+dz
+Yl
+dz
+Pt
+Ch
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(27,1,1) = {"
+Um
+Um
+Um
+fh
+Ww
+qH
+yU
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+js
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+Ls
+Pt
+dz
+dz
+MJ
+MJ
+"}
+(28,1,1) = {"
+Um
+Um
+Um
+fh
+JZ
+BG
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+Ch
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+Yl
+dz
+dz
+dz
+MJ
+"}
+(29,1,1) = {"
+Um
+Um
+Um
+fh
+JZ
+kK
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+jH
+Ch
+Ch
+Ch
+Ch
+lJ
+Ch
+Nm
+Yl
+Yl
+Yl
+dz
+MJ
+"}
diff --git a/_maps/RandomZLevels/TheBeach.dmm b/_maps/RandomZLevels/TheBeach.dmm
new file mode 100644
index 0000000000..cc9f50d029
--- /dev/null
+++ b/_maps/RandomZLevels/TheBeach.dmm
@@ -0,0 +1,15537 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/closed/indestructible/sandstone,
+/area/awaymission/beach)
+"ab" = (
+/turf/open/indestructible/binary{
+ density = 1;
+ desc = "I can't move through this.";
+ icon = 'icons/misc/beach.dmi';
+ icon_state = "water";
+ name = "deep ocean water"
+ },
+/area/awaymission/beach)
+"ac" = (
+/turf/open/floor/plating/beach/water,
+/area/awaymission/beach)
+"ad" = (
+/turf/open/floor/plating/beach/coastline_b{
+ dir = 1
+ },
+/area/awaymission/beach)
+"ae" = (
+/turf/open/floor/plating/beach/coastline_b{
+ dir = 8
+ },
+/area/awaymission/beach)
+"af" = (
+/turf/open/floor/plating/beach/coastline_t{
+ dir = 9
+ },
+/area/awaymission/beach)
+"ag" = (
+/turf/open/floor/plating/beach/coastline_t{
+ dir = 1
+ },
+/area/awaymission/beach)
+"ah" = (
+/turf/open/floor/plating/beach/coastline_t{
+ dir = 5
+ },
+/area/awaymission/beach)
+"ai" = (
+/turf/open/floor/plating/beach/coastline_b{
+ dir = 4
+ },
+/area/awaymission/beach)
+"aj" = (
+/turf/open/floor/plating/beach/coastline_t{
+ dir = 8
+ },
+/area/awaymission/beach)
+"ak" = (
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"al" = (
+/obj/effect/overlay/palmtree_r{
+ desc = "How did you get here?";
+ icon_state = "palm2";
+ name = "\proper island palm tree"
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"am" = (
+/turf/open/floor/plating/beach/coastline_t{
+ dir = 4
+ },
+/area/awaymission/beach)
+"an" = (
+/obj/effect/overlay/coconut{
+ pixel_x = 17;
+ pixel_y = 7
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"ao" = (
+/turf/open/floor/plating/beach/coastline_t{
+ dir = 10
+ },
+/area/awaymission/beach)
+"ap" = (
+/turf/open/floor/plating/beach/coastline_t,
+/area/awaymission/beach)
+"aq" = (
+/turf/open/floor/plating/beach/coastline_t{
+ dir = 6
+ },
+/area/awaymission/beach)
+"ar" = (
+/turf/open/floor/plating/beach/coastline_b,
+/area/awaymission/beach)
+"as" = (
+/obj/structure/flora/rock{
+ desc = "A volcanic rock.";
+ name = "coastal rock"
+ },
+/obj/structure/flora/ausbushes/stalkybush{
+ desc = "It can't be smoked.";
+ name = "sea weed"
+ },
+/turf/open/indestructible/binary{
+ density = 1;
+ desc = "I can't move through this.";
+ icon = 'icons/misc/beach.dmi';
+ icon_state = "water";
+ name = "deep ocean water"
+ },
+/area/awaymission/beach)
+"at" = (
+/obj/structure/flora/rock{
+ desc = "A volcanic rock.";
+ name = "coastal rock"
+ },
+/turf/open/indestructible/binary{
+ density = 1;
+ desc = "I can't move through this.";
+ icon = 'icons/misc/beach.dmi';
+ icon_state = "water";
+ name = "deep ocean water"
+ },
+/area/awaymission/beach)
+"au" = (
+/obj/structure/closet/crate/wooden{
+ desc = "Now this is what island exploration is all about.";
+ name = "Treasure Chest"
+ },
+/obj/item/clothing/head/pirate,
+/obj/item/clothing/glasses/eyepatch,
+/obj/item/clothing/suit/pirate,
+/obj/item/melee/sabre{
+ desc = "This isn't real however it can trick someone into thinking you have something real..";
+ force = 0;
+ name = "foam pirate's sabre";
+ throwforce = 0
+ },
+/obj/item/melee/sabre{
+ desc = "This isn't real however it can trick someone into thinking you have something real..";
+ force = 0;
+ name = "foam pirate's sabre";
+ throwforce = 0
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"av" = (
+/turf/open/floor/plating/beach/water{
+ desc = "What's the difference?";
+ name = "coastline water"
+ },
+/area/awaymission/beach)
+"aw" = (
+/turf/open/floor/plating/beach/coastline_b{
+ dir = 6
+ },
+/area/awaymission/beach)
+"ax" = (
+/turf/open/floor/plating/beach/coastline_b{
+ dir = 10
+ },
+/area/awaymission/beach)
+"ay" = (
+/turf/open/floor/plating/beach/coastline_t/sandwater_inner{
+ dir = 4
+ },
+/area/awaymission/beach)
+"az" = (
+/turf/open/floor/plating/beach/coastline_t/sandwater_inner{
+ dir = 1
+ },
+/area/awaymission/beach)
+"aA" = (
+/obj/effect/overlay/palmtree_l,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aB" = (
+/mob/living/simple_animal/crab/kreb,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aC" = (
+/obj/item/flashlight/flare/torch,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aD" = (
+/obj/effect/overlay/coconut,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aE" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aF" = (
+/obj/structure/bonfire/prelit,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aG" = (
+/obj/item/clothing/mask/gas/tiki_mask,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aH" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind{
+ pixel_x = -17;
+ pixel_y = 17
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aI" = (
+/obj/item/melee/skateboard{
+ color = "#6666ff";
+ desc = "Yes, surf boards have wheels. Stop laughing.";
+ name = "surf board";
+ pixel_x = -15;
+ pixel_y = 1
+ },
+/turf/open/floor/plating/beach/water,
+/area/awaymission/beach)
+"aJ" = (
+/obj/item/reagent_containers/food/drinks/beer/light{
+ pixel_x = -14;
+ pixel_y = 15
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aK" = (
+/mob/living/simple_animal/crab,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aL" = (
+/obj/machinery/gateway{
+ dir = 9
+ },
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 9
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aM" = (
+/obj/machinery/gateway{
+ dir = 1
+ },
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 1
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aN" = (
+/obj/machinery/gateway{
+ dir = 5
+ },
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 5
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aO" = (
+/obj/effect/baseturf_helper/beach/sand,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aP" = (
+/obj/machinery/gateway{
+ dir = 8
+ },
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 8
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aQ" = (
+/obj/machinery/gateway/centeraway,
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aR" = (
+/obj/machinery/gateway{
+ dir = 4
+ },
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 4
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aS" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime{
+ pixel_x = -12;
+ pixel_y = 14
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aT" = (
+/turf/open/floor/plating/beach/coastline_t/sandwater_inner{
+ dir = 8
+ },
+/area/awaymission/beach)
+"aU" = (
+/obj/machinery/gateway{
+ dir = 10
+ },
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 10
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aV" = (
+/obj/machinery/gateway,
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aW" = (
+/obj/machinery/gateway{
+ dir = 6
+ },
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 6
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"aX" = (
+/turf/closed/wall/mineral/sandstone,
+/area/awaymission/beach)
+"aY" = (
+/turf/open/floor/plating/beach/coastline_b{
+ dir = 5
+ },
+/area/awaymission/beach)
+"aZ" = (
+/obj/effect/overlay/palmtree_r,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"ba" = (
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bb" = (
+/obj/structure/dresser{
+ density = 0;
+ pixel_y = 18
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bc" = (
+/obj/structure/mirror{
+ pixel_y = 28
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bd" = (
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"be" = (
+/obj/machinery/computer/security/telescreen/entertainment{
+ pixel_y = 32
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bf" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 9
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bg" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 1
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bh" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 5
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bi" = (
+/obj/machinery/button/door{
+ id = "changlinhut2";
+ name = "changing room lock";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ specialfunctions = 4
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bj" = (
+/obj/machinery/button/door{
+ id = "changlinhut1";
+ name = "changing room lock";
+ normaldoorcontrol = 1;
+ pixel_x = -24;
+ specialfunctions = 4
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bk" = (
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/item/clothing/glasses/heat,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bl" = (
+/obj/structure/bed,
+/obj/machinery/button/door{
+ id = "theloveshack1";
+ name = "door lock";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ specialfunctions = 4
+ },
+/obj/effect/spawner/lootdrop/bedsheet,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bm" = (
+/obj/structure/bed,
+/obj/machinery/button/door{
+ id = "theloveshack2";
+ name = "door lock";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ specialfunctions = 4
+ },
+/obj/effect/spawner/lootdrop/bedsheet,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bn" = (
+/obj/structure/bed,
+/obj/machinery/button/door{
+ id = "theloveshack3";
+ name = "door lock";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ specialfunctions = 4
+ },
+/obj/effect/spawner/lootdrop/bedsheet,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bo" = (
+/turf/open/floor/plating/beach/coastline_t/sandwater_inner,
+/area/awaymission/beach)
+"bp" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 8
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bq" = (
+/obj/effect/turf_decal/sand,
+/obj/machinery/telecomms/relay/preset/mining,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"br" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 4
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bs" = (
+/obj/machinery/door/airlock/sandstone{
+ id_tag = "changlinhut2";
+ name = "changing room"
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bt" = (
+/obj/machinery/door/airlock/sandstone{
+ id_tag = "changlinhut1";
+ name = "changing room"
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bu" = (
+/obj/item/reagent_containers/food/drinks/bottle/wine,
+/obj/item/reagent_containers/food/drinks/bottle/rum,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bv" = (
+/obj/effect/overlay/palmtree_r,
+/obj/effect/overlay/coconut,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bw" = (
+/turf/open/floor/plating/beach/coastline_b{
+ dir = 9
+ },
+/area/awaymission/beach)
+"bx" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 10
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"by" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bz" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 6
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bA" = (
+/obj/structure{
+ desc = "Bar and beach south, dorms east.";
+ icon = 'icons/obj/stationobjs.dmi';
+ icon_state = "signpost";
+ name = "directions signpost"
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bB" = (
+/obj/machinery/door/airlock/sandstone{
+ id_tag = "theloveshack1";
+ name = "Beach Hut"
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bC" = (
+/obj/machinery/door/airlock/sandstone{
+ id_tag = "theloveshack2";
+ name = "Beach Hut"
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bD" = (
+/obj/machinery/door/airlock/sandstone{
+ id_tag = "theloveshack3";
+ name = "Beach Hut"
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bE" = (
+/obj/effect/overlay/palmtree_l{
+ pixel_y = 25
+ },
+/obj/effect/overlay/coconut{
+ pixel_x = -7;
+ pixel_y = 7
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bF" = (
+/obj/structure/bedsheetbin,
+/obj/effect/turf_decal/sand,
+/obj/structure/table/wood,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bG" = (
+/obj/item/clothing/shoes/sandal,
+/obj/item/clothing/shoes/sandal,
+/obj/item/clothing/shoes/sandal,
+/obj/structure/closet/crate,
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bH" = (
+/obj/structure/closet/athletic_mixed,
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bI" = (
+/obj/machinery/door/airlock/sandstone{
+ id_tag = "loveshack";
+ name = "Beach Hut"
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bJ" = (
+/obj/machinery/door/airlock/sandstone{
+ id_tag = "theloveshack4";
+ name = "Beach Hut"
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bK" = (
+/obj/machinery/door/airlock/sandstone{
+ id_tag = "theloveshack5";
+ name = "Beach Hut"
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bL" = (
+/obj/structure/toilet{
+ pixel_y = 8
+ },
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plasteel/white,
+/area/awaymission/beach)
+"bM" = (
+/obj/structure/mirror{
+ pixel_x = 28
+ },
+/obj/effect/turf_decal/sand,
+/obj/structure/sink{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel/white,
+/area/awaymission/beach)
+"bN" = (
+/obj/structure/mirror{
+ pixel_x = -28
+ },
+/obj/effect/turf_decal/sand,
+/obj/structure/sink{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel/white,
+/area/awaymission/beach)
+"bO" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/bottle/champagne,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bP" = (
+/obj/item/trash/chips{
+ pixel_x = -18;
+ pixel_y = 7
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bQ" = (
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plasteel/white,
+/area/awaymission/beach)
+"bR" = (
+/obj/machinery/button/door{
+ id = "toilet1";
+ name = "restroom lock";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ specialfunctions = 4
+ },
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plasteel/white,
+/area/awaymission/beach)
+"bS" = (
+/obj/machinery/button/door{
+ id = "toilet2";
+ name = "restroom lock";
+ normaldoorcontrol = 1;
+ pixel_x = -24;
+ specialfunctions = 4
+ },
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plasteel/white,
+/area/awaymission/beach)
+"bT" = (
+/obj/structure/bed,
+/obj/machinery/button/door{
+ id = "loveshack";
+ name = "love shack lock";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ specialfunctions = 4
+ },
+/obj/item/bedsheet/red,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bU" = (
+/obj/structure/bed,
+/obj/machinery/button/door{
+ id = "theloveshack4";
+ name = "door lock";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ specialfunctions = 4
+ },
+/obj/effect/spawner/lootdrop/bedsheet,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bV" = (
+/obj/structure/sign/poster/ripped{
+ pixel_x = 32
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"bW" = (
+/obj/structure/bed,
+/obj/machinery/button/door{
+ id = "theloveshack5";
+ name = "door lock";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ specialfunctions = 4
+ },
+/obj/effect/spawner/lootdrop/bedsheet,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"bX" = (
+/obj/machinery/door/airlock/sandstone{
+ id_tag = "toilet1";
+ name = "restroom stall"
+ },
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plasteel/white,
+/area/awaymission/beach)
+"bY" = (
+/obj/machinery/door/airlock/sandstone{
+ id_tag = "toilet2";
+ name = "restroom stall"
+ },
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plasteel/white,
+/area/awaymission/beach)
+"bZ" = (
+/obj/structure/dresser{
+ density = 0
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"ca" = (
+/obj/machinery/computer/security/telescreen/entertainment{
+ pixel_y = -32
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cb" = (
+/obj/structure/sign/poster/contraband/syndicate_recruitment{
+ pixel_x = -28
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cc" = (
+/obj/item/trash/can{
+ pixel_x = 14;
+ pixel_y = 7
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cd" = (
+/obj/effect/turf_decal/sand,
+/obj/machinery/vending/cola/starkist,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"ce" = (
+/obj/effect/turf_decal/sand,
+/obj/machinery/vending/snack/random,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cf" = (
+/obj/effect/turf_decal/sand,
+/obj/machinery/vending/cigarette,
+/obj/structure/sign/poster/contraband/smoke{
+ pixel_y = -32
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cg" = (
+/obj/effect/turf_decal/sand,
+/obj/machinery/vending/cola/space_up,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"ch" = (
+/obj/effect/overlay/palmtree_l,
+/obj/effect/overlay/coconut,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"ci" = (
+/obj/structure/closet/gmcloset,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cj" = (
+/obj/structure/closet/secure_closet/bar,
+/obj/item/storage/box/drinkingglasses,
+/obj/item/storage/box/drinkingglasses,
+/obj/item/storage/box/drinkingglasses,
+/obj/item/storage/box/drinkingglasses,
+/obj/item/storage/box/drinkingglasses,
+/obj/item/storage/box/drinkingglasses,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"ck" = (
+/obj/effect/mob_spawn/human/bartender/alive,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cl" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/shaker,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cm" = (
+/obj/structure/table/wood,
+/obj/item/clothing/glasses/sunglasses,
+/obj/item/reagent_containers/food/drinks/beer,
+/obj/item/reagent_containers/food/drinks/beer,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cn" = (
+/obj/machinery/vending/boozeomat/all_access{
+ desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one. May not work for bartenders that don't have Nanotrasen bank accounts."
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"co" = (
+/obj/structure/table/wood,
+/obj/machinery/chem_dispenser/drinks/fullupgrade,
+/obj/structure/sign/picture_frame{
+ pixel_y = 32
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cp" = (
+/obj/structure/table/wood,
+/obj/machinery/chem_dispenser/drinks/beer/fullupgrade,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cq" = (
+/obj/structure/table/wood,
+/obj/machinery/microwave,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cr" = (
+/obj/structure/closet/secure_closet/freezer/kitchen{
+ req_access = list(25)
+ },
+/obj/item/storage/fancy/egg_box,
+/obj/item/reagent_containers/food/condiment/milk,
+/obj/item/reagent_containers/food/condiment/milk,
+/obj/item/reagent_containers/food/condiment/flour,
+/obj/item/reagent_containers/food/condiment/flour,
+/obj/item/reagent_containers/food/condiment/mayonnaise,
+/obj/item/reagent_containers/food/condiment/sugar,
+/obj/item/reagent_containers/food/condiment/sugar,
+/obj/item/reagent_containers/food/condiment/enzyme,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cs" = (
+/obj/machinery/processor,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"ct" = (
+/obj/effect/turf_decal/stripes/white/corner,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cu" = (
+/obj/effect/turf_decal/stripes/white/line,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cv" = (
+/obj/effect/turf_decal/stripes/white/corner{
+ dir = 4
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cw" = (
+/obj/structure/closet/secure_closet/freezer/meat/open,
+/obj/item/reagent_containers/food/snacks/meat/slab/goliath,
+/obj/item/reagent_containers/food/snacks/meat/slab/xeno,
+/obj/item/reagent_containers/food/snacks/meat/slab/spider,
+/obj/item/reagent_containers/food/snacks/meat/slab/killertomato,
+/obj/item/reagent_containers/food/snacks/meat/slab/bear,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cx" = (
+/obj/effect/turf_decal/stripes/white/line{
+ dir = 4
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cy" = (
+/obj/effect/turf_decal/stripes/white/full,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cz" = (
+/obj/effect/turf_decal/stripes/white/line{
+ dir = 8
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cA" = (
+/obj/structure/mineral_door/wood{
+ name = "bar"
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cB" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/ale,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cC" = (
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cD" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/rag{
+ pixel_y = 7
+ },
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cE" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cF" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"cG" = (
+/obj/item/toy/beach_ball,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cH" = (
+/obj/structure/chair/stool,
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cI" = (
+/obj/structure/sign/barsign{
+ pixel_y = 32
+ },
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cJ" = (
+/obj/effect/turf_decal/stripes/white/corner,
+/obj/effect/turf_decal/stripes/white/line{
+ dir = 4
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cK" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/drinks/beer,
+/obj/item/reagent_containers/food/drinks/beer,
+/obj/item/reagent_containers/food/drinks/beer,
+/obj/item/reagent_containers/food/drinks/beer,
+/obj/item/reagent_containers/food/drinks/beer,
+/obj/item/reagent_containers/food/drinks/beer,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cL" = (
+/obj/structure/table,
+/obj/item/clothing/under/color/rainbow,
+/obj/item/clothing/glasses/sunglasses,
+/obj/item/clothing/head/collectable/petehat{
+ pixel_y = 5
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cM" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/snacks/chips,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cN" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/drinks/soda_cans/sodawater,
+/obj/item/reagent_containers/food/drinks/soda_cans/shamblers,
+/obj/item/reagent_containers/food/drinks/soda_cans/pwr_game,
+/obj/item/reagent_containers/food/drinks/soda_cans/air,
+/obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter,
+/obj/item/reagent_containers/food/drinks/soda_cans/tonic,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cO" = (
+/obj/structure/chair,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cP" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime{
+ pixel_x = -12
+ },
+/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb{
+ pixel_x = 13
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cQ" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/starkist{
+ pixel_x = -12;
+ pixel_y = 3
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cR" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/cola{
+ pixel_x = -8;
+ pixel_y = -4
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cS" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb{
+ pixel_x = -9;
+ pixel_y = -7
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cT" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cU" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/cola{
+ pixel_x = -8;
+ pixel_y = -4
+ },
+/obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind{
+ pixel_x = 15
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cV" = (
+/obj/effect/overlay/coconut{
+ pixel_x = -5;
+ pixel_y = 4
+ },
+/turf/open/floor/plating/beach/coastline_t/sandwater_inner,
+/area/awaymission/beach)
+"cW" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime{
+ pixel_x = -12
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cX" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/cola{
+ pixel_x = -5
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cY" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/starkist{
+ pixel_x = -6
+ },
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"cZ" = (
+/obj/item/clothing/head/collectable/paper{
+ desc = "What looks like an ordinary paper hat is actually a rare and valuable collector's edition paper hat. Keep away from fire, Curators, and ocean waves."
+ },
+/turf/open/floor/plating/beach/water,
+/area/awaymission/beach)
+"da" = (
+/mob/living/simple_animal/parrot,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"db" = (
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/item/clothing/suit/jacket/letterman_nanotrasen,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"dc" = (
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/item/clothing/suit/jacket/letterman_syndie,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"dd" = (
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/item/clothing/suit/jacket/letterman_red,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"de" = (
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/item/clothing/suit/jacket/letterman,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"df" = (
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/item/clothing/neck/necklace/dope,
+/turf/open/floor/wood,
+/area/awaymission/beach)
+"dg" = (
+/obj/item/clothing/glasses/heat,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+"iy" = (
+/obj/item/toy/seashell,
+/turf/open/floor/plating/beach/coastline_t,
+/area/awaymission/beach)
+"MD" = (
+/obj/item/toy/seashell,
+/turf/open/floor/plating/beach/sand,
+/area/awaymission/beach)
+
+(1,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(4,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(5,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(6,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(7,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(8,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(9,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(10,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(11,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(12,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(13,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(14,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(15,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+at
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+at
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+at
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+at
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+at
+ab
+ab
+ab
+ab
+ab
+ab
+at
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(16,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(17,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(18,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(19,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(20,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(21,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(22,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(23,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(24,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+as
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(25,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(26,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(27,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(28,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(29,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+at
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(30,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(31,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(32,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ae
+ae
+ae
+ae
+ae
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(33,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+aw
+af
+aj
+aj
+aj
+ao
+aY
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(34,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+aw
+af
+ay
+MD
+ak
+MD
+aT
+ao
+aY
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(35,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+aw
+af
+ay
+MD
+ak
+ak
+ak
+ak
+aT
+ao
+aY
+ae
+ae
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(36,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+aw
+af
+ay
+ak
+ak
+ak
+MD
+ak
+ak
+ak
+aT
+aj
+aj
+ao
+aY
+ae
+ae
+ae
+ae
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(37,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+aw
+af
+ay
+ak
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aT
+aj
+aj
+aj
+aj
+ao
+aY
+ae
+ac
+ac
+ac
+ac
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(38,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+af
+ay
+ak
+ak
+ak
+ak
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aT
+aj
+ao
+aY
+ac
+ac
+ad
+af
+aj
+aj
+aj
+aj
+aj
+ao
+aY
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(39,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+aA
+ak
+aD
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aT
+ao
+aY
+ae
+aw
+ag
+MD
+aZ
+ak
+ak
+ak
+aT
+ao
+aY
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(40,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+ak
+aD
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+MD
+aT
+aj
+aj
+aj
+ay
+ak
+ak
+ak
+ak
+ak
+MD
+aT
+ao
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(41,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+aC
+ak
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aK
+ak
+cG
+ap
+aY
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(42,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+aC
+aF
+aC
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aD
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aT
+ao
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+at
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(43,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+ak
+aA
+ak
+ak
+aG
+ak
+aD
+ak
+ak
+ak
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(44,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+aC
+aF
+aC
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aA
+ak
+bo
+aq
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(45,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+aC
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aD
+ak
+ap
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(46,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+aD
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ch
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ap
+aY
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(47,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aZ
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aT
+ao
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(48,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aK
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(49,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ak
+ak
+ak
+ak
+iy
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(50,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+aX
+aX
+aX
+aX
+cA
+aX
+ba
+ba
+ak
+ak
+ak
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(51,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ag
+MD
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aZ
+bf
+bp
+bx
+ak
+ak
+aX
+aX
+aX
+aX
+ak
+ba
+cd
+aX
+ci
+bd
+bd
+bd
+cB
+cH
+ba
+ak
+ak
+cO
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(52,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+at
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ad
+ah
+az
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+bg
+bq
+by
+ak
+ak
+aX
+bL
+bQ
+aX
+ak
+ba
+ce
+aX
+cj
+bd
+bd
+bd
+cB
+cH
+ba
+ak
+ak
+cP
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(53,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ax
+ag
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+bh
+br
+bz
+ak
+aA
+aX
+bM
+bR
+bX
+ba
+ba
+ba
+aX
+ck
+bd
+bd
+bd
+cC
+cH
+ba
+ak
+ak
+cO
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(54,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ad
+ah
+az
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ba
+ak
+ak
+aD
+aX
+aX
+aX
+aX
+ak
+ba
+ba
+aX
+cl
+bd
+bd
+bd
+cD
+cH
+ba
+ak
+ak
+ak
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(55,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ax
+ag
+ak
+ak
+ak
+ak
+aL
+aP
+aU
+ak
+ak
+ba
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+aX
+cm
+bd
+bd
+bd
+cC
+cH
+ba
+ak
+ak
+cO
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(56,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+aM
+aQ
+aV
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+cf
+aX
+cn
+bd
+bd
+bd
+cE
+cH
+ba
+ak
+ak
+cQ
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(57,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+aN
+aR
+aW
+ak
+ak
+ak
+bA
+ba
+ba
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+aX
+co
+bd
+bd
+bd
+cF
+cH
+ba
+ak
+ak
+cO
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(58,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+aX
+aX
+aX
+aX
+ak
+ba
+ba
+aX
+cp
+bd
+bd
+bd
+cC
+cH
+ba
+ak
+ak
+cR
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+at
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(59,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+aX
+bN
+bS
+bY
+ba
+ba
+ba
+aX
+cq
+bd
+bd
+bd
+cC
+cH
+ba
+ak
+ak
+cO
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(60,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+aX
+bL
+bQ
+aX
+ak
+ba
+ce
+aX
+bd
+bd
+bd
+bd
+cC
+cH
+ba
+ak
+aA
+cS
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(61,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ak
+aX
+aX
+aX
+aX
+ak
+ba
+ba
+aX
+aX
+aX
+aX
+ak
+ba
+cg
+aX
+cr
+cs
+cw
+bd
+aX
+cI
+ba
+ak
+ak
+cO
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(62,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ak
+aX
+bb
+bd
+aX
+ak
+ba
+ba
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+aX
+aX
+aX
+aX
+aX
+aX
+ba
+ba
+ak
+ak
+cT
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(63,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ad
+ah
+az
+ak
+ak
+ak
+ak
+ak
+aX
+bc
+bi
+bs
+ba
+ba
+ba
+bF
+ak
+ak
+ak
+ak
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ak
+ak
+ak
+bo
+aq
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(64,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ax
+ag
+ak
+ak
+ak
+ak
+ak
+aX
+aX
+aX
+aX
+ak
+ba
+ba
+bG
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ap
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(65,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+bH
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+bo
+aq
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(66,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+aE
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+bG
+ak
+ak
+aZ
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+cK
+cM
+ap
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(67,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+aH
+dg
+ak
+aD
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+bH
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+cL
+cN
+ap
+aY
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+at
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(68,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ah
+az
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+bG
+ak
+ak
+ak
+ak
+ak
+ak
+aD
+ak
+ak
+ak
+ak
+cG
+ak
+ak
+ak
+ak
+aT
+ao
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(69,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ax
+ag
+aE
+ak
+ak
+ak
+aX
+aX
+aX
+aX
+ak
+ba
+ba
+bH
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aZ
+ak
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(70,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+aJ
+aE
+ak
+aX
+bb
+bj
+bt
+ba
+ba
+ba
+bG
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aD
+ak
+ap
+aY
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(71,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ah
+am
+az
+ak
+aS
+aX
+bc
+bd
+aX
+ak
+ba
+ba
+bH
+ak
+ak
+ak
+aA
+ak
+ak
+ak
+aA
+ak
+ak
+aA
+ak
+ak
+aK
+ak
+ak
+ak
+aT
+ao
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(72,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ai
+ax
+ah
+am
+az
+aX
+aX
+aX
+aX
+ak
+ba
+ba
+bG
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+cO
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(73,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ai
+ax
+ag
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+bH
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ct
+cx
+cx
+cx
+cx
+cJ
+ak
+ak
+cU
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(74,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+aA
+ak
+ak
+ak
+ak
+ba
+ba
+bG
+ak
+ak
+ak
+ak
+ak
+MD
+ak
+ak
+cu
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+cO
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(75,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+bH
+ak
+ak
+ak
+ak
+ak
+bv
+ak
+ak
+cu
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+ak
+bo
+aq
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(76,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+ak
+ak
+cu
+ak
+aZ
+bo
+aq
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(77,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+aI
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+ap
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(78,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+at
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+aX
+aX
+aX
+aX
+aX
+ba
+ba
+aX
+aX
+aX
+aX
+aX
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+ak
+ak
+cu
+ak
+aK
+ap
+aY
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(79,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ag
+aX
+bb
+de
+bu
+aX
+ba
+ba
+aX
+bO
+db
+bZ
+aX
+ak
+ak
+ak
+ak
+cu
+cy
+cy
+cy
+cy
+cy
+ak
+ak
+aT
+ao
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(80,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+aw
+ag
+aX
+bd
+bd
+bd
+bB
+ba
+ba
+bI
+bd
+bd
+bd
+aX
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+cV
+aq
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(81,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ae
+aw
+af
+ay
+aX
+be
+bl
+bd
+aX
+ba
+ba
+aX
+bd
+bT
+ca
+aX
+ak
+aZ
+ak
+ak
+cu
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+ap
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(82,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+aw
+af
+aj
+ay
+ak
+aX
+aX
+aX
+aX
+aX
+ba
+ba
+aX
+aX
+aX
+aX
+aX
+ak
+ak
+aD
+ak
+cu
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+ap
+aY
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(83,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+af
+ay
+aA
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+aT
+ao
+aY
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(84,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+aw
+ag
+ak
+aK
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ba
+ba
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+ak
+ak
+cu
+ak
+ak
+ak
+aT
+ao
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(85,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+aw
+af
+ay
+ak
+ak
+ak
+ak
+aX
+aX
+aX
+aX
+aX
+ba
+ba
+aX
+aX
+aX
+aX
+aX
+ak
+ak
+ak
+ak
+cv
+cz
+cz
+cz
+cz
+cz
+ak
+ak
+cO
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(86,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+af
+ay
+ak
+ak
+ak
+ak
+ak
+aX
+bb
+df
+bu
+aX
+ba
+ba
+aX
+bu
+dc
+bZ
+aX
+ak
+ak
+ak
+ak
+aZ
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+cW
+ak
+ap
+ar
+ac
+ac
+ac
+cZ
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(87,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+aw
+ag
+MD
+ak
+ak
+ak
+ak
+ak
+aX
+bd
+bd
+bd
+bC
+ba
+ba
+bJ
+bd
+bd
+bd
+aX
+ak
+ak
+ak
+ak
+aD
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+cO
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(88,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ad
+af
+ay
+ak
+MD
+ak
+ak
+ak
+ak
+aX
+be
+bm
+bd
+aX
+ba
+ba
+aX
+bd
+bU
+ca
+aX
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aZ
+ak
+ak
+ak
+cX
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(89,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aX
+aX
+aX
+aX
+aX
+ba
+ba
+aX
+aX
+aX
+aX
+aX
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+cO
+ak
+iy
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(90,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ad
+ag
+aA
+aB
+ak
+ak
+ak
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+ba
+ba
+ak
+ak
+ak
+cb
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+cY
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(91,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ad
+ag
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+bv
+ak
+ba
+ba
+ak
+bP
+bV
+cc
+ak
+ak
+ak
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aK
+MD
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(92,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ad
+ah
+az
+ak
+ak
+ak
+ak
+aO
+ak
+aX
+aX
+aX
+aX
+aX
+ba
+ba
+aX
+aX
+aX
+aX
+aX
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ap
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(93,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ax
+ag
+MD
+ak
+ak
+ak
+ak
+ak
+aX
+bb
+dd
+bu
+aX
+ba
+ba
+aX
+bu
+bk
+bZ
+aX
+ak
+ak
+ak
+ak
+ak
+ak
+aK
+ak
+ak
+ak
+ak
+ak
+MD
+bo
+aq
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(94,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ad
+ah
+az
+ak
+ak
+ak
+ak
+ak
+aX
+bd
+bd
+bd
+bD
+ba
+ba
+bK
+bd
+bd
+bd
+aX
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+aA
+aD
+bo
+aq
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(95,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ax
+ah
+az
+ak
+ak
+ak
+ak
+aX
+be
+bn
+bd
+aX
+ba
+ba
+aX
+bd
+bW
+ca
+aX
+ak
+ak
+aA
+ak
+ak
+ak
+ak
+cG
+ak
+ak
+ak
+bo
+aq
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(96,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ax
+ah
+az
+aK
+ak
+ak
+aX
+aX
+aX
+aX
+aX
+ba
+ba
+aX
+aX
+aX
+aX
+aX
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+bo
+aq
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(97,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ax
+ag
+aA
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+bE
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+bo
+aq
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(98,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ah
+az
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+bo
+am
+am
+am
+am
+am
+am
+am
+aq
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(99,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ax
+ah
+az
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+bo
+am
+aq
+bw
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(100,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ax
+ah
+az
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+bo
+aq
+bw
+ai
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(101,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ax
+ag
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ak
+ap
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(102,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ad
+ah
+az
+ak
+ak
+ak
+ak
+bo
+am
+am
+az
+bo
+aq
+ar
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(103,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ax
+ah
+az
+bo
+am
+am
+aq
+bw
+ax
+ah
+aq
+bw
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(104,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ax
+ah
+aq
+bw
+ai
+ai
+ac
+ac
+ai
+ai
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(105,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+as
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ai
+ai
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(106,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+at
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(107,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(108,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+at
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(109,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(110,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(111,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(112,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(113,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(114,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(115,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(116,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(117,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+as
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(118,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(119,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(120,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+av
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(121,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+as
+ab
+ab
+ab
+ab
+ab
+ab
+at
+ab
+ab
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+at
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+at
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(122,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(123,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(124,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(125,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(126,1,1) = {"
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(127,1,1) = {"
+aa
+aa
+ac
+ae
+ae
+ae
+ae
+ae
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(128,1,1) = {"
+aa
+aa
+ad
+af
+aj
+aj
+aj
+ao
+ar
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(129,1,1) = {"
+aa
+aa
+ad
+ag
+ak
+ak
+da
+ap
+ar
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(130,1,1) = {"
+aa
+aa
+ad
+ag
+au
+an
+ak
+ap
+ar
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(131,1,1) = {"
+aa
+aa
+ad
+ag
+al
+ak
+MD
+ap
+ar
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(132,1,1) = {"
+aa
+aa
+ad
+ah
+am
+am
+am
+aq
+ar
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(133,1,1) = {"
+aa
+aa
+ac
+ai
+ai
+ai
+ai
+ai
+ac
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(134,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(135,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/_maps/RandomZLevels/beach.dmm b/_maps/RandomZLevels/beach.dmm
deleted file mode 100644
index 7aab25e400..0000000000
--- a/_maps/RandomZLevels/beach.dmm
+++ /dev/null
@@ -1,65960 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"aa" = (
-/turf/open/space,
-/area/space)
-"ab" = (
-/turf/closed/indestructible{
- desc = "Very dense sand, very difficult to pass.";
- icon = 'icons/misc/beach.dmi';
- icon_state = "sand";
- name = "dense sand";
- opacity = 0
- },
-/area/space)
-"ac" = (
-/turf/open/floor/plating/beach/sand,
-/area/space)
-"ad" = (
-/obj/effect/overlay/coconut,
-/turf/open/floor/plating/beach/sand,
-/area/space)
-"ae" = (
-/obj/effect/overlay/palmtree_r,
-/obj/effect/overlay/coconut,
-/turf/open/floor/plating/beach/sand,
-/area/space)
-"af" = (
-/obj/effect/overlay/palmtree_l,
-/obj/effect/overlay/coconut,
-/turf/open/floor/plating/beach/sand,
-/area/space)
-"ag" = (
-/obj/effect/overlay/palmtree_l,
-/turf/open/floor/plating/beach/sand,
-/area/space)
-"ah" = (
-/obj/effect/overlay/palmtree_l,
-/turf/closed/indestructible{
- desc = "Very dense sand, very difficult to pass.";
- icon = 'icons/misc/beach.dmi';
- icon_state = "sand";
- name = "dense sand";
- opacity = 0
- },
-/area/space)
-"ai" = (
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aj" = (
-/turf/closed/wall/mineral/sandstone,
-/area/awaymission/beach)
-"ak" = (
-/obj/effect/overlay/palmtree_l,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"al" = (
-/obj/structure/toilet{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"am" = (
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"an" = (
-/obj/structure/sink{
- pixel_y = 28
- },
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"ao" = (
-/obj/structure/sink{
- pixel_y = 28
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"ap" = (
-/obj/structure/mirror{
- pixel_x = 28
- },
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"aq" = (
-/obj/structure/mirror{
- pixel_x = -28
- },
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"ar" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"as" = (
-/obj/structure/toilet{
- dir = 8
- },
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"at" = (
-/obj/effect/overlay/palmtree_r,
-/obj/effect/overlay/coconut,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"au" = (
-/obj/structure/toilet{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"av" = (
-/obj/machinery/shower{
- icon_state = "shower";
- dir = 1
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"aw" = (
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"ax" = (
-/obj/machinery/shower{
- icon_state = "shower";
- dir = 1
- },
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"ay" = (
-/obj/structure/table,
-/obj/item/storage/box/drinkingglasses,
-/obj/item/storage/box/drinkingglasses,
-/obj/item/reagent_containers/food/drinks/shaker,
-/obj/item/storage/box/beakers,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"az" = (
-/obj/structure/table,
-/obj/machinery/reagentgrinder,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aA" = (
-/obj/machinery/vending/boozeomat{
- set_obj_flags = "EMAGGED"
- },
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aB" = (
-/obj/structure/table,
-/obj/item/reagent_containers/rag,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aC" = (
-/obj/effect/mob_spawn/human/cook{
- head = null;
- id_access = "Bartender";
- id_job = "Bartender";
- suit = /obj/item/clothing/suit/armor/vest;
- uniform = /obj/item/clothing/under/rank/bartender;
- death = 0;
- desc = "Looks secure.";
- flavour_text = "You are a bartender for the beach!";
- icon = 'icons/obj/machines/sleeper.dmi';
- icon_state = "sleeper";
- mob_name = "Jerry Thomas";
- name = "bartenders cryosleeper";
- roundstart = 1
- },
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aD" = (
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aE" = (
-/obj/structure/table,
-/obj/machinery/microwave,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aF" = (
-/obj/structure/closet/crate/bin,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aG" = (
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aH" = (
-/obj/machinery/door/airlock/sandstone,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plasteel/white,
-/area/awaymission/beach)
-"aI" = (
-/obj/structure/table,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aJ" = (
-/obj/machinery/vending/cigarette,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aK" = (
-/obj/structure/table/wood,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aL" = (
-/obj/machinery/processor,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aM" = (
-/obj/machinery/vending/cola,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aN" = (
-/obj/structure/chair/stool,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aO" = (
-/obj/structure/closet/secure_closet/freezer/meat,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aP" = (
-/obj/machinery/vending/snack,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aQ" = (
-/obj/effect/overlay/palmtree_r,
-/turf/open/floor/plating/beach/sand,
-/area/space)
-"aS" = (
-/obj/machinery/door/airlock/sandstone,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aT" = (
-/obj/structure/closet/secure_closet/freezer/kitchen,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aU" = (
-/obj/effect/overlay/palmtree_l,
-/obj/effect/overlay/coconut,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aV" = (
-/obj/machinery/gateway{
- dir = 9
- },
-/obj/effect/turf_decal/sand,
-/obj/effect/turf_decal/stripes/asteroid/line{
- dir = 9
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aW" = (
-/obj/machinery/gateway{
- dir = 1
- },
-/obj/effect/turf_decal/sand,
-/obj/effect/turf_decal/stripes/asteroid/line{
- dir = 1
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aX" = (
-/obj/machinery/gateway{
- dir = 5
- },
-/obj/effect/turf_decal/sand,
-/obj/effect/turf_decal/stripes/asteroid/line{
- dir = 5
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aY" = (
-/obj/structure/sign/barsign,
-/turf/closed/wall/mineral/sandstone,
-/area/awaymission/beach)
-"aZ" = (
-/obj/effect/overlay/palmtree_r,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"ba" = (
-/obj/machinery/gateway{
- dir = 8
- },
-/obj/effect/turf_decal/sand,
-/obj/effect/turf_decal/stripes/asteroid/line{
- dir = 8
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bb" = (
-/obj/machinery/gateway/centeraway,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bc" = (
-/obj/machinery/gateway{
- dir = 4
- },
-/obj/effect/turf_decal/sand,
-/obj/effect/turf_decal/stripes/asteroid/line{
- dir = 4
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bd" = (
-/obj/machinery/gateway{
- dir = 10
- },
-/obj/effect/turf_decal/sand,
-/obj/effect/turf_decal/stripes/asteroid/line{
- dir = 10
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"be" = (
-/obj/machinery/gateway,
-/obj/effect/turf_decal/sand,
-/obj/effect/turf_decal/stripes/asteroid/line,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bf" = (
-/obj/machinery/gateway{
- dir = 6
- },
-/obj/effect/turf_decal/sand,
-/obj/effect/turf_decal/stripes/asteroid/line{
- dir = 6
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bg" = (
-/obj/structure/closet/athletic_mixed,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bh" = (
-/obj/item/clothing/shoes/sandal,
-/obj/item/clothing/shoes/sandal,
-/obj/item/clothing/shoes/sandal,
-/obj/structure/closet/crate,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bi" = (
-/obj/effect/overlay/palmtree_l,
-/obj/effect/overlay/coconut,
-/turf/closed/indestructible{
- desc = "Very dense sand, very difficult to pass.";
- icon = 'icons/misc/beach.dmi';
- icon_state = "sand";
- name = "dense sand";
- opacity = 0
- },
-/area/space)
-"bj" = (
-/obj/item/toy/beach_ball,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bk" = (
-/mob/living/simple_animal/crab,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bl" = (
-/obj/effect/overlay/coconut,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bm" = (
-/mob/living/simple_animal/crab/Coffee,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bn" = (
-/obj/structure/chair,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bo" = (
-/turf/open/floor/plating/beach/coastline_t,
-/area/space)
-"bp" = (
-/turf/open/floor/plating/beach/coastline_t{
- density = 1
- },
-/area/space)
-"bq" = (
-/turf/open/floor/plating/beach/coastline_t,
-/area/awaymission/beach)
-"br" = (
-/turf/open/floor/plating/beach/coastline_b,
-/area/space)
-"bs" = (
-/turf/open/floor/plating/beach/coastline_b{
- density = 1
- },
-/area/space)
-"bt" = (
-/turf/open/floor/plating/beach/coastline_b,
-/area/awaymission/beach)
-"bu" = (
-/turf/closed/indestructible{
- desc = "Very dense water, very difficult to pass.";
- icon = 'icons/misc/beach.dmi';
- icon_state = "water";
- name = "dense water";
- opacity = 0
- },
-/area/space)
-"bv" = (
-/turf/open/floor/plating/beach/water,
-/area/space)
-"bw" = (
-/turf/open/floor/plating/beach/water,
-/area/awaymission/beach)
-"bx" = (
-/turf/open/floor/plating/beach/water{
- density = 1;
- opacity = 1
- },
-/area/awaymission/beach)
-
-(1,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(2,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(3,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(4,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(5,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(6,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(7,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(8,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(9,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(10,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(11,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(12,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(13,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(14,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(15,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(16,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(17,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(18,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(19,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(20,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(21,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(22,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(23,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(24,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(25,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(26,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(27,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(28,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(29,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(30,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(31,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(32,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(33,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(34,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(35,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(36,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(37,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(38,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(39,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(40,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(41,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(42,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(43,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(44,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(45,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(46,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(47,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(48,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(49,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(50,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(51,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(52,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(53,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(54,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(55,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(56,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(57,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(58,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(59,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(60,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(61,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(62,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(63,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(64,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(65,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(66,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(67,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(68,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(69,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(70,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(71,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(72,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(73,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(74,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(75,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(76,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(77,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(78,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(79,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(80,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(81,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(82,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(83,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(84,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(85,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(86,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(87,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-bi
-ab
-ab
-ab
-ab
-ab
-ab
-bo
-br
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(88,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-aQ
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(89,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(90,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ad
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(91,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(92,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ad
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(93,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(94,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ae
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(95,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-aQ
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(96,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-aQ
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(97,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-bp
-bs
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(98,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ak
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ak
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(99,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ak
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(100,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ak
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(101,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-aU
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(102,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(103,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ae
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(104,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(105,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(106,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(107,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(108,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-aV
-ba
-bd
-aG
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(109,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ag
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-aW
-bb
-be
-aG
-aG
-aG
-aZ
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(110,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-aX
-bc
-bf
-aG
-aG
-aG
-ai
-ai
-ai
-bk
-ai
-bj
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(111,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(112,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(113,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ak
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(114,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-bl
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(115,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-af
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-aU
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(116,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ak
-ai
-ai
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(117,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ak
-ai
-ai
-aG
-aG
-aG
-aG
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-bk
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(118,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-aj
-aj
-aj
-aj
-aG
-aG
-aG
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(119,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-aj
-ay
-aD
-aK
-aN
-aG
-aG
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(120,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-aj
-az
-aD
-aK
-aN
-aG
-aG
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-bn
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(121,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-aj
-aA
-aD
-aK
-aN
-aG
-aG
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(122,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-aj
-aB
-aD
-aK
-aN
-aG
-aG
-aG
-aG
-aG
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-bn
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(123,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-aj
-aC
-aD
-aK
-aN
-aG
-aG
-aG
-aG
-aG
-aG
-aG
-aG
-aG
-aG
-aG
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(124,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-aj
-aD
-aD
-aK
-aN
-aG
-aG
-aG
-aG
-aG
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-bn
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(125,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ah
-ac
-ab
-ai
-ai
-ai
-aj
-aD
-aD
-aj
-aj
-aS
-aj
-aG
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(126,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-aj
-aD
-aD
-aD
-aD
-aD
-aY
-aG
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-bn
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(127,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-aj
-aE
-aI
-aL
-aO
-aT
-aj
-aG
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(128,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aG
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-bn
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(129,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-aF
-aJ
-aM
-aP
-aG
-aG
-aG
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ak
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(130,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-aG
-aG
-aG
-aG
-aG
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-bn
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(131,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(132,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(133,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-at
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-bg
-aG
-aG
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(134,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-bh
-aG
-aG
-aG
-ak
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(135,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-aG
-aG
-ai
-ai
-ai
-ai
-bg
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-bm
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(136,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ad
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-aj
-aj
-aj
-aj
-aG
-aG
-ai
-ai
-ai
-ai
-bh
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(137,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-aj
-al
-au
-aj
-aG
-aG
-ai
-ai
-ai
-ai
-bg
-aG
-ai
-ai
-bj
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(138,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-aj
-am
-am
-aj
-aG
-aG
-ai
-ai
-ai
-ai
-bh
-aG
-ai
-ai
-ai
-ai
-ai
-aZ
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(139,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-aj
-an
-av
-aj
-aG
-aG
-ai
-ai
-ai
-ai
-bg
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-bl
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(140,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ag
-ab
-ac
-ab
-ai
-aj
-ao
-aw
-aj
-aG
-aG
-ai
-ai
-ai
-ai
-bh
-aG
-ai
-ak
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(141,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-aj
-ap
-aw
-aH
-aG
-aG
-ai
-ai
-ai
-ai
-bg
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bn
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(142,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-aj
-aj
-aj
-aj
-aG
-aG
-ai
-ai
-ai
-ai
-bh
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(143,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-aj
-aq
-aw
-aH
-aG
-aG
-ai
-ai
-ai
-ai
-bg
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bn
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(144,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-aj
-an
-aw
-aj
-aG
-aG
-ai
-ai
-aZ
-ai
-bh
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(145,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-aj
-an
-ax
-aj
-aG
-aG
-ai
-ai
-ai
-ai
-bg
-aG
-ai
-ai
-ai
-ai
-ai
-ai
-aZ
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(146,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-aj
-ar
-am
-aj
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bx
-bx
-bx
-bx
-bx
-bx
-bx
-bx
-bx
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(147,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-aj
-as
-as
-aj
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(148,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ad
-ab
-ai
-aj
-aj
-aj
-aj
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(149,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-aU
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(150,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ag
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-aZ
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(151,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-bq
-bt
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bw
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(152,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-bi
-ab
-ab
-ab
-ab
-ab
-ab
-bp
-bs
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(153,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-aQ
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(154,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(155,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(156,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ag
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(157,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ad
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(158,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(159,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ag
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(160,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ag
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(161,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-br
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bv
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(162,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-bo
-br
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-bu
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(163,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(164,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(165,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(166,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(167,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(168,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(169,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(170,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(171,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(172,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(173,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(174,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(175,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(176,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(177,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(178,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(179,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(180,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(181,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(182,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(183,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(184,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(185,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(186,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(187,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(188,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(189,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(190,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(191,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(192,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(193,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(194,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(195,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(196,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(197,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(198,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(199,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(200,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(201,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(202,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(203,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(204,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(205,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(206,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(207,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(208,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(209,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(210,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(211,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(212,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(213,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(214,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(215,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(216,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(217,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(218,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(219,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(220,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(221,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(222,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(223,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(224,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(225,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(226,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(227,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(228,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(229,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(230,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(231,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(232,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(233,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(234,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(235,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(236,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(237,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(238,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(239,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(240,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(241,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(242,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(243,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(244,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(245,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(246,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(247,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(248,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(249,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(250,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(251,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(252,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(253,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(254,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(255,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
diff --git a/_maps/RandomZLevels/beach2.dmm b/_maps/RandomZLevels/beach2.dmm
deleted file mode 100644
index 56e93a760c..0000000000
--- a/_maps/RandomZLevels/beach2.dmm
+++ /dev/null
@@ -1,65925 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"aa" = (
-/turf/open/space,
-/area/space)
-"ab" = (
-/turf/closed/indestructible/rock,
-/area/awaymission/beach)
-"ac" = (
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"ad" = (
-/obj/machinery/gateway{
- dir = 9
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"ae" = (
-/obj/machinery/gateway{
- dir = 1
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"af" = (
-/obj/machinery/gateway{
- dir = 5
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"ag" = (
-/obj/machinery/gateway{
- dir = 8
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"ah" = (
-/obj/machinery/gateway/centeraway,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"ai" = (
-/obj/machinery/gateway{
- dir = 4
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aj" = (
-/obj/machinery/gateway{
- density = 0;
- dir = 10
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"ak" = (
-/obj/machinery/gateway,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"al" = (
-/obj/machinery/gateway{
- density = 0;
- dir = 6
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"am" = (
-/obj/effect/overlay/palmtree_l,
-/obj/effect/overlay/coconut,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"an" = (
-/obj/effect/overlay/palmtree_r,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"ao" = (
-/obj/machinery/telecomms/relay/preset/mining,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"ap" = (
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aq" = (
-/turf/closed/wall/mineral/sandstone,
-/area/awaymission/beach)
-"ar" = (
-/obj/effect/overlay/palmtree_l,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"as" = (
-/obj/structure/dresser{
- density = 0;
- pixel_y = 18
- },
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"at" = (
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"au" = (
-/obj/machinery/computer/security/telescreen/entertainment{
- pixel_y = 32
- },
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"av" = (
-/obj/structure/toilet{
- pixel_y = 8
- },
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aw" = (
-/obj/structure/closet/secure_closet/personal/cabinet,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"ax" = (
-/obj/item/bedsheet/rainbow,
-/obj/structure/bed,
-/obj/machinery/button/door{
- id = "loveshack";
- name = "love shack lock";
- normaldoorcontrol = 1;
- pixel_x = 24;
- specialfunctions = 4
- },
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"ay" = (
-/obj/effect/overlay/palmtree_r,
-/obj/effect/overlay/coconut,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"az" = (
-/obj/structure/mineral_door/wood{
- name = "toilet"
- },
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aA" = (
-/obj/item/reagent_containers/food/drinks/bottle/wine,
-/obj/item/reagent_containers/food/drinks/bottle/rum,
-/obj/structure/table/wood,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aB" = (
-/obj/effect/overlay/coconut,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aC" = (
-/obj/structure/signpost,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aD" = (
-/obj/machinery/door/airlock/sandstone{
- id_tag = "loveshack";
- name = "Beach Hut"
- },
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aE" = (
-/obj/structure/mirror{
- pixel_y = 28
- },
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aF" = (
-/obj/machinery/button/door{
- id = "changing1";
- name = "changing room lock";
- normaldoorcontrol = 1;
- pixel_x = 24;
- specialfunctions = 4
- },
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aG" = (
-/obj/machinery/button/door{
- id = "changing2";
- name = "changing room lock";
- normaldoorcontrol = 1;
- pixel_x = 24;
- specialfunctions = 4
- },
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aH" = (
-/obj/machinery/door/airlock/sandstone{
- id_tag = "changing1";
- name = "changing room"
- },
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aI" = (
-/obj/machinery/door/airlock/sandstone{
- id_tag = "changing2";
- name = "changing room"
- },
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aJ" = (
-/obj/structure/bedsheetbin{
- pixel_y = -6
- },
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aK" = (
-/obj/item/clothing/shoes/sandal,
-/obj/item/clothing/shoes/sandal,
-/obj/item/clothing/shoes/sandal,
-/obj/structure/closet/crate,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aL" = (
-/obj/structure/closet/athletic_mixed,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"aM" = (
-/obj/structure/closet/gmcloset,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aN" = (
-/obj/structure/closet/secure_closet/bar,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aO" = (
-/obj/structure/table/wood,
-/obj/item/book/manual/wiki/barman_recipes,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aP" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/drinks/shaker,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aQ" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/drinks/beer,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aR" = (
-/obj/structure/table/wood,
-/obj/item/clothing/glasses/sunglasses,
-/obj/item/reagent_containers/food/drinks/beer,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aS" = (
-/obj/effect/mob_spawn/human/bartender/alive,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aT" = (
-/obj/machinery/vending/boozeomat,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aU" = (
-/obj/machinery/vending/cigarette,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aV" = (
-/obj/machinery/vending/cola,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aW" = (
-/obj/machinery/vending/snack,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aX" = (
-/obj/structure/mineral_door/wood{
- name = "bar"
- },
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aY" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/drinks/ale,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"aZ" = (
-/obj/structure/table/wood,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"ba" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"bb" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime,
-/turf/open/floor/wood,
-/area/awaymission/beach)
-"bc" = (
-/obj/item/toy/beach_ball,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bd" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/drinks/beer,
-/obj/item/reagent_containers/food/drinks/beer,
-/obj/item/reagent_containers/food/drinks/beer,
-/obj/item/reagent_containers/food/drinks/beer,
-/obj/item/reagent_containers/food/drinks/beer,
-/obj/item/reagent_containers/food/drinks/beer,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"be" = (
-/obj/structure/table,
-/obj/item/clothing/under/color/rainbow,
-/obj/item/clothing/glasses/sunglasses,
-/obj/item/clothing/head/collectable/petehat{
- pixel_y = 5
- },
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bf" = (
-/obj/structure/chair/stool,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bg" = (
-/obj/structure/sign/barsign{
- pixel_y = 32
- },
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bh" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/snacks/chips,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bi" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/drinks/soda_cans/cola,
-/obj/item/reagent_containers/food/drinks/soda_cans/cola,
-/obj/item/reagent_containers/food/drinks/soda_cans/cola,
-/obj/item/reagent_containers/food/drinks/soda_cans/cola,
-/obj/item/reagent_containers/food/drinks/soda_cans/cola,
-/obj/item/reagent_containers/food/drinks/soda_cans/cola,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bj" = (
-/mob/living/simple_animal/crab,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bk" = (
-/obj/structure/chair,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bl" = (
-/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bm" = (
-/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bn" = (
-/obj/item/reagent_containers/food/drinks/soda_cans/starkist,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bo" = (
-/obj/item/reagent_containers/food/drinks/soda_cans/cola,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bp" = (
-/obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"bq" = (
-/obj/item/clothing/head/collectable/paper,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-"br" = (
-/turf/open/floor/plating/beach/coastline_t,
-/area/awaymission/beach)
-"bs" = (
-/turf/open/floor/plating/beach/coastline_b,
-/area/awaymission/beach)
-"bt" = (
-/turf/open/floor/plating/beach/water,
-/area/awaymission/beach)
-"bu" = (
-/obj/effect/baseturf_helper/beach/sand,
-/turf/open/floor/plating/beach/sand,
-/area/awaymission/beach)
-
-(1,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(2,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(3,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(4,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(5,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(6,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(7,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(8,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(9,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(10,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(11,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(12,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(13,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(14,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(15,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(16,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(17,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(18,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(19,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(20,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(21,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(22,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(23,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(24,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(25,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(26,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(27,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(28,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(29,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(30,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(31,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(32,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(33,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(34,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(35,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(36,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(37,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(38,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(39,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(40,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(41,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(42,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(43,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(44,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(45,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(46,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(47,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(48,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(49,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(50,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(51,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(52,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(53,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(54,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(55,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(56,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(57,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(58,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(59,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(60,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(61,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(62,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(63,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(64,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(65,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(66,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(67,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(68,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(69,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(70,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(71,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(72,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(73,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(74,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(75,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(76,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(77,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(78,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(79,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(80,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(81,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(82,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(83,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(84,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(85,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(86,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(87,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(88,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(89,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(90,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(91,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(92,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(93,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(94,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(95,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(96,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(97,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(98,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(99,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(100,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(101,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(102,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(103,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(104,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(105,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(106,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(107,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(108,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(109,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(110,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-an
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(111,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(112,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bj
-ac
-bc
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(113,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-aB
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(114,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ar
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(115,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ar
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(116,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-aB
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(117,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-am
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(118,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-an
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(119,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bj
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(120,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(121,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ap
-aJ
-aq
-aq
-aq
-aX
-aq
-ap
-ap
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(122,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-an
-ac
-ac
-ac
-ac
-ac
-ac
-aq
-aq
-aq
-aq
-ap
-ap
-aK
-aq
-aM
-at
-at
-aY
-bf
-ap
-ac
-ac
-bk
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(123,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-aq
-as
-at
-aq
-ap
-ap
-aL
-aq
-aN
-at
-at
-aY
-bf
-ap
-ac
-ac
-bl
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(124,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ar
-aq
-aE
-aF
-aH
-ap
-ap
-aK
-aq
-aO
-at
-at
-aZ
-bf
-ap
-ac
-ac
-bk
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(125,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ao
-ac
-ac
-ac
-ac
-ac
-aB
-aq
-aq
-aq
-aq
-ap
-ap
-aL
-aq
-aP
-at
-at
-aZ
-bf
-ap
-ac
-ac
-bm
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(126,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ad
-ag
-aj
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ap
-aK
-aq
-aQ
-at
-at
-aZ
-bf
-ap
-ac
-ac
-bk
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(127,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ae
-ah
-ak
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-aL
-aq
-aR
-at
-at
-ba
-bf
-ap
-ac
-ac
-bn
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(128,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-af
-ai
-al
-ac
-ac
-ac
-ac
-aC
-ap
-ac
-ac
-ac
-ac
-ac
-ap
-ap
-aK
-aq
-aS
-at
-at
-bb
-bf
-ap
-ac
-ac
-bk
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(129,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-aq
-aq
-aq
-aq
-ap
-ap
-aL
-aq
-aT
-at
-at
-aZ
-bf
-ap
-ac
-ac
-bo
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(130,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-aq
-as
-at
-aq
-ap
-ap
-aK
-aq
-aU
-at
-at
-aZ
-bf
-ap
-ac
-ac
-bk
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(131,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-aq
-aE
-aG
-aI
-ap
-ap
-aL
-aq
-aV
-at
-at
-aZ
-bf
-ap
-ac
-ar
-bm
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(132,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-aq
-aq
-aq
-aq
-ap
-ap
-aK
-aq
-aW
-at
-at
-aq
-bg
-ap
-ac
-ac
-bk
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(133,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ap
-ap
-aL
-aq
-aq
-aq
-aq
-aq
-ap
-ap
-ac
-ac
-bp
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(134,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-am
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(135,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-an
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(136,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ar
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(137,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bj
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(138,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(139,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bc
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(140,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-an
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(141,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-an
-ac
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-aB
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(142,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-ac
-ac
-ac
-ar
-ac
-ac
-ac
-ac
-ac
-ac
-ar
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(143,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-aq
-aq
-aq
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bk
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(144,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-aq
-av
-az
-ap
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bo
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(145,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-aq
-aq
-aq
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bk
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(146,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ay
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bp
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(147,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-an
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(148,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(149,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-aq
-aq
-aq
-aq
-aq
-ap
-ac
-ac
-ar
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-an
-ac
-ac
-ac
-ac
-ac
-bj
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(150,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-aq
-as
-aw
-aA
-aq
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-aB
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(151,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-aq
-at
-at
-at
-aD
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-aB
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(152,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-aq
-au
-ax
-at
-aq
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(153,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-aq
-aq
-aq
-aq
-aq
-ap
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-an
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(154,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-aB
-ac
-bd
-bh
-ac
-ac
-ac
-bq
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(155,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-be
-bi
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(156,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bk
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(157,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bl
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(158,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ar
-ac
-ac
-ac
-ac
-ac
-ac
-ar
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bk
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(159,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-an
-ac
-ac
-ac
-bo
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(160,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bk
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(161,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bc
-ac
-ac
-ac
-bn
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(162,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ay
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ar
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-bj
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(163,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(164,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(165,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-an
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ar
-aB
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(166,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(167,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ay
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(168,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-bu
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-br
-bs
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-bt
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(169,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(170,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(171,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(172,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(173,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(174,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(175,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(176,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(177,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(178,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(179,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(180,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(181,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(182,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(183,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(184,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(185,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(186,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(187,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(188,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(189,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(190,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(191,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(192,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(193,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(194,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(195,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(196,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(197,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(198,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(199,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(200,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(201,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(202,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(203,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(204,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(205,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(206,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(207,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(208,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(209,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(210,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(211,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(212,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(213,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(214,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(215,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(216,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(217,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(218,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(219,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(220,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(221,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(222,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(223,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(224,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(225,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(226,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(227,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(228,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(229,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(230,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(231,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(232,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(233,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(234,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(235,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(236,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(237,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(238,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(239,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(240,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(241,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(242,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(243,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(244,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(245,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(246,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(247,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(248,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(249,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(250,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(251,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(252,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(253,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(254,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(255,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index cf1b2c6835..43bdbf1a18 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -3,44 +3,17 @@
/turf/open/space/basic,
/area/space)
"aab" = (
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
-/obj/structure/table,
-/obj/machinery/chem_dispenser/drinks/beer{
- dir = 8
- },
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
+/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/turf/open/floor/plating,
+/area/space/nearstation)
"aac" = (
-/obj/machinery/requests_console{
- department = "Bar";
- departmentType = 2;
- pixel_x = 30;
- receive_ore_updates = 1
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
},
-/obj/machinery/camera{
- c_tag = "Bar";
- dir = 8
- },
-/obj/structure/table,
-/obj/machinery/chem_dispenser/drinks{
- dir = 8
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/turf/open/floor/plating,
+/area/space/nearstation)
"aad" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -113,40 +86,30 @@
"aan" = (
/obj/machinery/hydroponics/soil,
/obj/item/seeds/ambrosia,
-/obj/effect/turf_decal/tile/green{
- dir = 1
+/obj/machinery/newscaster{
+ pixel_y = 32
},
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/turf/open/floor/plasteel,
+/turf/open/floor/grass,
/area/security/prison)
"aao" = (
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/turf/open/floor/plating,
+/obj/machinery/hydroponics/soil,
+/obj/item/seeds/carrot,
+/turf/open/floor/grass,
/area/security/prison)
"aap" = (
/obj/machinery/hydroponics/soil,
-/obj/item/seeds/carrot,
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
-"aaq" = (
+/obj/item/plant_analyzer,
/obj/structure/sign/warning/electricshock{
pixel_y = 32
},
+/turf/open/floor/grass,
+/area/security/prison)
+"aaq" = (
/obj/machinery/hydroponics/soil,
-/obj/item/plant_analyzer,
+/obj/item/seeds/glowshroom,
+/turf/open/floor/grass,
+/area/security/prison)
+"aar" = (
/obj/machinery/camera{
c_tag = "Prison Common Room";
network = list("ss13","prison")
@@ -158,24 +121,20 @@
/obj/effect/turf_decal/tile/green{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/security/prison)
-"aar" = (
-/obj/machinery/hydroponics/soil,
-/obj/item/seeds/glowshroom,
/obj/effect/turf_decal/tile/green{
- dir = 1
+ dir = 8
},
-/obj/effect/turf_decal/tile/green{
- dir = 4
+/obj/structure/sink{
+ pixel_y = 20
},
/turf/open/floor/plasteel,
/area/security/prison)
"aas" = (
-/obj/structure/sink{
- pixel_y = 20
+/obj/structure/sign/warning/electricshock{
+ pixel_y = 32
},
-/turf/open/floor/plating,
+/obj/machinery/seed_extractor,
+/turf/open/floor/plasteel,
/area/security/prison)
"aat" = (
/turf/open/floor/plasteel,
@@ -194,78 +153,64 @@
/obj/machinery/light{
dir = 8
},
-/turf/open/floor/plating,
+/turf/open/floor/grass,
/area/security/prison)
"aax" = (
-/mob/living/simple_animal/mouse/brown/Tom,
-/turf/open/floor/plating,
+/turf/open/floor/grass,
/area/security/prison)
"aay" = (
/turf/open/floor/plating,
/area/security/prison)
"aaz" = (
/obj/item/reagent_containers/glass/bucket,
-/turf/open/floor/plating,
+/turf/open/floor/grass,
/area/security/prison)
"aaA" = (
-/obj/machinery/seed_extractor,
+/obj/machinery/vr_sleeper{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/security/prison)
"aaB" = (
-/obj/structure/window/reinforced,
-/obj/machinery/hydroponics/soil,
-/obj/item/seeds/potato,
+/mob/living/simple_animal/mouse/brown/Tom,
+/turf/open/floor/grass,
+/area/security/prison)
+"aaC" = (
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
/obj/effect/turf_decal/tile/green{
dir = 1
},
/obj/effect/turf_decal/tile/green,
/obj/effect/turf_decal/tile/green{
- dir = 8
+ dir = 4
},
/turf/open/floor/plasteel,
/area/security/prison)
-"aaC" = (
-/obj/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/security/prison)
"aaD" = (
/obj/structure/window/reinforced,
/obj/machinery/hydroponics/soil,
-/obj/item/seeds/grass,
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/turf/open/floor/plasteel,
+/obj/item/seeds/potato,
+/turf/open/floor/grass,
/area/security/prison)
"aaE" = (
/obj/structure/window/reinforced,
/obj/machinery/hydroponics/soil,
-/obj/item/cultivator,
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/turf/open/floor/plasteel,
+/obj/item/seeds/grass,
+/turf/open/floor/grass,
/area/security/prison)
"aaF" = (
-/obj/structure/window/reinforced,
/obj/machinery/hydroponics/soil,
-/obj/item/cultivator,
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/turf/open/floor/plasteel,
+/obj/structure/window/reinforced,
+/obj/item/seeds/tower,
+/turf/open/floor/grass,
/area/security/prison)
"aaG" = (
/obj/machinery/light{
dir = 4
},
-/obj/machinery/cryopod{
+/obj/machinery/vr_sleeper{
dir = 8
},
/turf/open/floor/plasteel,
@@ -282,77 +227,54 @@
/turf/open/floor/plasteel,
/area/security/prison)
"aaK" = (
-/obj/machinery/washing_machine,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/security/prison)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aaL" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/security/prison)
-"aaM" = (
/obj/machinery/computer/libraryconsole/bookmanagement,
/obj/structure/table,
-/obj/machinery/newscaster{
- pixel_x = -32
- },
/turf/open/floor/plasteel,
/area/security/prison)
+"aaM" = (
+/obj/structure/falsewall,
+/turf/open/floor/plating,
+/area/security/prison)
"aaN" = (
-/obj/structure/table,
-/obj/item/pen,
-/turf/open/floor/plasteel,
+/obj/structure/window/reinforced,
+/obj/machinery/hydroponics/soil,
+/obj/item/cultivator,
+/turf/open/floor/grass,
/area/security/prison)
"aaO" = (
-/obj/structure/table,
-/obj/item/storage/pill_bottle/dice,
+/obj/effect/turf_decal/tile/green,
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/security/prison)
"aaP" = (
-/obj/structure/table,
-/obj/structure/bedsheetbin,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
},
+/turf/closed/wall,
+/area/security/execution/transfer)
+"aaQ" = (
/obj/machinery/computer/cryopod{
dir = 8;
pixel_x = 26
},
-/turf/open/floor/plasteel/cafeteria,
-/area/security/prison)
-"aaQ" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
+/obj/machinery/cryopod{
dir = 8
},
-/turf/open/floor/plasteel/cafeteria,
+/turf/open/floor/plasteel,
/area/security/prison)
"aaR" = (
/obj/structure/lattice,
@@ -372,50 +294,30 @@
/turf/open/space,
/area/space/nearstation)
"aaU" = (
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
+/obj/machinery/computer/arcade/minesweeper{
dir = 4
},
/turf/open/floor/plasteel,
/area/security/prison)
"aaV" = (
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = -3;
- pixel_y = 7
- },
-/obj/item/pen,
+/obj/structure/chair/sofa/right,
/turf/open/floor/plasteel,
/area/security/prison)
"aaW" = (
-/obj/structure/table,
-/obj/item/toy/cards/deck,
+/obj/structure/chair/sofa/left,
/turf/open/floor/plasteel,
/area/security/prison)
"aaX" = (
-/obj/machinery/washing_machine,
/obj/structure/window/reinforced,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
+/obj/machinery/cryopod{
dir = 8
},
-/turf/open/floor/plasteel/cafeteria,
+/turf/open/floor/plasteel,
/area/security/prison)
"aaY" = (
-/obj/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/security/prison)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall,
+/area/security/execution/transfer)
"aaZ" = (
/turf/closed/wall/r_wall,
/area/ai_monitored/security/armory)
@@ -450,11 +352,11 @@
/turf/open/floor/plasteel,
/area/security/prison)
"abg" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
+/obj/machinery/computer/arcade{
+ dir = 4
},
-/turf/closed/wall/r_wall,
-/area/security/execution/transfer)
+/turf/open/floor/plasteel,
+/area/security/prison)
"abh" = (
/obj/machinery/holopad,
/turf/open/floor/plasteel,
@@ -473,6 +375,7 @@
/obj/structure/window/reinforced{
dir = 8
},
+/obj/machinery/washing_machine,
/turf/open/floor/plasteel/freezer,
/area/security/prison)
"abk" = (
@@ -560,8 +463,7 @@
/area/security/execution/transfer)
"abu" = (
/obj/machinery/door/poddoor{
- id = "executionspaceblast";
- name = "blast door"
+ id = "executionspaceblast"
},
/turf/open/floor/plating,
/area/security/execution/transfer)
@@ -588,8 +490,9 @@
/turf/open/floor/plasteel/dark,
/area/security/execution/transfer)
"abx" = (
-/obj/machinery/vending/cola/random,
-/turf/open/floor/plasteel,
+/obj/structure/bedsheetbin/color,
+/obj/structure/table,
+/turf/open/floor/plasteel/freezer,
/area/security/prison)
"aby" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -652,7 +555,6 @@
"abG" = (
/obj/machinery/door/window/westleft{
base_state = "right";
- dir = 8;
icon_state = "right";
name = "Unisex Showers"
},
@@ -748,8 +650,7 @@
pixel_y = -3
},
/obj/machinery/camera/motion{
- c_tag = "Armory Motion Sensor";
- dir = 2
+ c_tag = "Armory Motion Sensor"
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -918,7 +819,6 @@
/area/security/execution/transfer)
"acb" = (
/obj/machinery/sparker{
- dir = 2;
id = "executionburn";
pixel_x = 25
},
@@ -1006,8 +906,8 @@
/area/ai_monitored/security/armory)
"acm" = (
/obj/machinery/power/apc/highcap/five_k{
- dir = 4;
areastring = "/area/ai_monitored/security/armory";
+ dir = 4;
name = "Armory APC";
pixel_x = 24
},
@@ -1095,18 +995,14 @@
/turf/open/floor/plasteel/dark,
/area/security/execution/transfer)
"acA" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/on{
- dir = 2
- },
+/obj/machinery/atmospherics/components/unary/outlet_injector/on,
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/turf/open/floor/plasteel/dark,
/area/security/execution/transfer)
"acB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/dark,
/area/security/execution/transfer)
"acC" = (
@@ -1117,7 +1013,6 @@
},
/obj/item/radio/intercom{
desc = "Talk through this. It looks like it has been modified to not broadcast.";
- dir = 2;
name = "Prison Intercom (General)";
pixel_y = 24;
prison_radio = 1
@@ -1147,7 +1042,6 @@
},
/obj/item/radio/intercom{
desc = "Talk through this. It looks like it has been modified to not broadcast.";
- dir = 2;
name = "Prison Intercom (General)";
pixel_y = 24;
prison_radio = 1
@@ -1169,7 +1063,6 @@
},
/obj/item/radio/intercom{
desc = "Talk through this. It looks like it has been modified to not broadcast.";
- dir = 2;
name = "Prison Intercom (General)";
pixel_y = 24;
prison_radio = 1
@@ -1208,13 +1101,15 @@
/turf/open/floor/plasteel,
/area/security/prison)
"acK" = (
-/obj/structure/sink{
- dir = 8;
- pixel_x = -12;
- pixel_y = 2
+/obj/structure/mirror{
+ pixel_x = 25
},
/obj/machinery/light/small{
- dir = 4
+ dir = 8
+ },
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
},
/turf/open/floor/plasteel/freezer,
/area/security/prison)
@@ -1236,25 +1131,23 @@
pixel_y = -3
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/effect/turf_decal/bot{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
-/turf/open/floor/plasteel{
- dir = 2
- },
+/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"acN" = (
-/obj/structure/chair/stool/bar,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp/green{
+ on = 0;
+ pixel_x = -7;
+ pixel_y = 12
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"acO" = (
/obj/structure/closet/l3closet/security,
/obj/machinery/camera{
@@ -1275,15 +1168,16 @@
/area/crew_quarters/heads/hos)
"acR" = (
/obj/structure/table/wood,
+/obj/item/paper_bin{
+ pixel_x = -3;
+ pixel_y = 7
+ },
/obj/item/flashlight/lamp/green{
on = 0;
pixel_x = -3;
pixel_y = 8
},
-/obj/item/paper_bin{
- pixel_x = -3;
- pixel_y = 7
- },
+/obj/item/pen/fountain,
/turf/open/floor/carpet,
/area/crew_quarters/heads/hos)
"acS" = (
@@ -1435,9 +1329,7 @@
pixel_x = 3;
pixel_y = -3
},
-/obj/effect/turf_decal/bot{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
@@ -1445,9 +1337,7 @@
/obj/structure/window/reinforced{
dir = 4
},
-/turf/open/floor/plasteel{
- dir = 2
- },
+/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"adk" = (
/obj/structure/rack,
@@ -1460,9 +1350,7 @@
pixel_x = 3;
pixel_y = -3
},
-/obj/effect/turf_decal/bot{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
@@ -1470,9 +1358,7 @@
/obj/structure/window/reinforced{
dir = 8
},
-/turf/open/floor/plasteel{
- dir = 2
- },
+/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"adl" = (
/obj/machinery/door/poddoor/shutters{
@@ -1511,15 +1397,12 @@
/turf/open/floor/carpet,
/area/crew_quarters/heads/hos)
"adq" = (
-/obj/structure/table/wood,
-/obj/item/instrument/guitar{
- pixel_x = -7
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/item/instrument/eguitar{
- pixel_x = 5
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"adr" = (
/obj/structure/sign/warning/vacuum/external{
pixel_x = -32
@@ -1697,9 +1580,7 @@
/area/security/prison)
"adK" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"adL" = (
@@ -1728,8 +1609,8 @@
/area/crew_quarters/heads/hos)
"adN" = (
/obj/machinery/power/apc{
- dir = 8;
areastring = "/area/crew_quarters/heads/hos";
+ dir = 8;
name = "Head of Security's Office APC";
pixel_x = -24
},
@@ -1740,8 +1621,11 @@
/turf/open/floor/carpet,
/area/crew_quarters/heads/hos)
"adO" = (
-/obj/structure/chair/stool,
/obj/effect/landmark/event_spawn,
+/obj/structure/chair/comfy/brown{
+ color = "#596479";
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/security/prison)
"adP" = (
@@ -1752,9 +1636,7 @@
/turf/open/floor/carpet,
/area/crew_quarters/heads/hos)
"adQ" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"adR" = (
@@ -2037,13 +1919,12 @@
/area/security/prison)
"aer" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/machinery/power/apc{
+ areastring = "/area/security/prison";
dir = 4;
name = "Prison Wing APC";
- areastring = "/area/security/prison";
pixel_x = 24
},
/obj/structure/cable{
@@ -2062,7 +1943,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/suit_storage_unit/security,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 8
@@ -2079,7 +1959,6 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/machinery/suit_storage_unit/security,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 8
@@ -2142,7 +2021,8 @@
"aeB" = (
/obj/structure/table,
/obj/item/stack/packageWrap,
-/obj/item/pen,
+/obj/item/stack/packageWrap,
+/obj/item/hand_labeler,
/turf/open/floor/plasteel,
/area/security/main)
"aeC" = (
@@ -2441,8 +2321,6 @@
/area/security/main)
"afd" = (
/obj/item/radio/intercom{
- freerange = 0;
- frequency = 1459;
name = "Station Intercom (General)";
pixel_x = 29
},
@@ -2550,7 +2428,7 @@
/turf/open/floor/plasteel,
/area/security/main)
"afn" = (
-/obj/structure/table,
+/obj/machinery/suit_storage_unit/security,
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"afo" = (
@@ -2921,9 +2799,8 @@
/obj/structure/closet/secure_closet/injection,
/obj/structure/cable,
/obj/machinery/power/apc{
- dir = 2;
- name = "Prisoner Transfer Centre";
areastring = "/area/security/execution/transfer";
+ name = "Prisoner Transfer Centre";
pixel_y = -27
},
/turf/open/floor/plasteel/dark,
@@ -3031,9 +2908,7 @@
icon_state = "2-4"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"agr" = (
@@ -3051,12 +2926,11 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"agu" = (
-/obj/structure/table,
-/obj/machinery/recharger,
/obj/machinery/airalarm{
dir = 8;
pixel_x = 24
},
+/obj/machinery/suit_storage_unit/security,
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"agv" = (
@@ -3082,6 +2956,7 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/machinery/syndicatebomb/training,
/turf/open/floor/plasteel,
/area/security/main)
"agx" = (
@@ -3156,8 +3031,13 @@
/area/security/brig)
"agE" = (
/obj/structure/table,
-/obj/item/folder/red,
-/obj/item/pen,
+/obj/item/storage/fancy/donut_box{
+ pixel_y = 10
+ },
+/obj/item/storage/fancy/donut_box,
+/obj/item/storage/fancy/donut_box{
+ pixel_y = -10
+ },
/turf/open/floor/plasteel,
/area/security/main)
"agF" = (
@@ -3331,8 +3211,11 @@
/turf/open/floor/plating,
/area/security/warden)
"agX" = (
-/obj/structure/table,
-/obj/machinery/recharger,
+/obj/structure/closet/secure_closet/warden,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/item/book/manual/wiki/security_space_law,
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"agY" = (
@@ -3399,14 +3282,21 @@
/turf/open/floor/plasteel,
/area/security/main)
"ahh" = (
+/obj/item/paper_bin/bundlenatural{
+ pixel_x = 6;
+ pixel_y = 4
+ },
+/obj/item/paper_bin{
+ pixel_x = -6;
+ pixel_y = 4
+ },
+/obj/item/pen/fountain,
+/obj/item/folder/red,
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/item/pen,
/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = -3;
- pixel_y = 7
- },
/turf/open/floor/plasteel,
/area/security/main)
"ahi" = (
@@ -3514,8 +3404,6 @@
/area/security/brig)
"ahs" = (
/obj/item/radio/intercom{
- freerange = 0;
- frequency = 1459;
name = "Station Intercom (General)";
pixel_y = 24
},
@@ -3560,9 +3448,9 @@
/area/security/brig)
"ahv" = (
/obj/machinery/power/apc{
+ areastring = "/area/security/warden";
dir = 8;
name = "Brig Control APC";
- areastring = "/area/security/warden";
pixel_x = -24
},
/obj/structure/cable{
@@ -3646,9 +3534,7 @@
/area/security/main)
"ahD" = (
/obj/machinery/door/window/westleft{
- base_state = "left";
dir = 4;
- icon_state = "left";
name = "Brig Infirmary"
},
/obj/effect/turf_decal/tile/red,
@@ -3781,9 +3667,9 @@
/area/security/main)
"ahN" = (
/obj/machinery/power/apc{
+ areastring = "/area/security/main";
dir = 4;
name = "Security Office APC";
- areastring = "/area/security/main";
pixel_x = 24
},
/obj/structure/cable{
@@ -3806,9 +3692,17 @@
/turf/open/floor/plasteel/white,
/area/security/brig)
"ahQ" = (
-/obj/structure/closet/secure_closet/warden,
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/machinery/recharger{
+ pixel_x = -6;
+ pixel_y = 3
+ },
+/obj/machinery/recharger{
+ pixel_x = 6;
+ pixel_y = 3
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
@@ -3963,16 +3857,11 @@
/turf/open/floor/plasteel/white,
/area/security/brig)
"aie" = (
-/obj/structure/table,
-/obj/item/folder/red,
-/obj/item/pen,
-/obj/item/hand_labeler,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/item/book/manual/wiki/security_space_law,
-/turf/open/floor/plasteel/showroomfloor,
-/area/security/warden)
+/obj/structure/closet/wardrobe/mixed,
+/obj/item/clothing/shoes/jackboots,
+/obj/item/coin/silver,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"aif" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -4472,7 +4361,6 @@
"aje" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/effect/turf_decal/tile/red{
@@ -4532,8 +4420,6 @@
/area/security/courtroom)
"ajj" = (
/obj/item/radio/intercom{
- broadcasting = 0;
- listening = 1;
name = "Station Intercom (General)";
pixel_y = 20
},
@@ -4587,10 +4473,10 @@
/turf/open/floor/plasteel/dark,
/area/security/courtroom)
"ajq" = (
+/obj/structure/lattice/catwalk,
/obj/structure/cable{
icon_state = "0-2"
},
-/obj/structure/lattice/catwalk,
/turf/open/space,
/area/solar/port/fore)
"ajr" = (
@@ -4640,7 +4526,6 @@
/area/security/brig)
"ajx" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -4657,9 +4542,9 @@
/area/security/brig)
"ajy" = (
/obj/machinery/power/apc{
+ areastring = "/area/security/brig";
dir = 1;
name = "Brig APC";
- areastring = "/area/security/brig";
pixel_y = 24
},
/obj/structure/cable{
@@ -4737,9 +4622,7 @@
/area/security/courtroom)
"ajF" = (
/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/security/brig)
"ajG" = (
@@ -4821,9 +4704,7 @@
"ajO" = (
/obj/structure/table/wood,
/obj/item/radio/intercom{
- broadcasting = 0;
dir = 8;
- listening = 1;
name = "Station Intercom (Court)"
},
/obj/effect/turf_decal/tile/neutral{
@@ -5024,9 +4905,7 @@
dir = 1
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/security/brig)
"akh" = (
@@ -5074,9 +4953,7 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/security/brig)
"akl" = (
@@ -5579,10 +5456,10 @@
/turf/open/floor/plasteel,
/area/security/brig)
"alg" = (
+/obj/structure/lattice/catwalk,
/obj/structure/cable{
icon_state = "0-2"
},
-/obj/structure/lattice/catwalk,
/turf/open/space,
/area/solar/starboard/fore)
"alh" = (
@@ -5700,7 +5577,6 @@
},
/obj/item/radio/intercom{
desc = "Talk through this. It looks like it has been modified to not broadcast.";
- dir = 2;
name = "Prison Intercom (General)";
pixel_x = -25;
pixel_y = -2;
@@ -5735,7 +5611,6 @@
},
/obj/item/radio/intercom{
desc = "Talk through this. It looks like it has been modified to not broadcast.";
- dir = 2;
name = "Prison Intercom (General)";
pixel_x = -25;
pixel_y = -2;
@@ -5812,9 +5687,7 @@
/turf/open/floor/plasteel,
/area/security/brig)
"alF" = (
-/obj/machinery/atmospherics/components/unary/tank/air{
- dir = 2
- },
+/obj/machinery/atmospherics/components/unary/tank/air,
/turf/open/floor/plating,
/area/maintenance/port/fore)
"alG" = (
@@ -5859,22 +5732,25 @@
/turf/open/floor/plasteel,
/area/security/courtroom)
"alK" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/button/door{
+ id = "Room Two";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 7;
+ pixel_y = -24;
+ specialfunctions = 4
},
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/structure/chair/comfy/brown{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"alL" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/power/apc{
+ areastring = "/area/security/courtroom";
dir = 8;
name = "Courtroom APC";
- areastring = "/area/security/courtroom";
pixel_x = -24
},
/obj/structure/cable{
@@ -5902,14 +5778,8 @@
/turf/open/floor/plasteel,
/area/security/prison)
"alN" = (
-/obj/machinery/camera{
- c_tag = "Dormitory Toilets";
- dir = 1
- },
-/obj/structure/table,
-/obj/structure/bedsheetbin/towel,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/turf/open/space/basic,
+/area/space/nearstation)
"alO" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -5920,8 +5790,7 @@
"alQ" = (
/obj/machinery/power/solar_control{
id = "auxsolareast";
- name = "Port Bow Solar Control";
- track = 0
+ name = "Port Bow Solar Control"
},
/obj/structure/cable{
icon_state = "0-4"
@@ -5998,7 +5867,7 @@
pixel_y = -2
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -6023,17 +5892,23 @@
/turf/open/floor/plasteel,
/area/security/processing)
"amd" = (
-/obj/effect/turf_decal/tile/red{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/button/door{
+ desc = "Bolts the doors to the Private Study.";
+ id = "PrivateStudy";
+ name = "Private Study Lock";
+ pixel_x = -5;
+ pixel_y = 24;
+ req_access_txt = "28"
},
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
- dir = 4
+/obj/machinery/button/door{
+ id = "PrivateStudy1";
+ name = "Privacy Shutters";
+ pixel_x = 5;
+ pixel_y = 24
},
-/turf/open/floor/plasteel/white/corner{
- dir = 1
- },
-/area/hallway/secondary/exit)
+/turf/open/floor/wood,
+/area/library)
"ame" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -6045,7 +5920,6 @@
/area/security/processing)
"amf" = (
/obj/structure/bed,
-/obj/item/bedsheet,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -6053,6 +5927,7 @@
id = "Cell 1";
pixel_x = -28
},
+/obj/item/bedsheet/orange,
/turf/open/floor/plasteel,
/area/security/brig)
"amg" = (
@@ -6064,11 +5939,11 @@
/area/security/brig)
"amh" = (
/obj/structure/bed,
-/obj/item/bedsheet,
/obj/machinery/flasher{
id = "Cell 2";
pixel_x = -28
},
+/obj/item/bedsheet/orange,
/turf/open/floor/plasteel,
/area/security/brig)
"ami" = (
@@ -6080,11 +5955,11 @@
/area/security/brig)
"amj" = (
/obj/structure/bed,
-/obj/item/bedsheet,
/obj/machinery/flasher{
id = "Cell 3";
pixel_x = -28
},
+/obj/item/bedsheet/orange,
/turf/open/floor/plasteel,
/area/security/brig)
"amk" = (
@@ -6167,7 +6042,6 @@
/obj/item/bedsheet,
/obj/item/radio/intercom{
desc = "Talk through this. It looks like it has been modified to not broadcast.";
- dir = 2;
name = "Prison Intercom (General)";
pixel_x = 25;
pixel_y = -2;
@@ -6213,11 +6087,8 @@
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"amx" = (
-/obj/structure/chair{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/turf/closed/wall,
+/area/crew_quarters/abandoned_gambling_den)
"amy" = (
/obj/structure/chair/stool{
pixel_y = 8
@@ -6241,16 +6112,18 @@
/turf/open/floor/plating,
/area/maintenance/solars/port/fore)
"amB" = (
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
- dir = 1
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"amC" = (
/turf/open/floor/plating,
/area/maintenance/port/fore)
@@ -6297,6 +6170,29 @@
/obj/item/trash/plate,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"amI" = (
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 4;
+ name = "Air In"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
+"amJ" = (
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = 25
+ },
+/obj/structure/toilet{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
"amK" = (
/obj/structure/sign/warning/docking,
/turf/closed/wall,
@@ -6317,6 +6213,19 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/security/processing)
+"amN" = (
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"amO" = (
+/obj/machinery/shower{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
+"amP" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall,
+/area/crew_quarters/dorms)
"amQ" = (
/obj/structure/cable{
icon_state = "0-4"
@@ -6462,18 +6371,21 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"anc" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/shower{
+ dir = 4
},
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
+/obj/item/soap,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
"and" = (
/obj/machinery/light/small{
dir = 4
},
/obj/structure/rack,
-/obj/effect/spawner/lootdrop/maintenance,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 2;
+ name = "2maintenance loot spawner"
+ },
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"ane" = (
@@ -6490,9 +6402,9 @@
icon_state = "0-4"
},
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/solars/port/fore";
dir = 8;
name = "Port Bow Solar APC";
- areastring = "/area/maintenance/solars/port/fore";
pixel_x = -25;
pixel_y = 3
},
@@ -6563,6 +6475,13 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"anq" = (
+/obj/structure/sign/poster/official/twelve_gauge,
+/turf/closed/wall/r_wall,
+/area/ai_monitored/security/armory)
+"anr" = (
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
"ans" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -6676,15 +6595,11 @@
/turf/open/floor/plating,
/area/security/courtroom)
"anD" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
},
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"anE" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
@@ -6730,6 +6645,16 @@
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"anM" = (
+/obj/structure/window/reinforced/tinted{
+ dir = 8
+ },
+/obj/structure/window/reinforced/tinted{
+ dir = 4
+ },
+/obj/structure/curtain,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
"anN" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
@@ -6876,8 +6801,7 @@
"aoh" = (
/obj/machinery/power/solar_control{
id = "auxsolareast";
- name = "Starboard Bow Solar Control";
- track = 0
+ name = "Starboard Bow Solar Control"
},
/obj/structure/cable{
icon_state = "0-4"
@@ -6929,6 +6853,9 @@
/obj/item/circuitboard/machine/monkey_recycler,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"aop" = (
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"aoq" = (
/obj/structure/sign/warning/vacuum/external{
pixel_y = -32
@@ -7023,9 +6950,7 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoz" = (
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoA" = (
@@ -7034,9 +6959,7 @@
pixel_y = -29
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoB" = (
@@ -7044,16 +6967,12 @@
dir = 1;
pixel_y = -24
},
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoC" = (
/obj/machinery/vending/coffee,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoD" = (
@@ -7065,23 +6984,17 @@
pixel_x = 5;
pixel_y = -32
},
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoE" = (
/obj/machinery/vending/cigarette,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoF" = (
/obj/machinery/vending/snack/random,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoG" = (
@@ -7101,27 +7014,9 @@
/turf/open/floor/plasteel/dark,
/area/security/courtroom)
"aoI" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/machinery/power/apc{
- dir = 2;
- name = "Fitness Room APC";
- areastring = "/area/crew_quarters/fitness";
- pixel_y = -24
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
+/obj/structure/fireplace,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"aoJ" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
@@ -7216,6 +7111,26 @@
/obj/structure/closet/emcloset,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"aoY" = (
+/obj/structure/sign/warning/fire{
+ desc = "A sign that states the labeled room's number.";
+ dir = 10;
+ icon_state = "roomnum";
+ name = "Room Number 6";
+ pixel_y = 24
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/machinery/washing_machine{
+ pixel_x = 7;
+ pixel_y = 7
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aoZ" = (
/obj/machinery/atmospherics/components/binary/valve/digital{
name = "Waste Release"
@@ -7331,9 +7246,9 @@
icon_state = "0-2"
},
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/fore/secondary";
dir = 1;
name = "Fore Maintenance APC";
- areastring = "/area/maintenance/fore/secondary";
pixel_y = 24
},
/obj/structure/disposalpipe/segment{
@@ -7364,38 +7279,23 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"apu" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/closet/secure_closet/personal/cabinet{
+ desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here.";
+ name = "Personal ID-Locked Closet";
+ pixel_y = 15
},
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
- },
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"apv" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Fitness Maintenance";
- req_access_txt = "12"
- },
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
+"apw" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
-"apw" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 4;
- name = "Air In"
- },
-/obj/effect/landmark/blobstart,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"apx" = (
@@ -7432,9 +7332,9 @@
icon_state = "0-4"
},
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/solars/starboard/fore";
dir = 8;
name = "Starboard Bow Solar APC";
- areastring = "/area/maintenance/solars/starboard/fore";
pixel_x = -25;
pixel_y = 3
},
@@ -7455,8 +7355,9 @@
/turf/closed/wall/r_wall,
/area/maintenance/starboard/fore)
"apD" = (
-/obj/structure/closet/wardrobe/mixed,
-/obj/item/clothing/shoes/jackboots,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/machinery/computer/slot_machine,
+/obj/item/coin/iron,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"apE" = (
@@ -7472,6 +7373,15 @@
/obj/machinery/portable_atmospherics/canister/water_vapor,
/turf/open/floor/plasteel,
/area/janitor)
+"apH" = (
+/obj/machinery/door/airlock{
+ desc = "A small bathroom with a sink, toilet and shower.";
+ id_tag = "Bath1";
+ name = "Bathroom"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"apI" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{
dir = 1
@@ -7482,6 +7392,12 @@
"apJ" = (
/turf/closed/wall,
/area/construction/mining/aux_base)
+"apK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
"apL" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/maintenance{
@@ -7510,6 +7426,14 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"apQ" = (
+/obj/machinery/door/airlock{
+ desc = "A small bathroom with a sink, toilet and shower.";
+ id_tag = "Bath2";
+ name = "Bathroom"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"apR" = (
/obj/item/paper/fluff/jobs/security/beepsky_mom,
/turf/open/floor/plating,
@@ -7520,6 +7444,18 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
+"apT" = (
+/obj/structure/lattice/catwalk,
+/obj/item/stack/marker_beacon{
+ anchored = 1;
+ icon_state = "markerburgundy-on";
+ light_power = 3;
+ light_range = 3;
+ name = "Docking Beacon";
+ picked_color = "Burgundy"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
"apU" = (
/turf/open/floor/plating,
/area/security/vacantoffice/b)
@@ -7536,13 +7472,21 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"apX" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/closed/wall,
-/area/crew_quarters/fitness)
-"apY" = (
-/obj/structure/closet/secure_closet/personal,
+/obj/structure/bed,
+/obj/item/bedsheet/random,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
+"apY" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "maintdiy";
+ name = "Security Shutters"
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"apZ" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
@@ -7550,12 +7494,9 @@
/turf/open/floor/wood,
/area/lawoffice)
"aqa" = (
-/obj/structure/table,
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
+/obj/machinery/recharge_station,
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"aqb" = (
/obj/structure/rack,
/obj/item/storage/briefcase,
@@ -7636,9 +7577,8 @@
/area/maintenance/fore/secondary)
"aqk" = (
/obj/machinery/power/apc{
- dir = 2;
- name = "Dormitory APC";
areastring = "/area/crew_quarters/dorms";
+ name = "Dormitory APC";
pixel_y = -24
},
/obj/structure/cable{
@@ -7650,32 +7590,22 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"aql" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
+/obj/structure/mirror{
+ pixel_y = 32
},
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = 25
},
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
-"aqm" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/machinery/light/small{
dir = 4
},
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
+"aqm" = (
+/obj/structure/chair/sofa/right,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"aqn" = (
/obj/structure/bed,
/obj/machinery/airalarm{
@@ -7695,11 +7625,25 @@
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"aqo" = (
-/obj/structure/chair/stool{
- pixel_y = 8
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/open/floor/wood,
-/area/crew_quarters/dorms)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/power/apc{
+ areastring = "/area/crew_quarters/fitness";
+ name = "Fitness Room APC";
+ pixel_y = -24
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"aqp" = (
/obj/structure/rack,
/obj/item/clothing/suit/fire/firefighter,
@@ -7724,24 +7668,45 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"aqr" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
+"aqs" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
},
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
+ },
/turf/open/floor/plating,
/area/crew_quarters/fitness)
-"aqs" = (
+"aqt" = (
+/obj/machinery/door/airlock{
+ desc = "A small bathroom with a sink, toilet and shower.";
+ id_tag = "Bath3";
+ name = "Bathroom"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
+"aqu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/crew_quarters/fitness)
-"aqu" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
},
-/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/crew_quarters/fitness)
"aqv" = (
@@ -7785,26 +7750,47 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aqB" = (
-/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/structure/table/glass,
+/obj/item/paper_bin{
+ pixel_x = -3;
+ pixel_y = 7
+ },
+/obj/item/pen,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aqC" = (
-/obj/machinery/computer/slot_machine{
- balance = 15;
- money = 500
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/structure/chair/comfy/brown{
+ dir = 4
},
-/obj/item/coin/iron,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/turf/open/floor/wood,
+/area/crew_quarters/dorms)
"aqD" = (
-/obj/effect/decal/cleanable/cobweb,
-/obj/item/coin/gold,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/crew_quarters/dorms)
"aqE" = (
-/obj/effect/landmark/xeno_spawn,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/item/flashlight/lamp/green{
+ pixel_x = -3;
+ pixel_y = 22
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4;
+ pixel_y = 5
+ },
+/obj/structure/dresser{
+ desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too.";
+ name = "Dresser";
+ pixel_y = 7
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"aqF" = (
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"aqG" = (
/obj/docking_port/stationary/random{
dir = 4;
@@ -7813,6 +7799,28 @@
},
/turf/open/space,
/area/space/nearstation)
+"aqH" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
+"aqI" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"aqJ" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/machinery/door/airlock/external{
@@ -7838,19 +7846,25 @@
/obj/machinery/meter,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"aqN" = (
+/obj/structure/toilet{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
"aqO" = (
/obj/structure/closet,
/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 2;
- name = "2maintenance loot spawner"
+ lootcount = 3;
+ name = "3maintenance loot spawner"
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
"aqP" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/port/fore";
dir = 1;
name = "Port Bow Maintenance APC";
- areastring = "/area/maintenance/port/fore";
pixel_x = -1;
pixel_y = 26
},
@@ -7879,9 +7893,9 @@
/area/security/processing)
"aqT" = (
/obj/machinery/power/apc{
+ areastring = "/area/security/processing";
dir = 8;
name = "Labor Shuttle Dock APC";
- areastring = "/area/security/processing";
pixel_x = -24
},
/obj/structure/cable,
@@ -7890,6 +7904,14 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
+"aqU" = (
+/obj/structure/closet/secure_closet/personal{
+ desc = "Swipe your ID on this locker to claim it. You can drag it around and use it as your own personal storage area. Very useful.";
+ name = "Personal ID-Locked Locker";
+ pixel_y = 10
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"aqV" = (
/obj/structure/table/wood,
/obj/item/paper_bin{
@@ -7958,6 +7980,13 @@
"arf" = (
/turf/closed/wall,
/area/crew_quarters/dorms)
+"arg" = (
+/obj/machinery/hydroponics/constructable,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"arh" = (
/obj/machinery/door/airlock/maintenance{
name = "Dormitories Maintenance";
@@ -7967,60 +7996,49 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"ari" = (
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/obj/structure/closet/secure_closet/personal/cabinet,
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/turf/open/floor/wood,
-/area/crew_quarters/dorms)
-"arj" = (
-/turf/closed/wall,
-/area/crew_quarters/fitness)
-"ark" = (
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/obj/structure/closet/secure_closet/personal/cabinet,
-/turf/open/floor/wood,
-/area/crew_quarters/dorms)
-"arl" = (
-/obj/structure/disposalpipe/junction/flip{
- dir = 2
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/light/small{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"arj" = (
+/obj/machinery/door/airlock{
+ id_tag = "Room Two";
+ name = "Room Seven - Luxury Suite"
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"arm" = (
+/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
+"ark" = (
+/obj/structure/bed,
+/obj/item/bedsheet/random,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"arl" = (
+/obj/structure/sign/poster/official/ion_rifle,
+/turf/closed/wall/r_wall,
+/area/ai_monitored/security/armory)
+"arm" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
+ },
/turf/open/floor/plating,
/area/crew_quarters/fitness)
"arn" = (
-/obj/structure/closet/athletic_mixed,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"aro" = (
/turf/open/floor/engine{
name = "Holodeck Projector Floor"
@@ -8043,35 +8061,31 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"arr" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/airlock/maintenance{
+ name = "Dormitories Maintenance";
+ req_access_txt = "12"
},
/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/area/maintenance/fore/secondary)
"ars" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "Starboard Bow Maintenance APC";
- areastring = "/area/maintenance/starboard/fore";
- pixel_y = 24
+/obj/item/flashlight/lamp/green{
+ pixel_x = -3;
+ pixel_y = 22
},
-/obj/structure/cable{
- icon_state = "0-4"
+/obj/structure/dresser{
+ desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too.";
+ name = "Dresser";
+ pixel_y = 7
},
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/turf/open/floor/wood,
+/area/crew_quarters/dorms)
"art" = (
-/obj/machinery/light/small{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
},
-/obj/machinery/camera{
- c_tag = "Fore Starboard Solar Access"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"aru" = (
/obj/structure/chair/stool,
/turf/open/floor/plating,
@@ -8096,11 +8110,11 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"ary" = (
-/obj/structure/closet,
-/obj/item/coin/iron,
-/obj/effect/spawner/lootdrop/maintenance,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/dorms)
"arz" = (
/obj/item/coin/gold,
/obj/item/coin/iron,
@@ -8109,11 +8123,26 @@
"arA" = (
/obj/structure/closet,
/obj/effect/spawner/lootdrop/maintenance,
+/obj/item/coin/plasma,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"arB" = (
/turf/closed/wall/r_wall,
/area/hallway/secondary/entry)
+"arC" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"arD" = (
+/obj/item/radio/intercom{
+ dir = 4;
+ name = "Station Intercom (General)";
+ pixel_x = 27
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"arE" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/turf_decal/tile/yellow{
@@ -8201,14 +8230,27 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"arO" = (
-/obj/machinery/monkey_recycler,
-/obj/item/reagent_containers/food/snacks/monkeycube,
-/obj/item/reagent_containers/food/snacks/monkeycube,
-/turf/open/floor/plating,
-/area/maintenance/port/fore)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/chair/sofa,
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"arP" = (
/turf/closed/wall,
/area/maintenance/fore)
+"arQ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"arR" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/structure/table/wood,
@@ -8232,7 +8274,7 @@
},
/obj/structure/filingcabinet/employment,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/wood,
@@ -8281,14 +8323,15 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"asb" = (
-/obj/structure/disposalpipe/trunk{
- dir = 8
+/obj/structure/sign/warning/fire{
+ desc = "A sign that states the labeled room's number.";
+ dir = 5;
+ icon_state = "roomnum";
+ name = "Room Number 7";
+ pixel_y = 24
},
-/obj/machinery/disposal/bin,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
+/obj/structure/chair/sofa/right,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel,
@@ -8332,20 +8375,11 @@
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"asg" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+/obj/structure/chair{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/area/crew_quarters/fitness)
"ash" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -8378,23 +8412,29 @@
/turf/open/floor/plating,
/area/security/vacantoffice/b)
"ask" = (
-/obj/structure/dresser,
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "#d8b1b1"
+ },
/turf/open/floor/wood,
/area/crew_quarters/dorms)
"asl" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plating,
/area/security/vacantoffice/b)
"asm" = (
-/obj/machinery/light/small{
- dir = 1
+/obj/structure/closet/secure_closet/bar{
+ req_access_txt = "25"
},
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/item/clothing/under/waiter,
+/obj/item/clothing/under/waiter,
+/obj/item/clothing/under/waiter,
+/obj/item/gun/ballistic/revolver/doublebarrel,
/turf/open/floor/wood,
-/area/crew_quarters/dorms)
+/area/crew_quarters/bar)
"asn" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plating,
@@ -8411,69 +8451,41 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"asp" = (
-/obj/structure/table/wood,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/vending/wardrobe/bar_wardrobe,
/turf/open/floor/wood,
-/area/crew_quarters/dorms)
+/area/crew_quarters/bar)
"asq" = (
-/obj/machinery/camera{
- c_tag = "Fitness Room"
+/obj/machinery/light,
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
},
-/obj/structure/closet/masks,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"asr" = (
-/obj/structure/closet/boxinggloves,
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/item/clothing/shoes/jackboots,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/obj/structure/table/wood/fancy,
+/obj/item/reagent_containers/food/drinks/soda_cans/starkist{
+ pixel_x = -3;
+ pixel_y = 5
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"ass" = (
-/obj/structure/closet/lasertag/red,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "External Access";
+ req_access_txt = "13"
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"ast" = (
-/obj/structure/closet/lasertag/blue,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/machinery/airalarm{
+ pixel_y = 23
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/obj/structure/chair/sofa/left,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"asu" = (
/obj/structure/bed,
/obj/machinery/button/door{
@@ -8493,6 +8505,9 @@
lootcount = 3;
name = "3maintenance loot spawner"
},
+/obj/structure/light_construct{
+ dir = 8
+ },
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"asw" = (
@@ -8528,6 +8543,10 @@
"asC" = (
/turf/open/floor/plasteel/airless,
/area/space/nearstation)
+"asD" = (
+/obj/machinery/light,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"asE" = (
/turf/closed/wall,
/area/hallway/secondary/entry)
@@ -8535,6 +8554,13 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/construction/mining/aux_base)
+"asG" = (
+/obj/machinery/camera{
+ c_tag = "Bar South";
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"asH" = (
/obj/structure/closet/toolcloset,
/obj/effect/turf_decal/tile/yellow{
@@ -8579,40 +8605,30 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"asL" = (
-/obj/structure/bed,
-/obj/machinery/button/door{
- id = "Dorm6";
- name = "Cabin Bolt Control";
- normaldoorcontrol = 1;
- pixel_y = -25;
- specialfunctions = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/obj/effect/spawner/lootdrop/bedsheet,
-/turf/open/floor/wood,
-/area/crew_quarters/dorms)
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/space/nearstation)
"asM" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
+/obj/structure/cable{
+ icon_state = "1-2"
},
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "2-4"
},
-/obj/effect/turf_decal/tile/neutral{
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"asN" = (
+/obj/machinery/light/small{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/machinery/camera{
+ c_tag = "Fore Starboard Solar Access"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"asN" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"asO" = (
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
@@ -8640,48 +8656,64 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"asU" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 8;
+ name = "8maintenance loot spawner"
+ },
/turf/open/floor/plasteel,
/area/security/vacantoffice/b)
"asV" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
+/obj/machinery/power/apc{
+ areastring = "/area/maintenance/starboard/fore";
+ dir = 1;
+ name = "Starboard Bow Maintenance APC";
+ pixel_y = 24
},
/obj/structure/cable{
- icon_state = "2-8"
+ icon_state = "0-8"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"asW" = (
-/obj/machinery/light/small{
- dir = 8
+/obj/structure/table/wood,
+/obj/item/storage/box/evidence,
+/obj/item/hand_labeler{
+ pixel_x = 5
},
-/obj/structure/rack,
-/obj/item/storage/briefcase,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/item/taperecorder,
/turf/open/floor/plasteel/grimy,
/area/security/detectives_office)
"asX" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/area/crew_quarters/dorms)
"asY" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
},
/turf/open/floor/plating,
/area/crew_quarters/fitness)
"asZ" = (
+/obj/structure/chair/sofa/left,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/vr_sleeper,
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 4
+ dir = 10
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
@@ -8722,23 +8754,23 @@
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"atf" = (
-/obj/structure/chair/stool{
- pixel_y = 8
+/obj/machinery/camera{
+ c_tag = "Bar Storage"
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
+/obj/structure/sink/kitchen{
+ pixel_y = 28
},
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"atg" = (
/obj/machinery/door/airlock{
id_tag = "Dorm4";
- name = "Dorm 4"
+ name = "Room Three"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/dark,
/area/crew_quarters/dorms)
"ath" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -8769,6 +8801,17 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
+"atk" = (
+/obj/machinery/light/small,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"atl" = (
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -23
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"atm" = (
/turf/open/floor/wood,
/area/crew_quarters/dorms)
@@ -8813,7 +8856,13 @@
/turf/open/floor/plating,
/area/security/vacantoffice/b)
"att" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/table/wood/fancy,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/item/reagent_containers/food/drinks/britcup{
+ desc = "Kingston's personal cup.";
+ pixel_x = 5;
+ pixel_y = 5
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"atu" = (
@@ -8857,8 +8906,22 @@
icon_state = "panelscorched"
},
/area/maintenance/starboard/fore)
+"atz" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/obj/structure/closet/wardrobe/black,
+/obj/item/clothing/under/skirt/black,
+/obj/item/clothing/head/beret/black,
+/obj/item/clothing/head/beret/black,
+/obj/item/clothing/under/trendy_fit,
+/obj/item/clothing/under/trendy_fit,
+/obj/item/clothing/under/sundress,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"atA" = (
/obj/structure/table,
+/obj/item/paicard,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"atB" = (
@@ -8954,13 +9017,19 @@
/turf/closed/wall,
/area/maintenance/port/fore)
"atQ" = (
-/obj/machinery/door/airlock{
- id_tag = "Dorm5";
- name = "Cabin 1"
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/wood,
-/area/crew_quarters/dorms)
+/obj/structure/closet/wardrobe/white,
+/obj/item/clothing/under/waiter,
+/obj/item/clothing/under/waiter,
+/obj/item/clothing/under/waiter,
+/obj/structure/sign/poster/contraband/lizard{
+ pixel_x = -32
+ },
+/obj/item/clothing/suit/straight_jacket,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"atR" = (
/obj/effect/landmark/carpspawn,
/obj/structure/lattice,
@@ -8970,10 +9039,15 @@
/turf/closed/wall,
/area/space/nearstation)
"atT" = (
-/obj/structure/closet,
-/obj/effect/spawner/lootdrop/maintenance,
-/turf/open/floor/plating,
-/area/maintenance/port/fore)
+/obj/structure/table/wood/poker,
+/obj/item/toy/cards/deck{
+ pixel_y = 5
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"atU" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance{
@@ -8983,44 +9057,48 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"atV" = (
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -23
- },
-/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
+ dir = 4;
+ pixel_y = 5
},
-/obj/effect/turf_decal/tile/neutral{
+/obj/structure/chair/sofa{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"atW" = (
/obj/structure/chair/stool,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"atX" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
"atY" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall,
/area/security/vacantoffice/b)
"atZ" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/public/glass{
- name = "Holodeck Door"
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"aua" = (
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 4
+/obj/structure/bed,
+/obj/machinery/button/door{
+ id = "Dorm6";
+ name = "Cabin Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = -25;
+ specialfunctions = 4
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/obj/effect/spawner/lootdrop/bedsheet,
+/turf/open/floor/wood,
+/area/crew_quarters/dorms)
"aub" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/yellow,
@@ -9040,6 +9118,12 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
+"aud" = (
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"aue" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
@@ -9143,60 +9227,60 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"aup" = (
-/obj/machinery/door/airlock{
- id_tag = "Dorm6";
- name = "Cabin 2"
+/obj/structure/table/wood/fancy,
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -3;
+ pixel_y = 9
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/wood,
-/area/crew_quarters/dorms)
+/obj/item/reagent_containers/food/condiment/peppermill{
+ dir = 1;
+ pixel_x = 3;
+ pixel_y = 9
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"auq" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/security/vacantoffice/b)
"aur" = (
-/obj/machinery/door/window/eastright{
- base_state = "left";
- dir = 8;
- icon_state = "left";
- name = "Fitness Ring"
- },
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
+/obj/structure/table/wood/fancy/black,
+/obj/machinery/light/small,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"aus" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/area/crew_quarters/dorms)
"aut" = (
-/obj/structure/window/reinforced{
- dir = 1
+/obj/machinery/door/airlock{
+ id_tag = "Room One";
+ name = "Room Six - Luxury Suite"
},
+/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
+/area/crew_quarters/dorms)
"auu" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
+/obj/structure/closet/secure_closet/personal/cabinet{
+ desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here.";
+ name = "Personal ID-Locked Closet";
+ pixel_y = 15
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/turf/open/floor/wood,
+/area/crew_quarters/dorms)
"auv" = (
-/obj/structure/window/reinforced{
- dir = 4
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/structure/closet/secure_closet/personal/cabinet{
+ desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here.";
+ name = "Personal ID-Locked Closet";
+ pixel_y = 15
},
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
+/turf/open/floor/wood,
+/area/crew_quarters/dorms)
"auw" = (
/obj/structure/bed,
/obj/machinery/airalarm{
@@ -9216,54 +9300,79 @@
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"aux" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/obj/machinery/meter,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"auy" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"auy" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/public/glass{
- name = "Holodeck Door"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"auz" = (
-/obj/machinery/camera{
- c_tag = "Holodeck"
- },
-/obj/machinery/airalarm{
- pixel_y = 24
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"auA" = (
-/obj/machinery/light/small{
+/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"auz" = (
+/obj/machinery/light/small,
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"auA" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/sign/warning/fire{
+ desc = "A sign that states the labeled room's number.";
+ dir = 4;
+ icon_state = "roomnum";
+ name = "Room Number 3";
+ pixel_x = -30;
+ pixel_y = -7
+ },
+/obj/effect/landmark/start/assistant,
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/area/crew_quarters/dorms)
"auB" = (
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
+ },
/turf/open/floor/plating,
/area/crew_quarters/fitness)
"auC" = (
-/obj/machinery/light/small,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"auD" = (
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
@@ -9325,6 +9434,21 @@
},
/turf/open/floor/plasteel,
/area/maintenance/department/electrical)
+"auN" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"auO" = (
/obj/structure/closet/emcloset,
/turf/open/floor/plating,
@@ -9336,37 +9460,20 @@
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
"auR" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/turf/closed/wall,
+/area/crew_quarters/fitness)
"auS" = (
-/obj/machinery/requests_console{
- department = "Crew Quarters";
- pixel_y = 30
- },
/obj/machinery/camera{
- c_tag = "Dormitory North"
+ c_tag = "Holodeck"
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/machinery/airalarm{
+ pixel_y = 24
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
},
/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/area/crew_quarters/fitness)
"auT" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -9374,36 +9481,20 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"auU" = (
-/obj/machinery/firealarm{
- dir = 2;
- pixel_y = 24
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/machinery/atmospherics/components/binary/valve,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"auV" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall,
/area/maintenance/port/fore)
"auW" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"auX" = (
@@ -9472,13 +9563,7 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"avg" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"avh" = (
@@ -9487,18 +9572,18 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/power/apc{
+ areastring = "/area/security/vacantoffice/b";
dir = 8;
name = "Vacant Office B APC";
- areastring = "/area/security/vacantoffice/b";
pixel_x = -24
},
/turf/open/floor/plating,
/area/maintenance/fore)
"avi" = (
/obj/machinery/power/apc{
+ areastring = "/area/lawoffice";
dir = 1;
name = "Law Office APC";
- areastring = "/area/lawoffice";
pixel_y = 24
},
/obj/structure/cable{
@@ -9509,7 +9594,7 @@
/area/maintenance/fore)
"avj" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/cable{
@@ -9530,43 +9615,17 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"avl" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = -5;
- pixel_y = 30
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"avm" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"avn" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
+/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"avo" = (
@@ -9594,8 +9653,7 @@
pixel_y = 24
},
/obj/machinery/camera{
- c_tag = "Detective's Office";
- dir = 2
+ c_tag = "Detective's Office"
},
/turf/open/floor/plasteel/grimy,
/area/security/detectives_office)
@@ -9613,68 +9671,63 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"avt" = (
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"avu" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/tile/neutral{
+/obj/structure/chair/sofa/left{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"avv" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/obj/effect/landmark/start/assistant,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"avw" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
+"avv" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/meter,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"avw" = (
+/obj/machinery/button/door{
+ id = "Room One";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = -25;
+ specialfunctions = 4
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"avx" = (
-/obj/effect/spawner/structure/window,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"avy" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
+ },
/turf/open/floor/plating,
/area/crew_quarters/fitness)
-"avy" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
"avz" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/computer/holodeck{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"avA" = (
-/obj/structure/window/reinforced{
- dir = 4
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
},
-/turf/open/floor/plasteel/dark,
+/obj/structure/chair/sofa/right{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"avB" = (
/obj/effect/spawner/structure/window/reinforced,
@@ -9684,17 +9737,20 @@
/turf/open/floor/plating,
/area/ai_monitored/security/armory)
"avC" = (
-/obj/structure/chair{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"avD" = (
-/obj/machinery/computer/holodeck{
- dir = 4
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"avE" = (
/obj/machinery/door/poddoor/preopen{
id = "maint3"
@@ -9743,9 +9799,9 @@
/area/maintenance/department/electrical)
"avL" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/department/electrical";
dir = 1;
name = "Electrical Maintenance APC";
- areastring = "/area/maintenance/department/electrical";
pixel_y = 24
},
/obj/structure/cable{
@@ -9774,8 +9830,6 @@
},
/obj/item/multitool,
/obj/item/radio/intercom{
- freerange = 0;
- frequency = 1459;
name = "Station Intercom (General)";
pixel_x = 29
},
@@ -9807,11 +9861,17 @@
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
"avR" = (
-/obj/structure/table/wood,
-/obj/item/storage/firstaid/regular,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/structure/table/wood/poker,
+/obj/item/clothing/mask/cigarette/cigar{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ pixel_y = 5
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"avS" = (
/obj/item/wrench,
/turf/open/floor/plating,
@@ -9889,9 +9949,9 @@
/area/maintenance/fore)
"awd" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/fore";
dir = 1;
name = "Fore Maintenance APC";
- areastring = "/area/maintenance/fore";
pixel_y = 24
},
/obj/structure/cable{
@@ -10024,60 +10084,73 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"awo" = (
-/obj/machinery/door/airlock{
- id_tag = "Dorm3";
- name = "Dorm 3"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/structure/chair/comfy/black{
dir = 4
},
-/turf/open/floor/plasteel,
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_y = -29
+ },
+/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"awp" = (
-/obj/structure/table/wood,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/item/storage/pill_bottle/dice,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"awq" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/area/crew_quarters/fitness)
"awr" = (
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"aws" = (
-/obj/structure/table/wood,
-/obj/item/coin/silver,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/public/glass{
+ name = "Holodeck Door"
+ },
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/fitness)
+"awt" = (
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"awt" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
+ dir = 4
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"awu" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/closet/wardrobe/mixed,
+/obj/item/clothing/under/kilt,
+/obj/item/clothing/under/kilt,
+/obj/item/clothing/under/skirt/purple,
+/obj/item/clothing/head/beret,
+/obj/item/clothing/head/beret,
+/obj/item/clothing/head/beret,
/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/area/crew_quarters/fitness)
"awv" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/obj/structure/sign/warning/fire{
+ desc = "A sign that states the labeled room's number.";
+ dir = 8;
+ icon_state = "roomnum";
+ name = "Room Number 4";
+ pixel_y = 24
+ },
+/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"aww" = (
@@ -10094,48 +10167,62 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"awy" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"awz" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
- name = "Fitness"
+ name = "Holodeck Door"
},
-/turf/open/floor/plasteel,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness)
"awA" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/door/airlock{
+ id_tag = "Dorm5";
+ name = "Room Four"
},
-/obj/machinery/holopad,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
"awB" = (
-/obj/effect/landmark/start/assistant,
-/obj/machinery/vr_sleeper,
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"awC" = (
-/obj/structure/table,
-/obj/item/paper/fluff/holodeck/disclaimer,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"awD" = (
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"awE" = (
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/obj/structure/closet/crate,
-/obj/effect/spawner/lootdrop/maintenance,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -3;
+ pixel_y = 20
+ },
+/obj/item/reagent_containers/food/condiment/peppermill{
+ dir = 1;
+ pixel_x = 3;
+ pixel_y = 20
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/item/reagent_containers/food/drinks/britcup,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"awF" = (
/obj/structure/closet/crate,
/obj/effect/spawner/lootdrop/maintenance{
@@ -10176,26 +10263,34 @@
/area/maintenance/starboard/fore)
"awK" = (
/obj/structure/table/glass,
-/obj/item/pen,
+/obj/item/coin/silver,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"awL" = (
-/obj/structure/table/glass,
-/obj/item/paper_bin{
- pixel_x = -3;
- pixel_y = 7
+/obj/structure/table,
+/obj/item/instrument/guitar{
+ pixel_x = -7
},
+/obj/item/instrument/eguitar{
+ pixel_x = 5
+ },
+/obj/item/instrument/violin,
+/obj/item/instrument/trombone,
+/obj/item/instrument/saxophone,
+/obj/item/instrument/piano_synth,
+/obj/item/instrument/recorder,
+/obj/item/instrument/accordion,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"awM" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
+/obj/machinery/button/door{
+ id = "maintdiy";
+ name = "Shutters Control Button";
+ pixel_x = -6;
+ pixel_y = 24
},
/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/area/crew_quarters/abandoned_gambling_den)
"awN" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -10291,6 +10386,14 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/hallway/secondary/entry)
+"awX" = (
+/obj/machinery/door/airlock{
+ id_tag = "Dorm6";
+ name = "Room Five"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
"awY" = (
/obj/machinery/light{
dir = 1
@@ -10354,6 +10457,15 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
+"axd" = (
+/obj/structure/closet,
+/obj/effect/decal/cleanable/cobweb,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 4;
+ name = "4maintenance loot spawner"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"axe" = (
/obj/machinery/sleeper{
dir = 4
@@ -10555,12 +10667,11 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"axC" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/effect/turf_decal/tile/red{
dir = 4
},
-/obj/effect/turf_decal/tile/blue{
- dir = 8
+/obj/structure/sign/poster/official/enlist{
+ pixel_y = 32
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
@@ -10571,12 +10682,16 @@
/turf/closed/wall,
/area/maintenance/fore/secondary)
"axE" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 8;
+ name = "8maintenance loot spawner"
},
-/obj/effect/turf_decal/tile/blue,
-/turf/open/floor/plasteel,
-/area/hallway/primary/fore)
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"axF" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
@@ -10614,6 +10729,12 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
+"axJ" = (
+/obj/structure/piano{
+ icon_state = "piano"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"axK" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
@@ -10621,128 +10742,189 @@
/turf/closed/wall,
/area/maintenance/port/fore)
"axL" = (
-/obj/machinery/holopad,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/closet/wardrobe/grey,
+/obj/item/clothing/under/assistantformal,
+/obj/item/clothing/under/assistantformal,
+/obj/machinery/camera{
+ c_tag = "Dorms East - Holodeck";
+ dir = 4
+ },
/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/area/crew_quarters/fitness)
"axM" = (
-/obj/structure/table/wood,
-/obj/item/paicard,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"axN" = (
-/obj/structure/table/wood,
-/obj/item/storage/crayons,
-/turf/open/floor/plasteel,
+/obj/structure/chair/comfy/black{
+ dir = 8
+ },
+/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"axO" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/plasteel,
+/obj/machinery/light/small,
+/turf/open/floor/mineral/titanium/blue,
/area/crew_quarters/dorms)
"axP" = (
-/obj/structure/table/wood,
-/obj/item/toy/cards/deck{
- pixel_x = 2
+/obj/structure/cable{
+ icon_state = "4-8"
},
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/table/wood,
+/obj/item/paicard,
/obj/item/clothing/mask/balaclava{
pixel_x = -8;
pixel_y = 8
},
+/obj/item/toy/cards/deck{
+ pixel_x = 2
+ },
+/obj/item/storage/crayons,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"axQ" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"axR" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/public/glass{
- name = "Fitness"
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"axS" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
+/obj/machinery/light{
dir = 8
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
-"axT" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"axU" = (
-/obj/structure/window/reinforced,
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
-"axV" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/structure/sign/warning/fire{
+ desc = "A sign that states the labeled room's number.";
+ dir = 1;
+ icon_state = "roomnum";
+ name = "Room Number 2";
+ pixel_x = -30;
+ pixel_y = -7
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
-"axW" = (
-/obj/machinery/door/window/eastright{
- base_state = "left";
- icon_state = "left";
- name = "Fitness Ring"
+"axR" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/obj/structure/window/reinforced,
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
-"axX" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
-"axY" = (
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
+"axS" = (
+/obj/item/flashlight/lamp/green{
+ pixel_x = -3;
+ pixel_y = 22
+ },
+/obj/structure/dresser{
+ desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too.";
+ name = "Dresser";
+ pixel_y = 7
+ },
+/turf/open/floor/plating,
+/area/maintenance/port)
+"axT" = (
+/obj/machinery/door/airlock{
+ id_tag = "Dorm3";
+ name = "Room Two"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
+"axU" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/obj/structure/sign/warning/fire{
+ desc = "A sign that states the labeled room's number.";
+ dir = 6;
+ icon_state = "roomnum";
+ name = "Room Number 5";
+ pixel_y = 24
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"axZ" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/public/glass{
- name = "Holodeck Door"
+/area/crew_quarters/dorms)
+"axV" = (
+/obj/structure/chair/comfy/brown{
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"axW" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
},
/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"axX" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/light/small,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"axY" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/structure/closet/toolcloset,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"axZ" = (
+/obj/machinery/light/small{
+ dir = 1;
+ light_color = "#ffc1c1"
+ },
+/obj/machinery/airalarm{
+ pixel_y = 24
+ },
+/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"aya" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
},
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/area/crew_quarters/dorms)
"ayb" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/structure/chair{
+ dir = 8
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
@@ -10818,9 +11000,7 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"ayn" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"ayo" = (
@@ -10994,14 +11174,6 @@
/turf/closed/wall/r_wall,
/area/ai_monitored/storage/eva)
"ayM" = (
-/obj/machinery/firealarm{
- dir = 2;
- pixel_y = 24
- },
-/obj/item/clothing/head/welding,
-/turf/open/floor/plasteel,
-/area/ai_monitored/storage/eva)
-"ayN" = (
/obj/structure/rack,
/obj/machinery/light{
dir = 1
@@ -11011,8 +11183,15 @@
/obj/item/flashlight,
/obj/item/flashlight,
/obj/item/flashlight,
+/obj/item/clothing/glasses/welding,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/storage/eva)
+"ayN" = (
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/turf/open/floor/plasteel,
+/area/ai_monitored/storage/eva)
"ayO" = (
/obj/structure/table,
/obj/item/storage/toolbox/electrical{
@@ -11026,9 +11205,9 @@
/area/ai_monitored/storage/eva)
"ayP" = (
/obj/machinery/power/apc{
+ areastring = "/area/ai_monitored/storage/eva";
dir = 1;
name = "EVA Storage APC";
- areastring = "/area/ai_monitored/storage/eva";
pixel_y = 24
},
/obj/structure/cable{
@@ -11111,38 +11290,45 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"ayY" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
+/obj/structure/sign/poster/official/cohiba_robusto_ad,
+/turf/closed/wall,
+/area/lawoffice)
+"ayZ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
/obj/effect/turf_decal/tile/blue{
dir = 8
},
-/turf/open/floor/plasteel,
-/area/hallway/primary/fore)
-"ayZ" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
+/obj/structure/sign/poster/contraband/pwr_game{
+ pixel_x = -32
},
-/obj/effect/turf_decal/tile/blue,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aza" = (
-/obj/machinery/light,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/vr_sleeper{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/crew_quarters/fitness)
"azb" = (
-/obj/structure/chair/stool{
- pixel_y = 8
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/fitness)
"azc" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
@@ -11156,47 +11342,68 @@
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"azd" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/vr_sleeper{
dir = 8
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"aze" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"azf" = (
-/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"azg" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/crew_quarters/fitness)
-"azh" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/vr_sleeper,
/obj/effect/turf_decal/tile/green,
/obj/effect/turf_decal/tile/green{
dir = 4
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 8
+ },
+/area/crew_quarters/fitness)
+"aze" = (
+/obj/machinery/vr_sleeper{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/crew_quarters/fitness)
+"azf" = (
+/obj/structure/grille/broken,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/window{
+ dir = 4
+ },
+/obj/structure/window,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/starboard/fore)
+"azg" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/button/door{
+ id = "holoprivacy";
+ name = "Holodeck Privacy";
+ pixel_y = 24
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
+"azh" = (
+/obj/machinery/door/airlock{
+ name = "Instrument Storage"
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/starboard/fore)
"azi" = (
/obj/machinery/door/airlock/maintenance{
name = "Garden Maintenance";
@@ -11206,61 +11413,81 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"azj" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_y = -29
+/obj/structure/closet{
+ name = "Holodeck Outfits"
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/item/clothing/under/trek/Q,
+/obj/item/clothing/under/trek/command/next,
+/obj/item/clothing/under/trek/command/next,
+/obj/item/clothing/under/trek/command/next,
+/obj/item/clothing/under/trek/engsec/next,
+/obj/item/clothing/under/trek/engsec/next,
+/obj/item/clothing/under/trek/engsec/next,
+/obj/item/clothing/under/trek/engsec/next,
+/obj/item/clothing/under/trek/medsci/next,
+/obj/item/clothing/under/trek/medsci/next,
+/obj/item/clothing/under/trek/medsci/next,
+/obj/item/clothing/under/mw2_russian_para,
+/obj/item/clothing/under/mw2_russian_para,
+/obj/item/clothing/under/gladiator,
+/obj/item/clothing/under/gladiator,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = -24
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"azk" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "#d8b1b1"
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"azl" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
},
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"azm" = (
-/obj/structure/chair/stool{
- pixel_y = 8
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
},
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"azn" = (
-/obj/structure/table,
-/obj/item/storage/firstaid/regular,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"azo" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/area/crew_quarters/dorms)
+"azm" = (
+/obj/machinery/shower{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet)
+"azn" = (
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
+"azo" = (
+/obj/machinery/shower{
+ dir = 8;
+ pixel_y = -4
+ },
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet)
"azp" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
+ },
/turf/open/floor/plating,
/area/crew_quarters/fitness)
"azq" = (
@@ -11463,6 +11690,27 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
+"azP" = (
+/obj/structure/table/wood,
+/obj/machinery/requests_console{
+ department = "Theatre";
+ name = "theatre RC";
+ pixel_x = -32
+ },
+/obj/item/reagent_containers/food/snacks/baguette,
+/obj/item/toy/dummy,
+/obj/item/lipstick/random{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/lipstick/random{
+ pixel_x = -2;
+ pixel_y = -2
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/crew_quarters/theatre)
"azQ" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -11501,12 +11749,9 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"azT" = (
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/effect/landmark/event_spawn,
+/turf/closed/wall,
+/area/crew_quarters/fitness)
"azU" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -11520,27 +11765,38 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"azV" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+/obj/machinery/vr_sleeper{
dir = 8
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white/side{
dir = 8
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/area/crew_quarters/fitness)
"azW" = (
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"azX" = (
-/obj/machinery/door/airlock{
- name = "Unisex Showers"
+/obj/machinery/vr_sleeper{
+ dir = 4
},
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/effect/turf_decal/tile/green{
+ dir = 8
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/obj/effect/turf_decal/tile/green,
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 4
+ },
+/area/crew_quarters/fitness)
"azY" = (
/obj/structure/table,
/obj/item/radio/off,
@@ -11560,27 +11816,26 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aAb" = (
-/obj/machinery/door/airlock{
- id_tag = "Dorm2";
- name = "Dorm 2"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/area/crew_quarters/fitness)
"aAc" = (
/obj/effect/spawner/structure/window,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aAd" = (
-/obj/machinery/light_switch{
- pixel_y = -25
+/obj/machinery/camera{
+ c_tag = "Dorms West"
},
-/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
- dir = 8
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
@@ -11592,46 +11847,51 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"aAf" = (
-/obj/structure/closet/wardrobe/pjs,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/vr_sleeper{
dir = 8
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/green,
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/crew_quarters/fitness)
"aAg" = (
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_y = -29
+/obj/machinery/vr_sleeper{
+ dir = 4
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
dir = 8
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 4
+ },
+/area/crew_quarters/fitness)
"aAh" = (
/turf/closed/wall,
/area/crew_quarters/toilet)
"aAi" = (
-/obj/structure/closet/wardrobe/pjs,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "12"
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/turf/open/floor/plating,
+/area/crew_quarters/fitness)
"aAj" = (
/obj/structure/cable{
icon_state = "1-4"
},
/obj/machinery/power/apc{
- dir = 2;
- name = "Security Checkpoint APC";
areastring = "/area/security/checkpoint/auxiliary";
+ name = "Security Checkpoint APC";
pixel_x = 1;
pixel_y = -24
},
@@ -11640,119 +11900,77 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"aAk" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
+/obj/structure/closet/athletic_mixed,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"aAl" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/obj/structure/reagent_dispensers/water_cooler,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
+/obj/structure/closet/boxinggloves,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"aAm" = (
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/public/glass{
+ name = "Holodeck Door"
},
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
},
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness)
"aAn" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
-/obj/machinery/light_switch{
- pixel_y = -25
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/area/crew_quarters/dorms)
"aAo" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
"aAp" = (
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/structure/closet{
+ name = "Suit Closet"
},
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/item/clothing/under/suit_jacket/white,
+/obj/item/clothing/under/suit_jacket/tan,
+/obj/item/clothing/under/suit_jacket/red,
+/obj/item/clothing/under/suit_jacket/really_black,
+/obj/item/clothing/under/suit_jacket/navy,
+/obj/item/clothing/under/suit_jacket/green,
+/obj/item/clothing/under/suit_jacket/female,
+/obj/item/clothing/under/suit_jacket/checkered,
+/obj/item/clothing/under/suit_jacket/charcoal,
+/obj/item/clothing/under/suit_jacket/burgundy,
+/obj/item/clothing/under/suit_jacket,
+/obj/item/clothing/under/lawyer/black,
+/obj/item/clothing/under/lawyer/blacksuit,
+/obj/item/clothing/under/lawyer/blue,
+/obj/item/clothing/under/lawyer/bluesuit,
+/obj/item/clothing/under/lawyer/female,
+/obj/item/clothing/under/lawyer/purpsuit,
+/obj/item/clothing/under/lawyer/really_black,
+/obj/item/clothing/under/lawyer/red,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"aAq" = (
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"aAr" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"aAs" = (
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "#d8b1b1"
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
-"aAr" = (
-/obj/structure/closet,
-/obj/effect/decal/cleanable/cobweb,
-/obj/effect/spawner/lootdrop/maintenance,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"aAs" = (
-/obj/structure/closet,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 2;
- name = "2maintenance loot spawner"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
"aAt" = (
/obj/machinery/door/poddoor/preopen{
id = "maint2"
@@ -11760,12 +11978,12 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aAu" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/obj/machinery/door/poddoor/preopen{
id = "maint2"
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aAv" = (
@@ -11777,9 +11995,9 @@
/area/maintenance/starboard/fore)
"aAw" = (
/obj/machinery/power/apc{
+ areastring = "/area/hydroponics/garden";
dir = 4;
name = "Garden APC";
- areastring = "/area/hydroponics/garden";
pixel_x = 27;
pixel_y = 2
},
@@ -11793,9 +12011,7 @@
/turf/open/floor/plasteel,
/area/hydroponics/garden)
"aAy" = (
-/obj/machinery/power/smes{
- charge = 0
- },
+/obj/machinery/power/smes,
/obj/structure/cable{
icon_state = "0-4"
},
@@ -11822,9 +12038,7 @@
/turf/closed/wall,
/area/maintenance/department/electrical)
"aAB" = (
-/obj/machinery/power/smes{
- charge = 0
- },
+/obj/machinery/power/smes,
/obj/structure/cable{
icon_state = "0-8"
},
@@ -11897,9 +12111,8 @@
/area/hydroponics/garden)
"aAL" = (
/obj/machinery/power/apc{
- dir = 2;
- name = "Primary Tool Storage APC";
areastring = "/area/storage/primary";
+ name = "Primary Tool Storage APC";
pixel_x = 1;
pixel_y = -24
},
@@ -11911,6 +12124,16 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"aAM" = (
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = 25
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"aAN" = (
/obj/structure/cable{
icon_state = "2-8"
@@ -11986,18 +12209,11 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aAX" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/area/crew_quarters/fitness)
"aAY" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -12005,10 +12221,10 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"aAZ" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/urinal{
+ pixel_y = 32
},
-/turf/open/floor/plasteel/freezer,
+/turf/open/floor/mineral/titanium/blue,
/area/crew_quarters/toilet)
"aBa" = (
/turf/closed/wall/r_wall,
@@ -12081,9 +12297,9 @@
/area/maintenance/fore)
"aBi" = (
/obj/machinery/power/apc{
+ areastring = "/area/gateway";
dir = 8;
name = "Gateway APC";
- areastring = "/area/gateway";
pixel_x = -24;
pixel_y = -1
},
@@ -12123,7 +12339,6 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"aBm" = (
-/obj/effect/landmark/start/assistant,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
@@ -12213,26 +12428,41 @@
/turf/open/floor/plasteel,
/area/hydroponics/garden)
"aBx" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/closed/wall,
-/area/crew_quarters/toilet)
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plasteel,
+/area/hydroponics)
"aBy" = (
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aBz" = (
-/obj/machinery/shower{
+/obj/machinery/camera{
+ c_tag = "Library North"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aBA" = (
-/obj/machinery/shower{
- dir = 8
+/obj/structure/chair/sofa/right,
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#c1caff"
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/turf/open/floor/wood,
+/area/library)
+"aBz" = (
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/effect/landmark/start/assistant,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/chair/sofa/left,
+/turf/open/floor/wood,
+/area/library)
+"aBA" = (
+/obj/structure/chair/comfy/brown{
+ dir = 4
+ },
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/wood,
+/area/library)
"aBB" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall,
@@ -12248,6 +12478,12 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"aBD" = (
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/library)
"aBE" = (
/obj/item/clothing/under/rank/mailman,
/obj/item/clothing/head/mailman,
@@ -12297,9 +12533,12 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"aBM" = (
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/plasteel,
-/area/hydroponics/garden)
+/obj/structure/sign/poster/official/nanomichi_ad{
+ pixel_y = 32
+ },
+/obj/machinery/vending/snack/random,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
"aBN" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
@@ -12356,9 +12595,9 @@
/area/ai_monitored/nuke_storage)
"aBU" = (
/obj/machinery/power/apc{
+ areastring = "/area/ai_monitored/nuke_storage";
dir = 1;
name = "Vault APC";
- areastring = "/area/ai_monitored/nuke_storage";
pixel_y = 25
},
/obj/structure/cable{
@@ -12480,21 +12719,27 @@
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
"aCe" = (
-/obj/effect/landmark/xeno_spawn,
-/obj/item/bikehorn/rubberducky,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/sign/poster/official/do_not_question{
+ pixel_x = 32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
"aCf" = (
-/obj/machinery/camera{
- c_tag = "Theatre Storage"
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
},
-/turf/open/floor/plasteel/white/side{
- dir = 4
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
},
-/area/crew_quarters/theatre)
+/obj/structure/sign/poster/official/obey{
+ pixel_x = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
"aCg" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -12502,11 +12747,14 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aCh" = (
-/obj/machinery/vending/autodrobe,
-/turf/open/floor/plasteel/white/side{
- dir = 4
+/obj/machinery/shower{
+ dir = 8;
+ pixel_y = -4
},
-/area/crew_quarters/theatre)
+/obj/effect/landmark/xeno_spawn,
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet)
"aCi" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -12533,32 +12781,48 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aCm" = (
-/obj/structure/sink{
- dir = 8;
- pixel_x = -12;
- pixel_y = 2
+/obj/item/radio/intercom{
+ pixel_y = 25
},
-/obj/structure/mirror{
- pixel_x = -28
+/obj/machinery/camera{
+ c_tag = "Theatre Stage"
},
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aCn" = (
-/obj/structure/urinal{
- pixel_y = 32
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aCo" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+/obj/structure/chair/comfy/brown{
dir = 4
},
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aCn" = (
+/obj/structure/table/wood/fancy,
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -3;
+ pixel_y = 20
+ },
+/obj/item/reagent_containers/food/condiment/peppermill{
+ dir = 1;
+ pixel_x = 3;
+ pixel_y = 20
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aCo" = (
+/obj/structure/closet{
+ name = "Costume Closet"
+ },
+/obj/item/clothing/head/russobluecamohat,
+/obj/item/clothing/head/russobluecamohat,
+/obj/item/clothing/head/russofurhat,
+/obj/item/clothing/head/russofurhat,
+/obj/item/clothing/head/russofurhat,
+/obj/item/clothing/head/russofurhat,
+/obj/item/clothing/under/mw2_russian_para,
+/obj/item/clothing/under/mw2_russian_para,
+/obj/item/clothing/under/mw2_russian_para,
+/obj/item/clothing/under/mw2_russian_para,
+/obj/item/clothing/shoes/jackboots,
+/obj/item/clothing/shoes/jackboots,
+/obj/item/clothing/shoes/jackboots,
+/obj/item/clothing/shoes/jackboots,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aCp" = (
@@ -12575,19 +12839,11 @@
/turf/open/floor/plasteel/white/corner,
/area/hallway/secondary/entry)
"aCq" = (
-/obj/structure/table/wood,
-/obj/machinery/requests_console{
- department = "Theatre";
- departmentType = 0;
- name = "theatre RC";
- pixel_x = -32
- },
-/obj/item/reagent_containers/food/snacks/baguette,
-/obj/item/toy/dummy,
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/crew_quarters/theatre)
+/obj/structure/closet/lasertag/red,
+/obj/item/clothing/under/pj/red,
+/obj/item/clothing/under/pj/red,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"aCr" = (
/turf/closed/wall,
/area/crew_quarters/theatre)
@@ -12611,30 +12867,53 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aCu" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
- },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
+ },
/turf/open/floor/plating,
/area/crew_quarters/fitness)
"aCv" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+ dir = 5
},
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
+ },
/turf/open/floor/plating,
/area/crew_quarters/fitness)
"aCw" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
+ dir = 4
},
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
+ },
/turf/open/floor/plating,
/area/crew_quarters/fitness)
+"aCx" = (
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aCy" = (
-/obj/effect/decal/cleanable/oil,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aCz" = (
/obj/structure/window/reinforced{
dir = 8
@@ -12645,18 +12924,11 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aCA" = (
-/obj/structure/grille/broken,
-/obj/structure/cable{
- icon_state = "1-8"
+/obj/structure/chair/comfy/brown{
+ dir = 1
},
-/obj/structure/window{
- dir = 4
- },
-/obj/structure/window,
-/turf/open/floor/plating{
- icon_state = "panelscorched"
- },
-/area/maintenance/starboard/fore)
+/turf/open/floor/wood,
+/area/library)
"aCB" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
@@ -12786,6 +13058,13 @@
"aCR" = (
/turf/closed/wall,
/area/chapel/main)
+"aCS" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/chair/comfy/brown{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/library)
"aCT" = (
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty,
@@ -12797,6 +13076,23 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
+"aCU" = (
+/obj/machinery/photocopier{
+ pixel_x = -5;
+ pixel_y = -5
+ },
+/turf/open/floor/wood,
+/area/library)
+"aCV" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/sign/poster/official/obey{
+ pixel_x = 32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
"aCW" = (
/obj/structure/reagent_dispensers/watertank,
/obj/effect/spawner/lootdrop/maintenance,
@@ -12843,7 +13139,6 @@
pixel_y = 5
},
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/turf/open/floor/plasteel,
@@ -12854,7 +13149,6 @@
dir = 1
},
/obj/item/radio/intercom{
- broadcasting = 0;
name = "Station Intercom (General)";
pixel_y = 20
},
@@ -12897,9 +13191,14 @@
/turf/open/floor/plasteel,
/area/hydroponics/garden)
"aDh" = (
-/obj/machinery/vending/assist,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/sign/poster/official/space_cops{
+ pixel_x = -32
+ },
/turf/open/floor/plasteel,
-/area/storage/primary)
+/area/hallway/primary/fore)
"aDi" = (
/obj/structure/window/reinforced,
/turf/open/floor/plasteel/dark,
@@ -12924,7 +13223,6 @@
},
/obj/machinery/requests_console{
department = "Tool Storage";
- departmentType = 0;
pixel_y = 30
},
/turf/open/floor/plasteel,
@@ -12951,7 +13249,6 @@
/obj/item/assembly/signaler,
/obj/item/assembly/signaler,
/obj/item/radio/intercom{
- broadcasting = 0;
name = "Station Intercom (General)";
pixel_y = 20
},
@@ -13008,6 +13305,10 @@
},
/turf/open/floor/circuit,
/area/ai_monitored/nuke_storage)
+"aDu" = (
+/obj/structure/chair/comfy/brown,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aDv" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
@@ -13070,9 +13371,7 @@
/area/ai_monitored/storage/eva)
"aDB" = (
/obj/machinery/suit_storage_unit/standard_unit,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aDC" = (
@@ -13096,9 +13395,7 @@
c_tag = "EVA Storage";
dir = 1
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aDF" = (
@@ -13109,38 +13406,33 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aDG" = (
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/obj/machinery/door/poddoor/shutters/preopen{
+ desc = "Privacy shutters for the Private Study. Stops people spying in on your game.";
+ id = "PrivateStudy1";
+ name = "Private Study Privacy Shutters"
},
-/obj/machinery/camera{
- c_tag = "Dormitory South";
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/effect/spawner/structure/window,
+/turf/open/floor/wood,
+/area/library)
"aDH" = (
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
- },
-/obj/item/pen,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/item/folder/white,
-/obj/item/stamp/rd{
- pixel_x = 3;
- pixel_y = -2
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/crew_quarters/heads/hor)
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp/green,
+/obj/item/pen/fountain/captain,
+/turf/open/floor/carpet,
+/area/crew_quarters/heads/captain)
"aDI" = (
/obj/structure/sign/warning/electricshock,
/turf/closed/wall/r_wall,
/area/ai_monitored/storage/eva)
+"aDJ" = (
+/obj/machinery/door/airlock{
+ desc = "Private study room where nerds are probably playing Dungeons and Dragons 13e, or a place for blood cult rituals.";
+ id_tag = "PrivateStudy";
+ name = "Private Study"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/wood,
+/area/library)
"aDK" = (
/obj/machinery/door/airlock/public/glass{
name = "Cryogenics "
@@ -13153,126 +13445,140 @@
/turf/open/floor/plasteel,
/area/crew_quarters/cryopod)
"aDL" = (
-/obj/structure/sink{
- dir = 8;
- pixel_x = -12;
- pixel_y = 2
- },
-/obj/structure/sink{
- dir = 8;
- pixel_x = -12;
- pixel_y = 2
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aDM" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aDN" = (
-/obj/machinery/light/small,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aDO" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aDP" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aDQ" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aDR" = (
-/obj/structure/table/wood,
-/obj/structure/mirror{
- pixel_x = -28
- },
-/obj/item/lipstick/random{
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/lipstick/random{
- pixel_x = -2;
- pixel_y = -2
- },
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/crew_quarters/theatre)
-"aDS" = (
/obj/machinery/door/airlock{
- name = "Unisex Showers"
+ desc = "Private study room where nerds are probably playing Dungeons and Dragons 13e, or a place for blood cult rituals.";
+ id_tag = "PrivateStudy";
+ name = "Private Study"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/wood,
+/area/library)
+"aDM" = (
+/obj/structure/chair/sofa/right,
+/obj/structure/window{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aDN" = (
+/obj/structure/chair/sofa,
+/obj/structure/window{
+ dir = 1
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aDO" = (
+/obj/structure/chair/sofa/left,
+/obj/structure/window{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aDP" = (
+/obj/structure/chair/comfy/brown{
dir = 4
},
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aDR" = (
+/obj/structure/closet/lasertag/blue,
+/obj/item/clothing/under/pj/blue,
+/obj/item/clothing/under/pj/blue,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"aDS" = (
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "#d8b1b1"
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aDT" = (
-/obj/machinery/light/small,
-/obj/structure/cable{
- icon_state = "1-8"
+/obj/structure/table/wood/fancy,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4;
+ pixel_y = 5
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/obj/item/reagent_containers/food/snacks/burger/plain,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aDU" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
+/obj/structure/table,
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -3;
+ pixel_y = 9
},
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/item/reagent_containers/food/condiment/peppermill{
+ dir = 1;
+ pixel_x = 3;
+ pixel_y = 9
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aDV" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/machinery/meter,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/structure/table/wood/fancy,
+/obj/machinery/light,
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -3;
+ pixel_y = 20
+ },
+/obj/item/reagent_containers/food/condiment/peppermill{
+ dir = 1;
+ pixel_x = 3;
+ pixel_y = 20
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ pixel_y = 5
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aDW" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+/obj/machinery/holopad,
+/obj/machinery/camera{
+ c_tag = "Dorms Central"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
},
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -5;
+ pixel_y = 30
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aDX" = (
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/obj/structure/reagent_dispensers/fueltank,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/structure/chair/sofa{
+ dir = 1
+ },
+/obj/structure/window,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aDY" = (
-/obj/structure/chair/stool,
-/obj/effect/landmark/start/mime,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/open/floor/plasteel/white/side{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
},
-/area/crew_quarters/theatre)
+/obj/structure/mirror{
+ pixel_x = 25
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"aDZ" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -13301,29 +13607,17 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aEb" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Theatre Maintenance";
- req_access_txt = "46"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/closet/secure_closet/personal/cabinet{
+ desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here.";
+ name = "Personal ID-Locked Closet";
+ pixel_y = 15
},
/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/area/maintenance/port)
"aEc" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/crew_quarters/theatre)
+/obj/structure/chair/wood/wings,
+/turf/open/floor/plating,
+/area/maintenance/port)
"aEd" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -13357,9 +13651,8 @@
dir = 4
},
/obj/machinery/power/apc{
- dir = 2;
- name = "Chapel APC";
areastring = "/area/chapel/main";
+ name = "Chapel APC";
pixel_y = -24
},
/obj/structure/cable{
@@ -13421,11 +13714,121 @@
/obj/structure/fans/tiny,
/turf/open/floor/plating,
/area/chapel/main)
+"aEo" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aEp" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/flora/ausbushes/sparsegrass,
+/obj/structure/flora/ausbushes/ppflowers,
+/obj/structure/flora/ausbushes/ywflowers,
+/obj/structure/flora/ausbushes/brflowers,
+/obj/effect/spawner/structure/window,
+/turf/open/floor/grass,
+/area/crew_quarters/bar)
+"aEq" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aEr" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#cee5d2"
+ },
+/obj/structure/table,
+/obj/structure/bedsheetbin/color,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"aEs" = (
+/obj/machinery/vending/cola/red,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"aEt" = (
+/obj/machinery/computer/arcade/minesweeper,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aEu" = (
+/obj/machinery/computer/arcade/battle,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aEv" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/closet/wardrobe/pjs,
+/obj/item/clothing/under/maid,
+/obj/item/clothing/under/maid,
+/obj/item/clothing/under/janimaid,
+/obj/item/clothing/under/janimaid,
+/obj/item/clothing/accessory/maidapron,
+/obj/item/clothing/accessory/maidapron,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"aEw" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/bar)
+"aEx" = (
+/obj/structure/table/reinforced,
+/obj/item/clothing/head/that,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/bar)
+"aEy" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -9;
+ pixel_y = 9
+ },
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -3;
+ pixel_y = 9
+ },
+/obj/item/reagent_containers/food/condiment/peppermill{
+ dir = 1;
+ pixel_x = -3
+ },
+/obj/item/reagent_containers/food/condiment/peppermill{
+ pixel_x = -9
+ },
+/obj/item/sharpener{
+ pixel_x = 10
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/kitchen)
"aEz" = (
/obj/machinery/power/apc{
+ areastring = "/area/hallway/secondary/entry";
dir = 4;
name = "Entry Hall APC";
- areastring = "/area/hallway/secondary/entry";
pixel_x = 24
},
/obj/structure/cable,
@@ -13682,97 +14085,68 @@
/turf/closed/wall/r_wall,
/area/ai_monitored/storage/eva)
"aFd" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/structure/table/wood,
+/obj/item/instrument/guitar{
+ pixel_x = -7
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/obj/item/instrument/eguitar{
+ pixel_x = 5
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/item/instrument/violin,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aFe" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
+/obj/machinery/door/airlock{
+ id_tag = "Dorm2";
+ name = "Room One"
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"aFf" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aFg" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/closed/wall,
-/area/crew_quarters/toilet)
-"aFh" = (
-/obj/machinery/door/airlock{
- name = "Unisex Restrooms"
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
+"aFf" = (
+/obj/structure/piano{
+ icon_state = "piano"
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aFi" = (
-/obj/machinery/power/apc{
- dir = 4;
- name = "Dormitory Bathrooms APC";
- areastring = "/area/crew_quarters/toilet";
- pixel_x = 26
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aFj" = (
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/blue{
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aFg" = (
+/obj/structure/chair/comfy/black{
dir = 8
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/theatre)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aFh" = (
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aFi" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aFj" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/drinks/britcup,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aFk" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk{
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
dir = 1
},
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
-/area/crew_quarters/theatre)
+/area/crew_quarters/bar)
"aFl" = (
/obj/machinery/light/small{
dir = 8
@@ -13805,12 +14179,17 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aFp" = (
-/obj/effect/spawner/lootdrop/maintenance,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/machinery/door/window/southright{
+ name = "Bar Door";
+ req_one_access_txt = "25;28"
},
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/crew_quarters/bar)
"aFq" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -13843,6 +14222,20 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"aFt" = (
+/obj/structure/table/reinforced,
+/obj/machinery/computer/security/telescreen/entertainment{
+ pixel_x = 32
+ },
+/obj/item/book/manual/wiki/barman_recipes,
+/obj/item/reagent_containers/rag,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/crew_quarters/bar)
"aFu" = (
/turf/closed/wall,
/area/library)
@@ -13868,15 +14261,14 @@
/area/maintenance/starboard/fore)
"aFy" = (
/obj/machinery/power/apc{
- dir = 2;
- name = "Chapel Office APC";
areastring = "/area/chapel/office";
+ name = "Chapel Office APC";
pixel_y = -24
},
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
-/area/chapel/office)
+/area/maintenance/starboard/fore)
"aFz" = (
/turf/open/floor/plasteel/dark,
/area/chapel/main)
@@ -13896,6 +14288,36 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/chapel/main)
+"aFC" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/snacks/bluecherrycupcake{
+ pixel_y = 5
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aFD" = (
+/obj/structure/chair/comfy/brown{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aFE" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 23
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
+"aFF" = (
+/obj/structure/chair/sofa{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aFG" = (
/obj/effect/turf_decal/tile/blue{
dir = 4
@@ -14041,7 +14463,9 @@
/turf/open/floor/plasteel,
/area/storage/primary)
"aFS" = (
-/obj/effect/landmark/start/assistant,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/storage/primary)
"aFT" = (
@@ -14051,9 +14475,8 @@
/turf/open/floor/plasteel,
/area/storage/primary)
"aFU" = (
-/obj/effect/landmark/start/assistant,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
+/obj/structure/chair/stool{
+ pixel_y = 8
},
/turf/open/floor/plasteel,
/area/storage/primary)
@@ -14072,8 +14495,6 @@
/area/gateway)
"aFX" = (
/obj/item/radio/intercom{
- freerange = 0;
- frequency = 1459;
name = "Station Intercom (General)";
pixel_x = -30
},
@@ -14165,7 +14586,7 @@
/area/ai_monitored/nuke_storage)
"aGf" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -14188,39 +14609,48 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/storage/eva)
"aGk" = (
-/obj/structure/sink{
- dir = 8;
- pixel_x = -12;
- pixel_y = 2
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/turf/open/floor/plating,
+/area/space/nearstation)
"aGl" = (
-/obj/machinery/light_switch{
- pixel_x = 27
+/obj/structure/closet/crate,
+/obj/item/book/manual/wiki/telescience,
+/obj/item/book/manual/wiki/engineering_guide,
+/obj/item/book/manual/wiki/engineering_construction,
+/obj/item/book/manual/wiki/atmospherics,
+/obj/item/book/manual/wiki/detective,
+/obj/item/book/manual/wiki/tcomms,
+/obj/item/book/manual/wiki/engineering_singulo_tesla,
+/obj/item/book/manual/wiki/experimentor,
+/obj/item/book/manual/wiki/research_and_development,
+/obj/item/book/manual/wiki/robotics_cyborgs,
+/obj/item/book/manual/wiki/security_space_law,
+/obj/item/book/manual/wiki/medicine,
+/obj/item/book/manual/wiki/medical_cloning,
+/obj/item/book/manual/wiki/infections,
+/obj/item/book/manual/ripley_build_and_repair,
+/obj/item/book/manual/hydroponics_pod_people,
+/obj/item/book/manual/wiki/toxins,
+/obj/item/book/manual/wiki/grenades,
+/obj/item/book{
+ desc = "An undeniably handy book.";
+ icon_state = "bookknock";
+ name = "A Simpleton's Guide to Safe-cracking with Stethoscopes"
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/turf/open/floor/wood,
+/area/library)
"aGm" = (
-/obj/structure/toilet{
- pixel_y = 8
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/hydroponics)
"aGn" = (
-/obj/structure/toilet{
- pixel_y = 8
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
},
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/effect/landmark/blobstart,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/turf/open/floor/plasteel,
+/area/hydroponics)
"aGo" = (
/obj/structure/table,
/obj/item/stack/sheet/rglass{
@@ -14240,12 +14670,11 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aGp" = (
-/obj/machinery/light/small{
- dir = 8
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
},
-/obj/machinery/recharge_station,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/turf/open/floor/plasteel,
+/area/hydroponics)
"aGq" = (
/obj/item/stack/sheet/plasteel{
amount = 10
@@ -14297,28 +14726,13 @@
/turf/closed/wall,
/area/crew_quarters/theatre)
"aGw" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/closet/secure_closet/freezer/cream_pie,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/theatre)
+/obj/machinery/seed_extractor,
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"aGx" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/closed/wall,
-/area/crew_quarters/toilet)
+/obj/machinery/biogenerator,
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"aGy" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -14476,6 +14890,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"aGK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
"aGL" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -14517,15 +14937,9 @@
/turf/closed/wall,
/area/chapel/office)
"aGP" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/machinery/vending/hydronutrients,
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"aGQ" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -14538,6 +14952,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"aGR" = (
+/obj/machinery/vending/hydroseeds{
+ slogan_delay = 700
+ },
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"aGS" = (
/obj/structure/cable{
icon_state = "2-8"
@@ -14629,17 +15049,33 @@
/area/hallway/secondary/entry)
"aHb" = (
/obj/structure/table/wood,
-/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
+/obj/item/paper_bin/bundlenatural{
+ pixel_x = 6;
+ pixel_y = 4
},
-/obj/item/stack/packageWrap,
-/turf/open/floor/wood,
-/area/library)
+/obj/item/paper_bin{
+ pixel_x = -6;
+ pixel_y = 4
+ },
+/obj/item/pen/fountain,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/item/pen/fourcolor,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aHc" = (
-/obj/machinery/vending/games,
-/turf/open/floor/wood,
-/area/library)
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/effect/landmark/start/botanist,
+/turf/open/floor/plasteel,
+/area/hydroponics)
"aHd" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
@@ -14665,8 +15101,7 @@
pixel_y = 28
},
/obj/machinery/camera{
- c_tag = "Chapel Office";
- dir = 2
+ c_tag = "Chapel Office"
},
/turf/open/floor/plasteel/grimy,
/area/chapel/office)
@@ -14747,6 +15182,34 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/chapel/main)
+"aHr" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"aHs" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"aHt" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#cee5d2"
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aHu" = (
/obj/machinery/status_display{
pixel_x = 32
@@ -14825,12 +15288,12 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/storage/eva)
"aHD" = (
-/obj/structure/chair/stool{
- pixel_y = 8
+/obj/structure/chair/comfy/beige{
+ dir = 8
},
/obj/effect/landmark/start/assistant,
-/turf/open/floor/plasteel,
-/area/storage/primary)
+/turf/open/floor/plasteel/grimy,
+/area/hallway/secondary/entry)
"aHE" = (
/obj/structure/table,
/obj/item/weldingtool,
@@ -14997,38 +15460,67 @@
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"aHU" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/obj/structure/extinguisher_cabinet{
+ pixel_y = -30
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aHV" = (
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aHW" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aHX" = (
+/obj/machinery/light{
dir = 1
},
-/obj/structure/sink{
- dir = 8;
- pixel_x = -12;
- pixel_y = 2
+/obj/structure/table/wood/fancy,
+/obj/item/reagent_containers/food/condiment/peppermill{
+ pixel_x = -9
},
-/obj/structure/mirror{
- pixel_x = -28
+/obj/item/reagent_containers/food/condiment/peppermill{
+ dir = 1;
+ pixel_x = -3
},
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aHV" = (
-/obj/machinery/door/airlock{
- name = "Unit 1"
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -9;
+ pixel_y = 9
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aHW" = (
-/obj/machinery/door/airlock{
- name = "Unit 2"
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -3;
+ pixel_y = 9
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"aHX" = (
-/obj/machinery/door/airlock{
- name = "Unit B"
+/obj/item/reagent_containers/food/condiment/pack/ketchup{
+ pixel_x = 5
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/obj/item/reagent_containers/food/condiment/pack/ketchup{
+ pixel_x = 5
+ },
+/obj/item/reagent_containers/food/condiment/pack/ketchup{
+ pixel_x = 5
+ },
+/obj/item/reagent_containers/food/condiment/pack/hotsauce{
+ pixel_x = 10
+ },
+/obj/item/reagent_containers/food/condiment/pack/hotsauce{
+ pixel_x = 10
+ },
+/obj/item/reagent_containers/food/condiment/pack/mustard{
+ pixel_x = 10
+ },
+/obj/item/reagent_containers/food/condiment/pack/mustard{
+ pixel_x = 10
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aHY" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
@@ -15036,23 +15528,12 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aHZ" = (
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -22
- },
-/obj/structure/closet/crate/wooden/toy,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/sign/poster/contraband/fun_police{
+ pixel_x = 32
},
/turf/open/floor/plasteel,
-/area/crew_quarters/theatre)
+/area/hallway/primary/fore)
"aIa" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -15062,9 +15543,9 @@
/area/maintenance/starboard/fore)
"aIb" = (
/obj/machinery/power/apc{
+ areastring = "/area/crew_quarters/theatre";
dir = 8;
name = "Theatre APC";
- areastring = "/area/crew_quarters/theatre";
pixel_x = -25
},
/obj/structure/cable,
@@ -15075,9 +15556,8 @@
/area/maintenance/starboard/fore)
"aIc" = (
/obj/machinery/power/apc{
- dir = 2;
- name = "Bar APC";
areastring = "/area/crew_quarters/bar";
+ name = "Bar APC";
pixel_y = -24
},
/obj/structure/cable,
@@ -15117,18 +15597,13 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/effect/turf_decal/bot{
- dir = 2
- },
-/turf/open/floor/plasteel{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
/area/crew_quarters/bar)
"aIh" = (
/obj/machinery/power/apc{
- dir = 2;
- name = "Kitchen APC";
areastring = "/area/crew_quarters/kitchen";
+ name = "Kitchen APC";
pixel_y = -24
},
/obj/structure/cable,
@@ -15137,6 +15612,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"aIi" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aIj" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -15187,9 +15668,8 @@
/area/maintenance/starboard/fore)
"aIn" = (
/obj/machinery/power/apc{
- dir = 2;
- name = "Hydroponics APC";
areastring = "/area/hydroponics";
+ name = "Hydroponics APC";
pixel_y = -24
},
/obj/structure/cable{
@@ -15216,21 +15696,15 @@
/turf/closed/wall,
/area/hydroponics)
"aIr" = (
-/obj/structure/filingcabinet,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/wood,
-/area/library)
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"aIs" = (
-/obj/structure/chair/office/dark,
-/obj/machinery/camera{
- c_tag = "Library North";
- dir = 2
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
},
+/obj/structure/chair/comfy/brown,
/turf/open/floor/wood,
-/area/library)
+/area/crew_quarters/bar)
"aIt" = (
/turf/open/floor/wood,
/area/library)
@@ -15250,16 +15724,11 @@
/turf/open/floor/wood,
/area/library)
"aIw" = (
-/obj/structure/chair/office/dark,
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/effect/landmark/start/assistant,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+ dir = 9
},
/turf/open/floor/wood,
-/area/library)
+/area/crew_quarters/bar)
"aIx" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -15270,29 +15739,35 @@
/turf/open/floor/wood,
/area/library)
"aIy" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
+/obj/structure/table/wood,
+/obj/item/paper_bin{
+ pixel_x = 1;
+ pixel_y = 9
+ },
+/obj/item/stack/packageWrap,
+/obj/item/pen/fourcolor,
+/turf/open/floor/wood,
+/area/library)
"aIz" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
/turf/open/floor/plasteel/grimy,
/area/chapel/office)
"aIA" = (
-/obj/structure/table/wood,
-/obj/item/paper_bin{
- pixel_x = -2;
- pixel_y = 5
- },
-/obj/item/storage/crayons,
-/turf/open/floor/plasteel/grimy,
-/area/chapel/office)
-"aIB" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/bodycontainer/crematorium{
id = "crematoriumChapel"
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
+"aIB" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
/turf/open/floor/plasteel/dark,
/area/chapel/office)
"aIC" = (
@@ -15316,6 +15791,15 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/security/warden)
+"aIG" = (
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aIH" = (
/obj/structure/table,
/obj/item/storage/box/lights/mixed,
@@ -15367,8 +15851,7 @@
/area/storage/primary)
"aIO" = (
/obj/machinery/camera{
- c_tag = "Arrivals Lounge";
- dir = 2
+ c_tag = "Arrivals Lounge"
},
/obj/machinery/light{
dir = 1
@@ -15402,7 +15885,7 @@
/obj/item/reagent_containers/glass/bucket,
/obj/item/plant_analyzer,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/green,
@@ -15416,8 +15899,6 @@
/obj/structure/table/glass,
/obj/item/plant_analyzer,
/obj/item/radio/intercom{
- freerange = 0;
- frequency = 1459;
name = "Station Intercom (General)";
pixel_x = 29
},
@@ -15577,12 +16058,13 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aJk" = (
-/obj/machinery/door/airlock{
- name = "Theatre Backstage";
- req_access_txt = "46"
+/obj/machinery/holopad,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
/turf/open/floor/plasteel,
-/area/crew_quarters/theatre)
+/area/crew_quarters/dorms)
"aJl" = (
/obj/structure/tank_dispenser/oxygen,
/obj/machinery/light{
@@ -15594,12 +16076,11 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aJm" = (
-/obj/structure/sink/kitchen{
- pixel_y = 28
+/obj/machinery/light{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"aJn" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -15609,8 +16090,7 @@
dir = 1
},
/obj/machinery/camera{
- c_tag = "Central Hallway North";
- dir = 2
+ c_tag = "Central Hallway North"
},
/obj/effect/turf_decal/tile/blue{
dir = 1
@@ -15682,8 +16162,17 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aJv" = (
-/obj/machinery/vending/cola/random,
-/turf/open/floor/plasteel/dark,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/sign/poster/contraband/robust_softdrinks{
+ pixel_x = -32;
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aJw" = (
/turf/closed/wall,
@@ -15703,6 +16192,10 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"aJz" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
"aJA" = (
/obj/machinery/door/airlock/maintenance{
name = "Kitchen Maintenance";
@@ -15734,13 +16227,12 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aJE" = (
-/obj/item/reagent_containers/food/drinks/shaker,
-/obj/item/gun/ballistic/revolver/doublebarrel,
-/obj/structure/table/wood,
-/obj/item/stack/spacecash/c10,
-/obj/item/stack/spacecash/c100,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"aJF" = (
/obj/machinery/newscaster{
pixel_x = 30
@@ -15767,9 +16259,6 @@
/area/chapel/office)
"aJH" = (
/obj/machinery/door/window/southleft{
- base_state = "left";
- dir = 2;
- icon_state = "left";
name = "Bar Delivery";
req_access_txt = "25"
},
@@ -15780,11 +16269,11 @@
/turf/closed/wall,
/area/crew_quarters/kitchen)
"aJJ" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
+/obj/structure/table/wood,
+/obj/item/folder/yellow,
+/obj/item/pen/blue,
+/turf/open/floor/wood,
+/area/library)
"aJK" = (
/obj/machinery/navbeacon{
codes_txt = "delivery;dir=2";
@@ -15792,12 +16281,8 @@
location = "Kitchen"
},
/obj/structure/plasticflaps/opaque,
-/obj/effect/turf_decal/bot{
- dir = 2
- },
-/turf/open/floor/plasteel{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
/area/crew_quarters/kitchen)
"aJL" = (
/obj/machinery/navbeacon{
@@ -15806,30 +16291,26 @@
location = "Hydroponics"
},
/obj/structure/plasticflaps/opaque,
-/obj/effect/turf_decal/bot{
- dir = 2
- },
-/turf/open/floor/plasteel{
- dir = 2
- },
-/area/hydroponics)
-"aJM" = (
-/obj/structure/table/wood,
-/obj/item/flashlight/lamp{
- pixel_y = 10
- },
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/chapel/office)
-"aJN" = (
-/obj/structure/table,
-/obj/item/book/manual/hydroponics_pod_people,
-/obj/item/paper/guides/jobs/hydroponics,
+/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/hydroponics)
+"aJM" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
+"aJN" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/structure/sign/departments/security{
+ pixel_x = -32;
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
"aJO" = (
/obj/structure/table,
/obj/machinery/reagentgrinder,
@@ -15837,30 +16318,55 @@
/area/hydroponics)
"aJP" = (
/obj/structure/table/wood,
-/obj/item/folder/yellow,
-/obj/item/pen,
-/turf/open/floor/wood,
-/area/library)
-"aJQ" = (
-/obj/structure/chair/office/dark{
+/obj/item/flashlight/lamp{
+ pixel_y = 10
+ },
+/obj/structure/disposalpipe/segment,
+/obj/item/nullrod,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/wood,
-/area/library)
-"aJR" = (
-/obj/structure/chair/office/dark{
+/turf/open/floor/plasteel/grimy,
+/area/chapel/office)
+"aJQ" = (
+/obj/machinery/light{
dir = 8
},
-/turf/open/floor/wood,
-/area/library)
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"aJR" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aJS" = (
/obj/structure/table/wood,
/obj/structure/disposalpipe/segment,
+/obj/item/paicard,
/turf/open/floor/wood,
/area/library)
"aJT" = (
/obj/structure/table/wood,
-/obj/item/nullrod,
+/obj/item/paper_bin{
+ pixel_x = -2;
+ pixel_y = 5
+ },
+/obj/item/storage/crayons,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -15968,9 +16474,9 @@
icon_state = "0-4"
},
/obj/machinery/power/apc{
+ areastring = "/area/construction/mining/aux_base";
dir = 8;
name = "Auxillary Base Construction APC";
- areastring = "/area/construction/mining/aux_base";
pixel_x = -24
},
/obj/structure/cable{
@@ -15981,11 +16487,33 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"aKg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"aKh" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"aKi" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/structure/bedsheetbin/towel,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aKj" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/tile/neutral{
- dir = 2
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"aKk" = (
@@ -16025,22 +16553,24 @@
/turf/open/floor/plating,
/area/storage/primary)
"aKq" = (
-/obj/item/radio/intercom{
- pixel_y = 25
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
},
-/obj/machinery/camera{
- c_tag = "Theatre Stage";
- dir = 2
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aKr" = (
-/obj/machinery/airalarm{
- dir = 2;
- pixel_y = 24
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aKs" = (
/obj/structure/disposalpipe/segment,
/obj/effect/spawner/structure/window,
@@ -16179,14 +16709,22 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aKJ" = (
-/obj/machinery/light_switch{
- pixel_y = 28
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_y = -29
},
-/obj/machinery/light{
- dir = 1
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aKK" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/closet/secure_closet/hydroponics,
@@ -16209,45 +16747,46 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aKM" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
-"aKN" = (
-/obj/structure/window/reinforced{
- dir = 4
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"aKO" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/machinery/firealarm{
- dir = 2;
- pixel_y = 24
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/dorms)
+"aKN" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/chair/comfy/brown,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"aKO" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/chair/comfy/black,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aKP" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
+/obj/machinery/door/airlock{
+ name = "Unisex Restrooms"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
"aKQ" = (
/obj/machinery/reagentgrinder,
/obj/structure/table/wood,
@@ -16257,11 +16796,13 @@
/turf/open/floor/wood,
/area/crew_quarters/bar)
"aKS" = (
-/obj/machinery/camera{
- c_tag = "Bar Storage"
+/obj/effect/turf_decal/tile/red,
+/obj/structure/sign/departments/security{
+ pixel_x = 32;
+ pixel_y = -32
},
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
"aKT" = (
/obj/structure/closet/secure_closet/freezer/meat,
/turf/open/floor/plasteel/showroomfloor,
@@ -16272,9 +16813,6 @@
/area/hydroponics)
"aKV" = (
/obj/machinery/door/window/southleft{
- base_state = "left";
- dir = 2;
- icon_state = "left";
name = "Kitchen Delivery";
req_access_txt = "28"
},
@@ -16314,8 +16852,9 @@
c_tag = "Chapel Crematorium";
dir = 4
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
+/obj/structure/bodycontainer/morgue,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
},
/turf/open/floor/plasteel/dark,
/area/chapel/office)
@@ -16384,11 +16923,9 @@
/turf/open/floor/wood,
/area/library)
"aLh" = (
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/library)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall,
+/area/crew_quarters/toilet)
"aLi" = (
/obj/structure/chair/comfy/beige,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -16464,6 +17001,23 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/main)
+"aLs" = (
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/camera{
+ c_tag = "Dorms South";
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aLt" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -16480,7 +17034,7 @@
/area/construction/mining/aux_base)
"aLv" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/stripes/line{
@@ -16547,9 +17101,9 @@
icon_state = "0-2"
},
/obj/machinery/power/apc{
- name = "Port Hall APC";
areastring = "/area/hallway/primary/port";
dir = 1;
+ name = "Port Hall APC";
pixel_y = 26
},
/turf/open/floor/plasteel,
@@ -16585,8 +17139,7 @@
/area/hallway/primary/port)
"aLL" = (
/obj/machinery/camera{
- c_tag = "Port Hallway 2";
- dir = 2
+ c_tag = "Port Hallway 2"
},
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -16625,15 +17178,18 @@
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"aLQ" = (
-/obj/machinery/camera{
- c_tag = "Central Hallway North-East";
- dir = 2
+/obj/structure/cable,
+/obj/machinery/power/apc{
+ areastring = "/area/crew_quarters/toilet";
+ dir = 4;
+ name = "Dormitory Bathrooms APC";
+ pixel_x = 26
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/central)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/table/glass,
+/obj/structure/bedsheetbin/towel,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"aLR" = (
/obj/machinery/newscaster{
pixel_y = 32
@@ -16647,10 +17203,11 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aLS" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk,
+/turf/open/floor/plasteel/white/side{
dir = 4
},
-/turf/open/floor/wood,
/area/crew_quarters/theatre)
"aLT" = (
/obj/machinery/door/firedoor,
@@ -16675,15 +17232,13 @@
dir = 1
},
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aLW" = (
/obj/machinery/camera{
- c_tag = "Central Hallway North-West";
- dir = 2
+ c_tag = "Central Hallway North-West"
},
/obj/machinery/airalarm{
pixel_y = 23
@@ -16743,14 +17298,12 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aMg" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/obj/machinery/vending/cola/pwr_game,
+/obj/structure/sign/poster/contraband/pwr_game{
+ pixel_y = 32
},
/turf/open/floor/plasteel,
-/area/hallway/primary/central)
+/area/crew_quarters/locker)
"aMh" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -16787,7 +17340,6 @@
/area/crew_quarters/kitchen)
"aMm" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/turf/open/floor/plasteel,
@@ -16805,20 +17357,33 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aMp" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
+/obj/effect/landmark/blobstart,
+/turf/open/floor/plating,
+/area/maintenance/department/electrical)
"aMq" = (
-/obj/structure/piano{
- icon_state = "piano"
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
},
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aMr" = (
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aMs" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -16840,41 +17405,33 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aMu" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
+/obj/machinery/camera{
+ c_tag = "Bathrooms";
dir = 1
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/obj/structure/urinal{
+ pixel_y = 32
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"aMv" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"aMw" = (
-/obj/machinery/computer/slot_machine,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
-"aMx" = (
-/obj/structure/chair/stool,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet)
+"aMw" = (
+/obj/machinery/door/airlock{
+ name = "Unisex Restrooms"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"aMx" = (
+/obj/machinery/door/airlock{
+ name = "Shower Room"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/toilet)
"aMy" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -16907,13 +17464,21 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aMB" = (
-/obj/machinery/vending/coffee,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/obj/effect/spawner/structure/window,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"aMC" = (
-/obj/machinery/vending/cola/random,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light_switch{
+ pixel_y = -25
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"aMD" = (
/obj/machinery/icecream_vat,
/turf/open/floor/plasteel/showroomfloor,
@@ -16939,27 +17504,28 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aMH" = (
-/obj/structure/chair/office/dark{
- dir = 1
+/obj/machinery/door/airlock{
+ name = "Unisex Restrooms"
},
-/turf/open/floor/wood,
-/area/library)
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/bar)
"aMI" = (
/obj/machinery/light/small,
/obj/machinery/vending/wardrobe/hydro_wardrobe,
/turf/open/floor/plasteel,
/area/hydroponics)
"aMJ" = (
-/obj/structure/chair/office/dark{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/wood,
-/area/library)
+/turf/closed/wall,
+/area/crew_quarters/dorms)
"aMK" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
+/obj/structure/disposalpipe/segment{
+ dir = 5
},
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/chapel/office)
"aML" = (
@@ -16970,8 +17536,7 @@
/area/chapel/main)
"aMM" = (
/obj/machinery/camera{
- c_tag = "Chapel North";
- dir = 2
+ c_tag = "Chapel North"
},
/turf/open/floor/plasteel/dark,
/area/chapel/main)
@@ -17038,9 +17603,11 @@
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"aMW" = (
-/obj/structure/bodycontainer/morgue,
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
+/obj/structure/bookcase{
+ name = "Forbidden Knowledge"
+ },
+/turf/open/floor/carpet,
+/area/library)
"aMX" = (
/turf/open/floor/plasteel/grimy,
/area/chapel/office)
@@ -17121,6 +17688,13 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"aNn" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/chair/comfy/brown,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aNo" = (
/obj/structure/cable{
icon_state = "1-8"
@@ -17151,17 +17725,33 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aNt" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/chair/comfy/brown{
dir = 4
},
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"aNu" = (
-/obj/structure/closet/secure_closet/bar{
- req_access_txt = "25"
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
},
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"aNu" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/apc{
+ areastring = "/area/crew_quarters/abandoned_gambling_den";
+ name = "Abandoned Gambling Den APC";
+ pixel_y = -24
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"aNv" = (
/obj/effect/turf_decal/plaque{
icon_state = "L4"
@@ -17237,57 +17827,78 @@
/turf/open/floor/wood,
/area/crew_quarters/bar)
"aNF" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
},
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/item/reagent_containers/food/drinks/soda_cans/starkist{
+ pixel_x = -3;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/bar)
"aNG" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/structure/chair/comfy/brown{
+ dir = 8
},
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/dorms)
"aNH" = (
-/obj/machinery/door/window{
- dir = 4;
- name = "Theatre Stage"
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/sign/warning/fire{
+ desc = "A sign that states the labeled room's number.";
+ icon_state = "roomnum";
+ name = "Room Number 1";
+ pixel_x = -30;
+ pixel_y = -7
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aNI" = (
-/obj/machinery/computer/slot_machine,
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/machinery/status_display{
- pixel_x = 32
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
+/obj/structure/closet/jcloset,
+/obj/item/storage/bag/trash,
+/obj/item/clothing/under/janimaid,
+/obj/item/clothing/under/janimaid,
+/obj/item/clothing/under/janimaid,
+/obj/item/clothing/under/maid,
+/obj/item/clothing/under/maid,
+/obj/item/clothing/under/maid,
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/janitor)
"aNJ" = (
-/obj/structure/chair/stool,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/structure/table,
+/obj/item/grenade/chem_grenade/cleaner,
+/obj/item/grenade/chem_grenade/cleaner,
+/obj/item/grenade/chem_grenade/cleaner,
+/obj/machinery/requests_console{
+ department = "Janitorial";
+ departmentType = 1;
+ pixel_y = -29
},
+/obj/item/reagent_containers/spray/cleaner,
+/obj/item/storage/box/lights/mixed,
+/obj/item/storage/box/lights/mixed,
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/janitor)
"aNK" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
@@ -17340,6 +17951,7 @@
"aNR" = (
/obj/structure/table/wood,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/item/paicard,
/turf/open/floor/carpet,
/area/hallway/secondary/entry)
"aNS" = (
@@ -17376,9 +17988,11 @@
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"aNV" = (
-/obj/machinery/photocopier,
-/turf/open/floor/wood,
-/area/library)
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"aNW" = (
/obj/machinery/door/airlock/public/glass{
name = "Chapel Office";
@@ -17585,6 +18199,15 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"aOu" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aOv" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -17709,32 +18332,56 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aOH" = (
-/obj/structure/window/reinforced,
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
+/obj/structure/closet/secure_closet/captains,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/item/clothing/under/captainparade,
+/turf/open/floor/carpet,
+/area/crew_quarters/heads/captain)
"aOI" = (
/obj/structure/kitchenspike,
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/kitchen)
"aOJ" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 4
+/obj/item/radio/intercom{
+ dir = 8;
+ name = "Station Intercom (General)";
+ pixel_x = -28
},
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"aOK" = (
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/crew_quarters/bar)
-"aOL" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
+/obj/structure/closet/secure_closet/hop,
+/obj/effect/turf_decal/tile/blue{
dir = 1
},
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/item/clothing/suit/ianshirt,
/turf/open/floor/plasteel,
+/area/crew_quarters/heads/hop)
+"aOK" = (
+/obj/machinery/door/airlock{
+ name = "Theatre Backstage";
+ req_access_txt = "46"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel/dark,
/area/crew_quarters/bar)
+"aOL" = (
+/obj/machinery/camera{
+ c_tag = "Central Hallway North-East"
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -5;
+ pixel_y = 30
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"aOM" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -17803,8 +18450,7 @@
"aOW" = (
/obj/machinery/hydroponics/constructable,
/obj/machinery/camera{
- c_tag = "Hydroponics North";
- dir = 2
+ c_tag = "Hydroponics North"
},
/turf/open/floor/plasteel/dark,
/area/hydroponics)
@@ -17861,29 +18507,38 @@
/turf/open/floor/wood,
/area/library)
"aPg" = (
-/obj/structure/bookcase{
- name = "Forbidden Knowledge"
- },
-/turf/open/floor/engine/cult,
-/area/library)
-"aPh" = (
-/obj/structure/table/wood,
-/obj/item/paper_bin{
- pixel_x = -3;
- pixel_y = 7
- },
-/obj/item/pen/invisible,
-/turf/open/floor/engine/cult,
-/area/library)
-"aPi" = (
-/obj/structure/table/wood,
-/obj/item/taperecorder,
-/obj/item/camera,
/obj/item/radio/intercom{
pixel_y = 25
},
-/turf/open/floor/engine/cult,
+/obj/machinery/vending/wardrobe/curator_wardrobe,
+/turf/open/floor/carpet,
/area/library)
+"aPh" = (
+/obj/structure/table/wood,
+/obj/item/book/codex_gigas,
+/obj/item/clothing/under/suit_jacket/red,
+/obj/structure/destructible/cult/tome,
+/turf/open/floor/carpet,
+/area/library)
+"aPi" = (
+/obj/structure/chair/comfy/brown,
+/turf/open/floor/carpet,
+/area/library)
+"aPj" = (
+/obj/machinery/vr_sleeper{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/crew_quarters/fitness)
"aPk" = (
/turf/open/floor/plasteel/chapel{
dir = 4
@@ -17958,7 +18613,6 @@
/area/hallway/secondary/entry)
"aPv" = (
/obj/item/radio/intercom{
- broadcasting = 0;
name = "Station Intercom (General)";
pixel_y = 20
},
@@ -18077,6 +18731,19 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"aPP" = (
+/obj/structure/reagent_dispensers/watertank/high,
+/obj/structure/sign/poster/contraband/lizard{
+ pixel_x = -32
+ },
+/obj/structure/sign/poster/contraband/lizard{
+ pixel_x = -32
+ },
+/obj/structure/sign/poster/contraband/lizard{
+ pixel_x = -32
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
"aPQ" = (
/turf/closed/wall,
/area/storage/tools)
@@ -18167,39 +18834,34 @@
/turf/open/floor/plating,
/area/bridge)
"aPY" = (
-/obj/structure/chair/stool,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/structure/table/optable{
+ name = "Robotics Operating Table"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/obj/effect/landmark/event_spawn,
+/obj/item/tank/internals/anesthetic,
+/obj/item/clothing/mask/breath,
+/turf/open/floor/plasteel/dark,
+/area/science/robotics/lab)
"aPZ" = (
-/obj/structure/table,
-/obj/machinery/computer/security/telescreen/entertainment{
- pixel_x = -31
- },
-/obj/item/clothing/head/hardhat/cakehat,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/item/mop,
+/obj/item/reagent_containers/glass/bucket,
+/obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6{
+ pixel_x = 32
},
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/janitor)
"aQa" = (
-/obj/structure/table,
-/obj/item/kitchen/fork,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/structure/reagent_dispensers/watertank,
+/obj/structure/sign/poster/contraband/lusty_xenomorph{
+ pixel_x = 32
},
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/janitor)
"aQb" = (
-/obj/structure/window/reinforced,
-/obj/structure/table/wood,
-/obj/item/instrument/violin,
-/turf/open/floor/wood,
+/obj/machinery/vending/autodrobe,
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
/area/crew_quarters/theatre)
"aQc" = (
/obj/effect/turf_decal/tile/bar,
@@ -18209,23 +18871,15 @@
/turf/open/floor/plasteel,
/area/crew_quarters/bar)
"aQd" = (
-/obj/structure/chair,
-/obj/effect/landmark/start/assistant,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space)
"aQe" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/chair/stool,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/turf/open/floor/plating,
+/area/space/nearstation)
"aQf" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/green{
@@ -18340,22 +18994,24 @@
/area/library)
"aQr" = (
/obj/machinery/light/small,
-/obj/machinery/vending/wardrobe/curator_wardrobe,
-/turf/open/floor/engine/cult,
+/obj/structure/table/wood/fancy,
+/turf/open/floor/carpet,
/area/library)
"aQs" = (
-/obj/structure/destructible/cult/tome,
-/obj/item/clothing/under/suit_jacket/red,
-/obj/item/book/codex_gigas,
-/turf/open/floor/engine/cult,
+/obj/structure/bed,
+/obj/item/bedsheet/black,
+/turf/open/floor/carpet,
/area/library)
"aQt" = (
-/obj/effect/landmark/blobstart,
-/obj/structure/chair/comfy/brown{
- dir = 1
- },
-/turf/open/floor/engine/cult,
-/area/library)
+/obj/structure/table,
+/obj/item/stack/cable_coil/random,
+/obj/item/stack/cable_coil/random,
+/obj/item/stack/cable_coil,
+/obj/item/paper_bin/construction,
+/obj/item/stack/cable_coil,
+/obj/item/pen/fourcolor,
+/turf/open/floor/plasteel,
+/area/storage/art)
"aQu" = (
/turf/open/floor/plasteel/chapel,
/area/chapel/main)
@@ -18491,37 +19147,67 @@
/area/crew_quarters/locker)
"aQO" = (
/obj/structure/closet/wardrobe/white,
+/obj/item/clothing/suit/ghost_sheet,
+/obj/item/clothing/suit/ghost_sheet,
+/obj/item/clothing/suit/ghost_sheet,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aQP" = (
-/obj/structure/reagent_dispensers/fueltank,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aQQ" = (
/obj/machinery/light_switch{
pixel_y = 28
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"aQQ" = (
-/obj/structure/reagent_dispensers/watertank,
+/obj/machinery/vending/cigarette,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aQR" = (
-/obj/machinery/vending/cola/random,
+/obj/machinery/camera{
+ c_tag = "Arrivals Bay 3 & 4";
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/landmark/start/assistant,
/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
+/area/hallway/secondary/entry)
"aQS" = (
/obj/machinery/vending/coffee,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aQT" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
+/obj/item/clothing/gloves/color/rainbow,
+/obj/item/clothing/head/soft/rainbow,
+/obj/item/clothing/shoes/sneakers/rainbow,
+/obj/item/clothing/under/color/rainbow,
+/turf/open/floor/plating,
+/area/maintenance/port/fore)
"aQU" = (
-/obj/machinery/vending/kink,
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
+/obj/structure/sign/poster/contraband/lizard{
+ pixel_x = -32
+ },
+/obj/structure/sign/poster/contraband/lizard{
+ pixel_x = -32
+ },
+/obj/structure/sign/poster/contraband/lizard{
+ pixel_x = -32
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"aQV" = (
-/obj/machinery/vending/clothing,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aQW" = (
@@ -18529,18 +19215,19 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aQX" = (
-/obj/machinery/firealarm{
- dir = 2;
- pixel_y = 24
+/obj/machinery/vending/clothing,
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aQY" = (
-/obj/structure/table,
-/obj/item/stack/cable_coil/random,
-/obj/item/stack/cable_coil/random,
+/obj/machinery/vending/autodrobe/all_access,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/open/floor/plasteel,
-/area/storage/art)
+/area/crew_quarters/locker)
"aQZ" = (
/obj/machinery/light/small{
dir = 4
@@ -18733,47 +19420,30 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aRu" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/chair/stool,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
-"aRv" = (
-/obj/structure/chair{
- dir = 1
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
-"aRw" = (
-/obj/structure/chair{
- dir = 1
- },
-/obj/effect/landmark/start/assistant,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
-"aRx" = (
-/obj/structure/chair{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/machinery/vending/kink,
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
},
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/fitness)
+"aRv" = (
+/obj/effect/landmark/blobstart,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"aRw" = (
+/obj/structure/fans/tiny/invisible,
+/turf/open/space/basic,
+/area/space)
+"aRx" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
"aRy" = (
/obj/structure/extinguisher_cabinet{
pixel_x = -5;
@@ -18792,7 +19462,9 @@
/turf/open/floor/plasteel,
/area/crew_quarters/bar)
"aRA" = (
-/obj/machinery/vending/dinnerware,
+/obj/machinery/vending/dinnerware{
+ contraband = list(/obj/item/kitchen/rollingpin = 2, /obj/item/kitchen/knife/butcher = 2, /obj/item/reagent_containers/food/condiment/flour = 4)
+ },
/turf/open/floor/plasteel/cafeteria,
/area/crew_quarters/kitchen)
"aRB" = (
@@ -18800,8 +19472,7 @@
pixel_y = 25
},
/obj/machinery/camera{
- c_tag = "Kitchen";
- dir = 2
+ c_tag = "Kitchen"
},
/obj/structure/closet/secure_closet/freezer/fridge,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -18872,9 +19543,9 @@
icon_state = "1-2"
},
/obj/machinery/power/apc{
+ areastring = "/area/library";
dir = 4;
name = "Library APC";
- areastring = "/area/library";
pixel_x = 24
},
/obj/structure/cable,
@@ -18917,7 +19588,7 @@
/area/library)
"aRR" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel/dark,
@@ -18942,13 +19613,13 @@
/area/hallway/secondary/exit)
"aRV" = (
/obj/machinery/power/apc{
+ areastring = "/area/storage/tools";
dir = 1;
name = "Auxiliary Tool Storage APC";
- areastring = "/area/storage/tools";
pixel_y = 24
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/cable{
@@ -18987,8 +19658,7 @@
pixel_y = 28
},
/obj/machinery/camera{
- c_tag = "Auxiliary Tool Storage";
- dir = 2
+ c_tag = "Auxiliary Tool Storage"
},
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty,
@@ -19009,7 +19679,7 @@
/area/storage/tools)
"aSd" = (
/obj/machinery/firealarm{
- dir = 2;
+ dir = 1;
pixel_y = -24
},
/turf/open/floor/plasteel,
@@ -19029,26 +19699,39 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aSh" = (
-/obj/structure/closet/wardrobe/mixed,
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_x = -27
+/obj/structure/table,
+/obj/item/storage/toolbox/artistic{
+ pixel_y = 10
+ },
+/obj/item/storage/toolbox/artistic,
+/obj/item/storage/toolbox/electrical{
+ pixel_y = -10
},
/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
+/area/storage/art)
"aSi" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
-"aSk" = (
-/obj/structure/table,
-/obj/item/stack/cable_coil/random,
-/obj/item/stack/cable_coil/random,
-/obj/item/stack/cable_coil,
-/obj/item/paper_bin/construction,
-/obj/item/stack/cable_coil,
+"aSj" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light,
/turf/open/floor/plasteel,
-/area/storage/art)
+/area/crew_quarters/dorms)
+"aSk" = (
+/obj/structure/table/wood,
+/obj/item/camera_film,
+/obj/item/camera_film,
+/obj/item/taperecorder,
+/obj/item/camera,
+/turf/open/floor/wood,
+/area/library)
"aSl" = (
/obj/machinery/light_switch{
pixel_y = 28
@@ -19064,36 +19747,50 @@
/turf/open/floor/plating,
/area/storage/emergency/port)
"aSo" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/trunk{
dir = 4
},
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
-"aSp" = (
-/obj/structure/chair/stool,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
-"aSq" = (
-/obj/structure/chair{
+/obj/machinery/disposal/bin,
+/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/light,
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/dorms)
+"aSp" = (
+/obj/structure/toilet{
+ dir = 4
+ },
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = 25
+ },
+/obj/machinery/button/door{
+ id = "Bath1";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 14;
+ pixel_y = 38;
+ specialfunctions = 4
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
+"aSq" = (
+/obj/machinery/door/airlock{
+ name = "Recharging Station"
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"aSr" = (
/turf/open/floor/plasteel,
/area/storage/tools)
@@ -19209,28 +19906,20 @@
/turf/open/floor/plasteel,
/area/crew_quarters/bar)
"aSG" = (
-/obj/structure/table/wood/poker,
-/obj/item/toy/cards/deck,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/structure/fireplace,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 23
},
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/turf/open/floor/plating,
+/area/maintenance/port)
"aSH" = (
-/obj/structure/chair/stool,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/turf/open/space,
+/area/solar/starboard/aft)
"aSI" = (
/obj/machinery/door/airlock/public/glass{
name = "Kitchen";
@@ -19311,13 +20000,17 @@
/turf/open/floor/plasteel/dark,
/area/hydroponics)
"aSS" = (
-/obj/machinery/seed_extractor,
-/turf/open/floor/plasteel,
-/area/hydroponics)
+/obj/structure/lattice/catwalk,
+/obj/structure/cable,
+/turf/open/space,
+/area/solar/starboard/aft)
"aST" = (
-/obj/machinery/biogenerator,
-/turf/open/floor/plasteel,
-/area/hydroponics)
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/space,
+/area/solar/starboard/aft)
"aSU" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
@@ -19339,25 +20032,19 @@
/turf/open/floor/plasteel,
/area/storage/tools)
"aSX" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+/obj/machinery/vending/kink,
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
-"aSY" = (
-/obj/structure/table/reinforced,
-/obj/item/clothing/head/that{
- throwforce = 1
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/locker)
+"aSY" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/space,
+/area/solar/starboard/aft)
"aSZ" = (
/obj/effect/landmark/start/bartender,
/obj/effect/turf_decal/tile/bar,
@@ -19366,6 +20053,13 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/bar)
+"aTa" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/space,
+/area/solar/starboard/aft)
"aTb" = (
/obj/machinery/newscaster{
pixel_y = 32
@@ -19374,9 +20068,7 @@
/area/library)
"aTc" = (
/obj/machinery/door/window/northright{
- base_state = "right";
dir = 8;
- icon_state = "right";
name = "Library Desk Door";
req_access_txt = "37"
},
@@ -19472,6 +20164,20 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/exit)
+"aTp" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space,
+/area/solar/port/fore)
+"aTq" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space,
+/area/solar/starboard/fore)
"aTr" = (
/obj/machinery/door/firedoor,
/obj/machinery/status_display{
@@ -19503,17 +20209,25 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aTw" = (
-/obj/structure/closet/wardrobe/green,
-/obj/machinery/light{
- dir = 8
+/obj/structure/closet/wardrobe/mixed,
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = -27
},
+/obj/item/clothing/head/beret,
+/obj/item/clothing/head/beret,
+/obj/item/clothing/head/russobluecamohat,
+/obj/item/clothing/head/russobluecamohat,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aTx" = (
-/obj/structure/chair/stool{
- pixel_y = 8
+/obj/machinery/firealarm{
+ pixel_y = 24
},
-/obj/effect/landmark/start/assistant,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/vending/games,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aTy" = (
@@ -19521,45 +20235,71 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aTz" = (
-/obj/structure/table,
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"aTA" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -2;
- pixel_y = -1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"aTB" = (
/obj/structure/chair/stool{
pixel_y = 8
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
-"aTC" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -2;
- pixel_y = -1
+"aTA" = (
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
},
-/obj/structure/disposalpipe/segment,
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
+"aTB" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/structure/window{
+ dir = 1
+ },
+/obj/structure/window{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
+"aTC" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/structure/window{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aTD" = (
-/obj/structure/closet/secure_closet/personal,
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
+/obj/effect/turf_decal/tile/red{
+ dir = 1
},
-/obj/machinery/camera{
- c_tag = "Locker Room East";
- dir = 8
- },
-/obj/machinery/light{
+/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/window{
+ dir = 1
+ },
+/obj/structure/window{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aTE" = (
@@ -19603,6 +20343,12 @@
/area/storage/emergency/port)
"aTL" = (
/obj/structure/table,
+/obj/item/storage/toolbox/artistic{
+ icon_state = "yellow";
+ item_state = "toolbox_yellow";
+ name = "Cable Toolbox";
+ pixel_y = 6
+ },
/obj/item/storage/toolbox/emergency,
/turf/open/floor/plasteel,
/area/storage/tools)
@@ -19612,10 +20358,15 @@
/turf/open/floor/plasteel/cafeteria,
/area/crew_quarters/kitchen)
"aTN" = (
-/obj/structure/table,
-/obj/item/kitchen/rollingpin,
-/turf/open/floor/plasteel/cafeteria,
-/area/crew_quarters/kitchen)
+/obj/machinery/vending/dinnerware{
+ contraband = list(/obj/item/reagent_containers/food/condiment/flour = 4);
+ desc = "This vendor is full of condiments to put on food.";
+ name = "\improper Condiments Vendor";
+ product_ads = "Get your sauces here!;No slave labour was used to make these products!;Nanotrasen Approved?!";
+ products = list(/obj/item/storage/bag/tray = 8, /obj/item/reagent_containers/food/drinks/drinkingglass = 10, /obj/item/storage/box/cups = 5, /obj/item/reagent_containers/food/condiment/pack/ketchup = 20, /obj/item/reagent_containers/food/condiment/pack/mustard = 20, /obj/item/reagent_containers/food/condiment/pack/hotsauce = 20, /obj/item/reagent_containers/food/condiment/pack/astrotame = 20, /obj/item/reagent_containers/food/condiment/saltshaker = 20, /obj/item/reagent_containers/food/condiment/peppermill = 20)
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aTO" = (
/obj/structure/table,
/obj/item/book/manual/chef_recipes,
@@ -19735,28 +20486,19 @@
/turf/open/floor/plasteel,
/area/bridge)
"aUf" = (
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -22
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-4"
},
-/obj/machinery/camera{
- c_tag = "Bar West";
- dir = 4
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/turf/open/space,
+/area/solar/port/aft)
"aUg" = (
-/obj/structure/chair,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/turf/open/space,
+/area/solar/port/aft)
"aUh" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/eastleft{
@@ -19781,15 +20523,28 @@
/turf/open/floor/plasteel/dark,
/area/hydroponics)
"aUj" = (
-/obj/machinery/vending/hydronutrients,
-/turf/open/floor/plasteel,
-/area/hydroponics)
-"aUk" = (
-/obj/machinery/vending/hydroseeds{
- slogan_delay = 700
+/obj/item/soap,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/light/small{
+ dir = 1;
+ light_color = "#ffc1c1"
},
-/turf/open/floor/plasteel,
-/area/hydroponics)
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet)
+"aUk" = (
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/green,
+/obj/machinery/camera{
+ c_tag = "VR Sleepers";
+ dir = 1
+ },
+/obj/machinery/light/small,
+/turf/open/floor/plasteel/white/side{
+ dir = 1
+ },
+/area/crew_quarters/fitness)
"aUl" = (
/obj/structure/chair/office/dark{
dir = 8
@@ -19814,39 +20569,71 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aUp" = (
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/machinery/camera{
+ c_tag = "Locker Room East";
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 4
+ },
/obj/structure/table,
-/obj/item/clothing/head/soft/grey{
- pixel_x = -2;
- pixel_y = 3
+/obj/item/reagent_containers/rag/towel/random,
+/obj/item/razor,
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
+"aUq" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"aUq" = (
-/obj/structure/table,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/structure/window{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
dir = 4
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aUr" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/obj/effect/landmark/start/assistant,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aUs" = (
-/obj/structure/table,
-/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aUt" = (
@@ -19856,12 +20643,27 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aUu" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/window{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aUv" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
@@ -19908,10 +20710,17 @@
/turf/open/floor/wood,
/area/library)
"aUC" = (
-/obj/structure/chair/comfy/black,
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/wood,
-/area/library)
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/effect/landmark/start/mime,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/crew_quarters/theatre)
"aUD" = (
/obj/structure/table/wood,
/obj/item/flashlight/lamp/green{
@@ -19963,6 +20772,15 @@
dir = 1
},
/area/chapel/main)
+"aUL" = (
+/obj/machinery/computer/arcade,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/hallway/secondary/exit)
"aUM" = (
/obj/machinery/camera{
c_tag = "Arrivals Bay 2";
@@ -19981,11 +20799,29 @@
/turf/open/floor/wood,
/area/security/vacantoffice)
"aUP" = (
-/obj/machinery/airalarm{
- pixel_y = 23
+/obj/structure/toilet{
+ dir = 4
},
-/turf/open/floor/wood,
-/area/security/vacantoffice)
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = 25
+ },
+/obj/machinery/button/door{
+ id = "Bath2";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 14;
+ pixel_y = 38;
+ specialfunctions = 4
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"aUQ" = (
/obj/structure/table/wood,
/turf/open/floor/wood,
@@ -20009,18 +20845,29 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aUU" = (
-/obj/structure/closet/wardrobe/grey,
-/obj/machinery/requests_console{
- department = "Locker Room";
- pixel_x = -32
+/obj/structure/closet/wardrobe/green,
+/obj/machinery/light{
+ dir = 8
},
+/obj/item/clothing/under/kilt,
+/obj/item/clothing/under/kilt,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aUV" = (
-/obj/structure/chair/stool{
- pixel_y = 8
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/machinery/door/window/westright{
+ name = "Red Corner"
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
dir = 4
},
/turf/open/floor/plasteel,
@@ -20037,17 +20884,29 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aUY" = (
-/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aUZ" = (
-/obj/structure/closet/secure_closet/personal,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
+/obj/structure/table,
+/obj/item/clothing/gloves/boxing/yellow,
+/obj/item/clothing/gloves/boxing/green,
+/obj/item/clothing/gloves/boxing/blue,
+/obj/item/clothing/gloves/boxing/blue,
+/obj/item/clothing/gloves/boxing,
+/obj/item/clothing/gloves/boxing,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aVa" = (
@@ -20125,9 +20984,9 @@
/area/bridge)
"aVh" = (
/obj/machinery/power/apc{
+ areastring = "/area/hallway/primary/fore";
dir = 8;
name = "Fore Primary Hallway APC";
- areastring = "/area/hallway/primary/fore";
pixel_x = -24
},
/obj/structure/cable{
@@ -20292,8 +21151,7 @@
/area/hallway/primary/central)
"aVv" = (
/obj/machinery/camera{
- c_tag = "Bridge East Entrance";
- dir = 2
+ c_tag = "Bridge East Entrance"
},
/obj/effect/turf_decal/tile/blue{
dir = 1
@@ -20304,40 +21162,42 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aVw" = (
-/obj/structure/table/wood/poker,
-/obj/item/clothing/mask/cigarette/cigar,
-/obj/item/toy/cards/deck,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/obj/effect/landmark/carpspawn,
+/turf/open/space/basic,
+/area/space)
"aVx" = (
-/obj/machinery/holopad,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/fitness)
"aVy" = (
-/obj/structure/table/reinforced,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/table,
+/obj/item/storage/firstaid/regular{
+ pixel_y = 5
},
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/fitness)
"aVz" = (
/turf/open/floor/plasteel/cafeteria,
/area/crew_quarters/kitchen)
"aVA" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/firedoor,
-/obj/item/reagent_containers/food/snacks/pie/cream,
-/turf/open/floor/plasteel/cafeteria,
-/area/crew_quarters/kitchen)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/crew_quarters/theatre)
"aVB" = (
/obj/structure/table,
/obj/item/reagent_containers/food/condiment/enzyme{
@@ -20357,15 +21217,18 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aVD" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/condiment/saltshaker{
- pixel_x = -3
+/obj/machinery/door/airlock/maintenance{
+ name = "Theatre Maintenance";
+ req_access_txt = "46"
},
-/obj/item/reagent_containers/food/condiment/peppermill{
- pixel_x = 3
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/open/floor/plasteel/cafeteria,
-/area/crew_quarters/kitchen)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/theatre)
"aVE" = (
/obj/structure/table,
/obj/item/storage/box/donkpockets{
@@ -20381,10 +21244,18 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/cafeteria,
/area/crew_quarters/kitchen)
+"aVG" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/obj/structure/table,
+/obj/item/coin/gold,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"aVH" = (
/obj/machinery/processor,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/cafeteria,
@@ -20406,9 +21277,14 @@
/turf/open/floor/plasteel/dark,
/area/hydroponics)
"aVK" = (
-/obj/effect/landmark/start/botanist,
-/turf/open/floor/plasteel,
-/area/hydroponics)
+/obj/machinery/shower{
+ dir = 4
+ },
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet)
"aVL" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -20451,10 +21327,9 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"aVP" = (
-/obj/structure/table/wood,
-/obj/item/paper,
-/turf/open/floor/wood,
-/area/library)
+/obj/machinery/vending/autodrobe/all_access,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"aVQ" = (
/obj/structure/chair/comfy/black{
dir = 8
@@ -20463,27 +21338,32 @@
/area/library)
"aVR" = (
/obj/structure/table/wood,
-/obj/item/pen/red,
-/obj/item/pen/blue{
- pixel_x = 5;
- pixel_y = 5
+/obj/item/paper_bin/bundlenatural{
+ pixel_x = 6;
+ pixel_y = 4
},
+/obj/item/paper_bin{
+ pixel_x = -6;
+ pixel_y = 4
+ },
+/obj/item/pen/fountain,
+/obj/item/pen/fourcolor,
/turf/open/floor/wood,
/area/library)
"aVS" = (
/obj/structure/table/wood,
-/obj/item/camera_film,
-/obj/item/camera_film,
+/obj/item/pen/red,
/turf/open/floor/wood,
/area/library)
"aVT" = (
/obj/structure/table/wood,
-/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
+/obj/item/reagent_containers/food/drinks/bottle/whiskey{
+ pixel_x = 3
},
-/turf/open/floor/wood,
-/area/library)
+/obj/item/lighter,
+/obj/item/restraints/handcuffs,
+/turf/open/floor/carpet,
+/area/security/detectives_office)
"aVU" = (
/obj/structure/chair/stool,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -20584,6 +21464,7 @@
/area/chapel/main)
"aWh" = (
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
+/obj/item/beacon,
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
"aWi" = (
@@ -20626,6 +21507,14 @@
"aWn" = (
/obj/structure/closet/wardrobe/black,
/obj/item/clothing/shoes/jackboots,
+/obj/item/clothing/under/janimaid,
+/obj/item/clothing/under/janimaid,
+/obj/item/clothing/under/maid,
+/obj/item/clothing/under/maid,
+/obj/item/clothing/accessory/maidapron,
+/obj/item/clothing/accessory/maidapron,
+/obj/item/clothing/head/beret/black,
+/obj/item/clothing/head/beret/black,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aWo" = (
@@ -20686,9 +21575,9 @@
/area/maintenance/port)
"aWw" = (
/obj/machinery/power/apc{
+ areastring = "/area/storage/art";
dir = 1;
name = "Art Storage";
- areastring = "/area/storage/art";
pixel_y = 24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -20718,9 +21607,9 @@
/area/crew_quarters/toilet/locker)
"aWz" = (
/obj/machinery/power/apc{
+ areastring = "/area/storage/emergency/port";
dir = 1;
name = "Port Emergency Storage APC";
- areastring = "/area/storage/emergency/port";
pixel_y = 24
},
/obj/structure/cable{
@@ -20738,9 +21627,21 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aWB" = (
-/obj/structure/reagent_dispensers/fueltank,
-/turf/open/floor/plating,
-/area/maintenance/port)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
"aWC" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -20968,9 +21869,8 @@
/area/bridge)
"aWW" = (
/obj/machinery/power/apc/highcap/five_k{
- dir = 2;
- name = "Bridge APC";
areastring = "/area/bridge";
+ name = "Bridge APC";
pixel_y = -24
},
/obj/structure/cable,
@@ -21121,51 +22021,51 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aXi" = (
-/obj/machinery/light{
+/obj/machinery/vending/clothing,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"aXj" = (
+/obj/structure/reagent_dispensers/water_cooler,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/machinery/computer/security/telescreen/entertainment{
- pixel_x = -31
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
-"aXj" = (
-/obj/structure/table/reinforced,
-/obj/item/lighter,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/dorms)
"aXk" = (
-/obj/structure/table/reinforced,
-/obj/machinery/computer/security/telescreen/entertainment{
- pixel_x = 32
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/obj/item/book/manual/wiki/barman_recipes,
-/obj/item/reagent_containers/rag,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/machinery/door/window/eastleft{
+ name = "Blue Corner"
+ },
+/obj/effect/turf_decal/tile/blue{
dir = 1
},
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/locker)
"aXl" = (
-/obj/machinery/door/window/southright{
- name = "Bar Door";
- req_one_access_txt = "25;28"
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/structure/disposalpipe/junction,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
},
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/dorms)
"aXm" = (
/obj/effect/landmark/start/cook,
/turf/open/floor/plasteel/cafeteria,
@@ -21201,29 +22101,33 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"aXr" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aXs" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk{
- dir = 4
+/obj/machinery/door/airlock/maintenance{
+ name = "Detective Maintenance";
+ req_access_txt = "4"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port)
"aXt" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 2
+/obj/machinery/power/apc{
+ areastring = "/area/security/detectives_office";
+ dir = 4;
+ name = "Detective's Office APC";
+ pixel_x = 24
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-21";
- pixel_x = -3;
- pixel_y = 3
+/obj/structure/cable{
+ icon_state = "0-8"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
+/turf/open/floor/plasteel/grimy,
+/area/security/detectives_office)
"aXu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -21231,20 +22135,45 @@
/turf/open/floor/carpet,
/area/library)
"aXv" = (
-/obj/structure/disposalpipe/segment{
- dir = 9
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/structure/window{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aXw" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aXx" = (
-/obj/structure/closet/secure_closet/personal,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aXy" = (
@@ -21265,10 +22194,19 @@
/turf/open/floor/carpet,
/area/chapel/main)
"aXA" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/corner{
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/window{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
dir = 1
},
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aXB" = (
@@ -21302,19 +22240,24 @@
/turf/closed/wall,
/area/quartermaster/warehouse)
"aXF" = (
-/obj/effect/landmark/event_spawn,
-/obj/effect/turf_decal/tile/neutral{
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/obj/item/paper_bin/bundlenatural{
+ pixel_x = 6;
+ pixel_y = 4
},
-/obj/effect/turf_decal/tile/neutral{
+/obj/item/pen/fountain{
+ pixel_x = 6
+ },
+/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
+/obj/item/pen/fourcolor,
+/turf/open/floor/plasteel,
+/area/crew_quarters/bar)
"aXG" = (
/obj/machinery/light{
dir = 4
@@ -21327,6 +22270,10 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
+"aXH" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aXI" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
@@ -21376,15 +22323,16 @@
/turf/open/floor/wood,
/area/security/vacantoffice)
"aXO" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
},
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/dorms)
"aXP" = (
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/plating,
@@ -21464,9 +22412,9 @@
/area/security/vacantoffice)
"aYa" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/port";
dir = 8;
name = "Port Maintenance APC";
- areastring = "/area/maintenance/port";
pixel_x = -27;
pixel_y = 2
},
@@ -21495,12 +22443,12 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aYc" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
/turf/closed/wall,
/area/quartermaster/warehouse)
"aYd" = (
@@ -21532,19 +22480,17 @@
/area/construction)
"aYh" = (
/obj/structure/disposalpipe/segment{
- dir = 4
+ dir = 10
},
-/obj/machinery/light/small{
- dir = 4
+/obj/machinery/button/door{
+ id = "kanyewest";
+ name = "Privacy Shutters";
+ pixel_y = 24
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
+/obj/structure/rack,
+/obj/item/storage/briefcase,
+/turf/open/floor/plasteel/grimy,
+/area/security/detectives_office)
"aYi" = (
/obj/structure/closet/secure_closet/detective,
/obj/structure/disposalpipe/segment{
@@ -21556,15 +22502,8 @@
/turf/open/floor/plasteel/grimy,
/area/security/detectives_office)
"aYj" = (
-/obj/structure/table/wood,
-/obj/item/taperecorder,
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/button/door{
- id = "kanyewest";
- name = "Privacy Shutters";
- pixel_y = 24
+/obj/machinery/light/small{
+ dir = 8
},
/turf/open/floor/plasteel/grimy,
/area/security/detectives_office)
@@ -21761,9 +22700,8 @@
/area/hallway/primary/central)
"aYF" = (
/obj/machinery/power/apc{
- dir = 2;
- name = "Central Hall APC";
areastring = "/area/hallway/primary/central";
+ name = "Central Hall APC";
pixel_y = -24
},
/obj/structure/cable,
@@ -21781,28 +22719,24 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aYH" = (
-/obj/structure/table,
-/obj/item/razor,
-/obj/structure/window{
- dir = 1
+/obj/structure/table/wood,
+/obj/item/paper/fluff{
+ info = "Renovation Notice
The bar layout for the station is very old. We've decided to give it a facelift after our partnership with IKEA Intergalactic?.
We added some sweet retro arcade machines and much more seating area. We removed the stage since it hasn't ever been used.You can run this place like a restaurant now that you have tables. Go whip up a menu with the Chef. You have a condiments table and your Requests Console has been moved so a noticeboard can be placed there. Take tickets from customers and pin them on the noticeboard for the Chef.We hope you like the new bar! b>";
+ name = "Renovation Notice - Bar";
+ pixel_x = -5;
+ pixel_y = 3
},
-/obj/effect/turf_decal/tile/blue{
+/obj/item/reagent_containers/food/drinks/shaker,
+/obj/item/stack/spacecash/c100,
+/obj/item/stack/spacecash/c100,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aYI" = (
+/obj/structure/chair/comfy/black{
dir = 4
},
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/crew_quarters/locker)
-"aYI" = (
-/obj/structure/chair/stool/bar,
-/obj/effect/landmark/start/assistant,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/dorms)
"aYJ" = (
/obj/machinery/light_switch{
pixel_y = -25
@@ -21850,9 +22784,9 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aYP" = (
-/obj/structure/reagent_dispensers/watertank/high,
+/obj/structure/table/wood/poker,
/turf/open/floor/plasteel,
-/area/hydroponics)
+/area/crew_quarters/dorms)
"aYQ" = (
/obj/machinery/hydroponics/constructable,
/obj/effect/turf_decal/tile/green{
@@ -21869,25 +22803,24 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aYS" = (
-/obj/structure/closet,
-/obj/item/clothing/under/suit_jacket/female{
- pixel_x = 3;
- pixel_y = 1
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1;
+ pixel_x = 5
},
-/obj/item/clothing/under/suit_jacket/really_black{
- pixel_x = -2
- },
-/obj/structure/window{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
+/obj/machinery/light/small{
dir = 4
},
-/obj/effect/turf_decal/tile/blue{
- dir = 8
+/obj/structure/table/glass,
+/obj/item/razor{
+ pixel_x = 2;
+ pixel_y = 3
},
-/turf/open/floor/plasteel/cafeteria,
-/area/crew_quarters/locker)
+/obj/item/reagent_containers/rag/towel/random,
+/obj/item/reagent_containers/rag/towel/random,
+/obj/item/reagent_containers/rag/towel/random,
+/obj/item/reagent_containers/rag/towel/random,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"aYT" = (
/obj/machinery/camera{
c_tag = "Hydroponics South";
@@ -21907,11 +22840,17 @@
/turf/open/floor/carpet,
/area/library)
"aYX" = (
-/obj/structure/window/reinforced{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/turf/open/floor/plasteel,
@@ -21923,16 +22862,15 @@
/turf/open/floor/carpet,
/area/library)
"aYZ" = (
-/obj/structure/table/wood,
-/obj/item/storage/box/evidence,
-/obj/item/hand_labeler{
- pixel_x = 5
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
},
-/obj/structure/disposalpipe/segment{
- dir = 4
+/obj/structure/closet/crate/freezer,
+/obj/machinery/light/small{
+ dir = 8
},
-/turf/open/floor/plasteel/grimy,
-/area/security/detectives_office)
+/turf/open/floor/plasteel,
+/area/quartermaster/warehouse)
"aZa" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
@@ -21940,16 +22878,10 @@
/turf/open/floor/plasteel/grimy,
/area/security/detectives_office)
"aZb" = (
-/obj/machinery/camera{
- c_tag = "Bar South";
- dir = 1
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
+/obj/structure/table/wood/poker,
+/obj/item/toy/cards/deck,
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/dorms)
"aZc" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -22040,15 +22972,14 @@
/turf/open/floor/wood,
/area/security/vacantoffice)
"aZo" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet/locker)
+/turf/open/floor/plasteel/grimy,
+/area/security/detectives_office)
"aZp" = (
/obj/structure/rack,
/obj/item/electronics/apc,
@@ -22083,41 +23014,77 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aZt" = (
-/obj/structure/toilet{
- pixel_y = 8
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1;
+ pixel_x = 5
},
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet/locker)
+/obj/machinery/light/small,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"aZu" = (
/obj/machinery/photocopier,
/turf/open/floor/wood,
/area/bridge/meeting_room)
"aZv" = (
-/obj/machinery/door/airlock{
- name = "Unit 1"
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = 24
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet/locker)
-"aZw" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet/locker)
-"aZx" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
+/obj/structure/table,
+/obj/machinery/chem_dispenser/drinks/beer{
dir = 8
},
-/turf/open/floor/plasteel/cafeteria,
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/bar)
+"aZw" = (
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/machinery/requests_console{
+ department = "Bar";
+ departmentType = 2;
+ pixel_x = -30;
+ pixel_y = 45;
+ receive_ore_updates = 1
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/bar)
+"aZx" = (
+/obj/structure/closet{
+ name = "Suit Closet"
+ },
+/obj/item/clothing/under/suit_jacket/white,
+/obj/item/clothing/under/suit_jacket/tan,
+/obj/item/clothing/under/suit_jacket/red,
+/obj/item/clothing/under/suit_jacket/really_black,
+/obj/item/clothing/under/suit_jacket/navy,
+/obj/item/clothing/under/suit_jacket/green,
+/obj/item/clothing/under/suit_jacket/female,
+/obj/item/clothing/under/suit_jacket/checkered,
+/obj/item/clothing/under/suit_jacket/charcoal,
+/obj/item/clothing/under/suit_jacket/burgundy,
+/obj/item/clothing/under/suit_jacket,
+/obj/item/clothing/under/lawyer/black,
+/obj/item/clothing/under/lawyer/blacksuit,
+/obj/item/clothing/under/lawyer/blue,
+/obj/item/clothing/under/lawyer/bluesuit,
+/obj/item/clothing/under/lawyer/female,
+/obj/item/clothing/under/lawyer/purpsuit,
+/obj/item/clothing/under/lawyer/really_black,
+/obj/item/clothing/under/lawyer/red,
+/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aZy" = (
/obj/machinery/camera{
- c_tag = "Conference Room";
- dir = 2
+ c_tag = "Conference Room"
},
/turf/open/floor/wood,
/area/bridge/meeting_room)
@@ -22278,53 +23245,50 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aZZ" = (
-/obj/machinery/vending/cigarette,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"baa" = (
+/obj/structure/chair/comfy/brown{
dir = 1
},
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/dorms)
"bab" = (
-/obj/machinery/light,
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
+/obj/structure/chair/comfy/black{
dir = 1
},
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/dorms)
"bac" = (
-/obj/machinery/newscaster{
- pixel_y = -28
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
},
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/cable{
+ icon_state = "4-8"
},
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/dorms)
"bad" = (
-/obj/machinery/light,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/obj/structure/rack,
+/obj/item/tank/internals/emergency_oxygen,
+/obj/item/tank/internals/emergency_oxygen,
+/obj/item/clothing/mask/breath,
+/obj/item/clothing/mask/breath,
+/obj/effect/decal/cleanable/cobweb,
+/obj/item/clothing/under/color/grey,
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"bae" = (
-/obj/structure/noticeboard{
- pixel_y = -27
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/structure/disposalpipe/segment{
+ dir = 5
},
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"baf" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -22338,28 +23302,29 @@
/turf/open/floor/wood,
/area/crew_quarters/heads/captain)
"bag" = (
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
+/obj/structure/disposalpipe/segment{
+ dir = 10
},
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"bah" = (
-/obj/structure/extinguisher_cabinet{
- pixel_y = -30
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "12"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"bai" = (
-/obj/machinery/light/small,
+/obj/machinery/camera{
+ c_tag = "Bar";
+ dir = 8
+ },
+/obj/structure/table,
+/obj/machinery/chem_dispenser/drinks{
+ dir = 8
+ },
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
dir = 1
@@ -22392,7 +23357,7 @@
pixel_y = 2
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel,
@@ -22455,10 +23420,9 @@
/turf/open/floor/wood,
/area/library)
"bat" = (
-/obj/structure/table/wood,
-/obj/item/pen,
-/turf/open/floor/wood,
-/area/library)
+/obj/structure/reagent_dispensers/keg/semen,
+/turf/open/floor/plating,
+/area/maintenance/bar)
"bau" = (
/obj/structure/chair/comfy/black{
dir = 4
@@ -22476,15 +23440,16 @@
/turf/open/floor/wood,
/area/library)
"baw" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
+/obj/structure/table/reinforced,
+/obj/machinery/door/firedoor,
+/obj/item/reagent_containers/food/snacks/pie/cream,
+/obj/structure/noticeboard{
+ desc = "Tickets for food orders will be placed here. The Chef should make the order and hand it to a waiter, waitress or just let the barkeep serve it.";
+ name = "Food Orders";
+ pixel_y = 26
},
-/obj/structure/mirror{
- pixel_x = 28
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet/locker)
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/kitchen)
"bax" = (
/obj/structure/chair/comfy/black{
dir = 4
@@ -22523,9 +23488,9 @@
/area/hallway/secondary/exit)
"baD" = (
/obj/machinery/power/apc{
+ areastring = "/area/hallway/secondary/exit";
dir = 8;
name = "Escape Hallway APC";
- areastring = "/area/hallway/secondary/exit";
pixel_x = -25
},
/obj/structure/cable{
@@ -22598,9 +23563,9 @@
icon_state = "1-2"
},
/obj/machinery/power/apc{
+ areastring = "/area/crew_quarters/toilet/locker";
dir = 4;
name = "Locker Restrooms APC";
- areastring = "/area/crew_quarters/toilet/locker";
pixel_x = 27;
pixel_y = 2
},
@@ -22616,8 +23581,28 @@
/turf/open/floor/plating,
/area/maintenance/port)
"baO" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/freezer,
+/obj/structure/toilet{
+ dir = 4
+ },
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = 25
+ },
+/obj/machinery/button/door{
+ id = "LockerShitter1";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 14;
+ pixel_y = 38;
+ specialfunctions = 4
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/blue,
/area/crew_quarters/toilet/locker)
"baP" = (
/obj/structure/table/wood,
@@ -22808,24 +23793,28 @@
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet/locker)
"bbr" = (
-/obj/machinery/camera{
- c_tag = "Locker Room South";
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/window,
+/obj/structure/window{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"bbs" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/machinery/light,
+/obj/effect/landmark/event_spawn,
+/obj/effect/landmark/xmastree,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"bbt" = (
/obj/structure/closet/crate,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -22833,9 +23822,9 @@
/area/quartermaster/warehouse)
"bbu" = (
/obj/machinery/power/apc{
+ areastring = "/area/crew_quarters/heads/captain";
dir = 1;
name = "Captain's Office APC";
- areastring = "/area/crew_quarters/heads/captain";
pixel_y = 24
},
/obj/structure/cable{
@@ -22863,7 +23852,7 @@
/obj/machinery/door/airlock/public/glass{
name = "Diner"
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/dark,
/area/crew_quarters/bar)
"bby" = (
/obj/structure/sign/barsign,
@@ -22875,14 +23864,14 @@
},
/area/hallway/primary/starboard)
"bbA" = (
-/obj/machinery/camera{
- c_tag = "Starboard Primary Hallway 2";
- dir = 2
+/obj/machinery/vending/assist,
+/obj/structure/sign/poster/contraband/grey_tide{
+ desc = "A poster promoting a regression to ape-like intelligence for Assistants, suggesting they break, loot and murder enough to make even a caveman blush.";
+ pixel_x = -32;
+ poster_item_desc = "Nanotrasen does not condone such messages. Please don't regress to ape-level intelligence as this poster suggests."
},
-/turf/open/floor/plasteel/white/corner{
- dir = 1
- },
-/area/hallway/primary/starboard)
+/turf/open/floor/plasteel,
+/area/storage/primary)
"bbB" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -22912,7 +23901,7 @@
/area/chapel/main)
"bbG" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/red{
@@ -22931,9 +23920,9 @@
/area/hallway/secondary/exit)
"bbI" = (
/obj/machinery/power/apc{
+ areastring = "/area/security/vacantoffice";
dir = 8;
name = "Vacant Office APC";
- areastring = "/area/security/vacantoffice";
pixel_x = -24
},
/obj/structure/cable{
@@ -22960,9 +23949,10 @@
/area/maintenance/port)
"bbL" = (
/obj/machinery/door/airlock{
- name = "Unit 2"
+ id_tag = "LockerShitter1";
+ name = "Unit 1"
},
-/turf/open/floor/plasteel/freezer,
+/turf/open/floor/mineral/titanium/blue,
/area/crew_quarters/toilet/locker)
"bbM" = (
/obj/item/book/manual/wiki/security_space_law,
@@ -22970,16 +23960,20 @@
/turf/open/floor/carpet,
/area/bridge/meeting_room)
"bbN" = (
-/obj/machinery/washing_machine,
-/obj/machinery/light,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
+/obj/machinery/button/door{
+ id = "Bath3";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 14;
+ pixel_y = 38;
+ specialfunctions = 4
},
-/obj/effect/turf_decal/tile/blue{
+/obj/machinery/light/small{
dir = 8
},
-/turf/open/floor/plasteel/cafeteria,
-/area/crew_quarters/locker)
+/obj/machinery/recharge_station,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"bbO" = (
/obj/machinery/washing_machine,
/obj/effect/turf_decal/tile/blue{
@@ -22997,13 +23991,20 @@
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
"bbQ" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/drinks/bottle/whiskey{
- pixel_x = 3
+/obj/item/paper_bin/bundlenatural{
+ pixel_x = 6;
+ pixel_y = 4
},
-/obj/item/lighter,
-/turf/open/floor/carpet,
-/area/security/detectives_office)
+/obj/item/paper_bin{
+ pixel_x = -6;
+ pixel_y = 4
+ },
+/obj/item/pen/fountain,
+/obj/structure/table,
+/obj/item/pen/fourcolor,
+/obj/item/stamp/hop,
+/turf/open/floor/plasteel,
+/area/crew_quarters/heads/hop)
"bbR" = (
/turf/open/floor/plasteel,
/area/quartermaster/office)
@@ -23020,15 +24021,22 @@
/turf/open/floor/carpet,
/area/security/detectives_office)
"bbU" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Detective Maintenance";
- req_access_txt = "4"
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
},
-/turf/open/floor/plating,
-/area/maintenance/port)
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/window,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
"bbV" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel,
@@ -23181,31 +24189,46 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bcr" = (
-/obj/machinery/camera{
- c_tag = "Starboard Primary Hallway";
- dir = 2
+/obj/machinery/smartfridge/disks{
+ pixel_y = 2
+ },
+/obj/structure/table,
+/obj/item/radio/intercom{
+ pixel_y = 25
},
/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
+/area/hydroponics)
"bcs" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bct" = (
-/obj/effect/landmark/xeno_spawn,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/obj/structure/mirror{
+ pixel_x = 28
+ },
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet/locker)
"bcu" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Locker Room Maintenance";
- req_access_txt = "12"
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
-/area/maintenance/port)
+/obj/structure/window,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
"bcv" = (
/obj/structure/extinguisher_cabinet{
pixel_x = -5;
@@ -23214,13 +24237,26 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bcw" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall,
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/structure/window,
+/obj/structure/window{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"bcx" = (
/obj/machinery/camera{
- c_tag = "Starboard Primary Hallway 5";
- dir = 2
+ c_tag = "Starboard Primary Hallway 5"
},
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
@@ -23293,12 +24329,13 @@
/turf/open/floor/plating,
/area/maintenance/port)
"bcJ" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
+/obj/machinery/door/airlock{
+ desc = "To keep the station within regulations, space IKEA requires one storage cupboard for their Nanotrasen partnership to continue.";
+ id_tag = "MaintDorm1";
+ name = "Furniture Storage"
},
-/obj/structure/closet/crate/freezer,
-/turf/open/floor/plasteel,
-/area/quartermaster/warehouse)
+/turf/open/floor/plasteel/dark,
+/area/maintenance/port)
"bcK" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance,
@@ -23326,12 +24363,21 @@
/turf/open/floor/carpet,
/area/bridge/meeting_room)
"bcO" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet/locker)
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/theatre)
"bcP" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
@@ -23351,21 +24397,20 @@
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
"bcS" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/effect/landmark/blobstart,
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet/locker)
+"bcT" = (
+/obj/structure/window/reinforced{
+ dir = 8
},
+/obj/machinery/light,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/light/small{
- dir = 4
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
/turf/open/floor/plasteel,
-/area/quartermaster/warehouse)
-"bcT" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/closed/wall,
-/area/quartermaster/warehouse)
+/area/crew_quarters/locker)
"bcU" = (
/obj/structure/table/wood,
/turf/open/floor/wood,
@@ -23379,6 +24424,14 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/grimy,
/area/security/detectives_office)
+"bcW" = (
+/obj/structure/table/wood,
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/wood,
+/area/security/vacantoffice)
"bcX" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -23410,18 +24463,14 @@
/area/bridge/meeting_room)
"bdb" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/white/side{
- dir = 2
- },
+/turf/open/floor/plasteel/white/side,
/area/hallway/primary/starboard)
"bdc" = (
/obj/structure/extinguisher_cabinet{
pixel_y = -30
},
/obj/machinery/light,
-/turf/open/floor/plasteel/white/corner{
- dir = 2
- },
+/turf/open/floor/plasteel/white/corner,
/area/hallway/primary/starboard)
"bdd" = (
/obj/machinery/vending/cola/random,
@@ -23655,11 +24704,32 @@
/turf/open/floor/plating,
/area/maintenance/port)
"bdE" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/structure/closet/crate/wooden/toy,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
dir = 8
},
-/turf/open/floor/plasteel/grimy,
-/area/security/detectives_office)
+/obj/structure/sign/poster/contraband/clown{
+ pixel_y = -32
+ },
+/obj/structure/sign/poster/contraband/clown{
+ pixel_y = -32
+ },
+/obj/structure/sign/poster/contraband/clown{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/theatre)
"bdF" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -23683,8 +24753,15 @@
/turf/open/floor/carpet,
/area/bridge/meeting_room)
"bdJ" = (
-/obj/machinery/door/airlock{
- name = "Unit 3"
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/structure/mirror{
+ pixel_x = 28
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet/locker)
@@ -23696,15 +24773,20 @@
/turf/open/floor/carpet,
/area/bridge/meeting_room)
"bdL" = (
-/obj/effect/landmark/blobstart,
-/obj/item/clothing/suit/ianshirt,
-/obj/structure/closet,
-/turf/open/floor/plating,
-/area/maintenance/port)
+/obj/machinery/camera{
+ c_tag = "Locker Room South";
+ dir = 8
+ },
+/obj/structure/closet/secure_closet/personal,
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
"bdM" = (
-/obj/item/latexballon,
-/turf/open/floor/plating,
-/area/maintenance/port)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/quartermaster/warehouse)
"bdN" = (
/obj/machinery/door/airlock/medical{
name = "Morgue";
@@ -23752,9 +24834,9 @@
/area/quartermaster/warehouse)
"bdT" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/disposal";
dir = 8;
name = "Disposal APC";
- areastring = "/area/maintenance/disposal";
pixel_x = -24
},
/obj/structure/cable{
@@ -23769,13 +24851,39 @@
/obj/structure/closet/crate/medical,
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
+"bdV" = (
+/obj/structure/toilet{
+ dir = 4
+ },
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = 25
+ },
+/obj/machinery/button/door{
+ id = "LockerShitter2";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 14;
+ pixel_y = 38;
+ specialfunctions = 4
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet/locker)
"bdW" = (
-/obj/item/clothing/gloves/color/rainbow,
-/obj/item/clothing/head/soft/rainbow,
-/obj/item/clothing/shoes/sneakers/rainbow,
-/obj/item/clothing/under/color/rainbow,
-/turf/open/floor/plating,
-/area/maintenance/port)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/quartermaster/warehouse)
"bdX" = (
/obj/item/storage/fancy/donut_box,
/obj/structure/table,
@@ -23835,9 +24943,8 @@
/area/ai_monitored/turret_protected/ai_upload)
"bed" = (
/obj/machinery/power/apc/highcap/five_k{
- dir = 2;
- name = "Upload APC";
areastring = "/area/ai_monitored/turret_protected/ai_upload";
+ name = "Upload APC";
pixel_y = -24
},
/obj/structure/cable,
@@ -23871,9 +24978,7 @@
/obj/item/aiModule/supplied/oxygen,
/obj/item/aiModule/zeroth/oneHuman,
/obj/machinery/door/window{
- base_state = "left";
dir = 8;
- icon_state = "left";
name = "High-Risk Modules";
req_access_txt = "20"
},
@@ -23991,12 +25096,12 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bev" = (
-/obj/machinery/light,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
+/obj/structure/chair/stool{
+ pixel_y = 8
},
-/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"bew" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -24087,9 +25192,7 @@
/area/quartermaster/sorting)
"beG" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
"beH" = (
@@ -24224,7 +25327,7 @@
layer = 2.9
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/table/reinforced,
@@ -24258,14 +25361,17 @@
/area/medical/morgue)
"beZ" = (
/obj/machinery/mineral/stacking_unit_console{
- dir = 2;
machinedir = 8
},
/turf/closed/wall,
/area/maintenance/disposal)
"bfa" = (
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet/locker)
+/obj/structure/chair/sofa/left{
+ dir = 1
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"bfb" = (
/obj/structure/sign/warning/vacuum/external{
pixel_y = 32
@@ -24278,9 +25384,9 @@
/area/chapel/main)
"bfc" = (
/obj/machinery/power/apc{
+ areastring = "/area/crew_quarters/locker";
dir = 1;
name = "Locker Room APC";
- areastring = "/area/crew_quarters/locker";
pixel_y = 24
},
/obj/structure/cable{
@@ -24299,9 +25405,17 @@
/turf/open/floor/plating,
/area/maintenance/port)
"bfe" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/turf/open/floor/plating,
-/area/maintenance/port)
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/window{
+ dir = 1
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/locker)
"bff" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
@@ -24343,9 +25457,8 @@
dir = 9
},
/obj/machinery/power/apc{
- dir = 2;
- name = "Cargo Bay APC";
areastring = "/area/quartermaster/storage";
+ name = "Cargo Bay APC";
pixel_x = 1;
pixel_y = -24
},
@@ -24531,9 +25644,8 @@
/area/hallway/primary/starboard)
"bfP" = (
/obj/machinery/power/apc{
- dir = 2;
- name = "Starboard Primary Hallway APC";
areastring = "/area/hallway/primary/starboard";
+ name = "Starboard Primary Hallway APC";
pixel_y = -24
},
/obj/structure/cable,
@@ -24681,13 +25793,17 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bgi" = (
-/obj/machinery/camera{
- c_tag = "Arrivals Bay 3 & 4";
- dir = 1
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/sign/poster/contraband/space_up{
+ pixel_y = -32
},
-/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
-/area/hallway/secondary/entry)
+/area/hallway/primary/central)
"bgj" = (
/obj/machinery/conveyor{
dir = 8;
@@ -24702,6 +25818,13 @@
},
/turf/open/floor/plating,
/area/maintenance/disposal)
+"bgl" = (
+/obj/machinery/door/airlock{
+ id_tag = "LockerShitter2";
+ name = "Unit 2"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet/locker)
"bgm" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -24723,9 +25846,9 @@
icon_state = "1-2"
},
/obj/machinery/power/apc{
+ areastring = "/area/science/robotics/mechbay";
dir = 4;
name = "Mech Bay APC";
- areastring = "/area/science/robotics/mechbay";
pixel_x = 26
},
/obj/structure/cable{
@@ -24752,18 +25875,16 @@
/turf/open/floor/plating,
/area/maintenance/port)
"bgr" = (
-/obj/machinery/door/airlock{
- name = "Unit 4"
+/obj/machinery/camera{
+ c_tag = "Locker Room Toilets";
+ dir = 8
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet/locker)
"bgs" = (
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet/locker)
+/obj/item/chair/wood,
+/turf/open/floor/plating,
+/area/maintenance/port)
"bgt" = (
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
@@ -24793,6 +25914,11 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/port)
+"bgx" = (
+/obj/structure/closet/wardrobe/cargotech,
+/obj/item/radio/headset/headset_cargo,
+/turf/open/floor/plasteel,
+/area/quartermaster/storage)
"bgy" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
@@ -24986,16 +26112,16 @@
/area/crew_quarters/heads/captain)
"bgY" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bgZ" = (
/obj/machinery/power/apc{
+ areastring = "/area/medical/chemistry";
dir = 1;
name = "Chemistry APC";
- areastring = "/area/medical/chemistry";
pixel_y = 24
},
/obj/structure/cable{
@@ -25019,11 +26145,9 @@
/area/medical/chemistry)
"bhc" = (
/obj/machinery/camera{
- c_tag = "Chemistry";
- dir = 2
+ c_tag = "Chemistry"
},
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/machinery/chem_heater,
@@ -25065,8 +26189,7 @@
/area/security/checkpoint/medical)
"bhj" = (
/obj/machinery/camera{
- c_tag = "Security Post - Medbay";
- dir = 2
+ c_tag = "Security Post - Medbay"
},
/obj/machinery/requests_console{
department = "Security";
@@ -25143,9 +26266,9 @@
/area/medical/morgue)
"bhp" = (
/obj/machinery/power/apc{
+ areastring = "/area/medical/morgue";
dir = 1;
name = "Morgue APC";
- areastring = "/area/medical/morgue";
pixel_y = 24
},
/obj/structure/cable{
@@ -25355,6 +26478,11 @@
},
/turf/open/floor/plating,
/area/maintenance/disposal)
+"bhK" = (
+/obj/structure/table/wood/fancy/royalblue,
+/obj/item/crowbar/red,
+/turf/open/floor/plating,
+/area/maintenance/port)
"bhL" = (
/obj/machinery/mineral/stacking_machine{
input_dir = 1;
@@ -25384,12 +26512,32 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
-"bhQ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+"bhP" = (
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/mineral/wood/fifty{
+ amount = 20
},
-/turf/closed/wall,
-/area/crew_quarters/toilet/locker)
+/turf/open/floor/plating,
+/area/maintenance/port)
+"bhQ" = (
+/obj/structure/closet,
+/obj/item/stack/tile/carpet/royalblue{
+ amount = 24
+ },
+/obj/item/stack/tile/carpet/green{
+ amount = 24
+ },
+/obj/item/stack/tile/carpet/purple{
+ amount = 24
+ },
+/obj/item/stack/tile/carpet/orange{
+ amount = 24
+ },
+/obj/item/stack/tile/wood{
+ amount = 24
+ },
+/turf/open/floor/plating,
+/area/maintenance/port)
"bhR" = (
/obj/structure/grille,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -25450,7 +26598,6 @@
/area/quartermaster/storage)
"bhZ" = (
/obj/machinery/door/window/eastleft{
- dir = 4;
icon_state = "right";
name = "Incoming Mail";
req_access_txt = "50"
@@ -25472,8 +26619,6 @@
dir = 8
},
/obj/item/radio/intercom{
- freerange = 0;
- frequency = 1459;
name = "Station Intercom (General)";
pixel_x = 29
},
@@ -25627,9 +26772,16 @@
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"bit" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
+/obj/machinery/light,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/bedsheetbin/color,
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/locker)
"biu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
@@ -25767,6 +26919,19 @@
"biL" = (
/turf/open/floor/plasteel/white,
/area/science/robotics/lab)
+"biM" = (
+/obj/machinery/button/door{
+ desc = "Alright, GAMER! Want to take your PWRGAME addiction to the MAX? Just smash this button with your chubby chetto encrusted hands an- oh, you broke the switch. Good job, idiot.";
+ id = "RIPFUN";
+ name = "Powerful Gamer Toggle";
+ normaldoorcontrol = 1;
+ pixel_x = -24;
+ pixel_y = 7;
+ specialfunctions = 4
+ },
+/obj/structure/table_frame/wood,
+/turf/open/floor/plating,
+/area/maintenance/port)
"biN" = (
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -25779,11 +26944,9 @@
"biO" = (
/obj/machinery/camera{
c_tag = "Robotics Lab";
- dir = 2;
network = list("ss13","rd")
},
/obj/machinery/button/door{
- dir = 2;
id = "robotics";
name = "Shutters Control Button";
pixel_x = 6;
@@ -25830,8 +26993,7 @@
/area/science/research)
"biS" = (
/obj/machinery/camera{
- c_tag = "Research Division Access";
- dir = 2
+ c_tag = "Research Division Access"
},
/obj/structure/sink{
dir = 4;
@@ -25877,12 +27039,10 @@
"biX" = (
/obj/machinery/camera{
c_tag = "Research and Development";
- dir = 2;
network = list("ss13","rd");
pixel_x = 22
},
/obj/machinery/button/door{
- dir = 2;
id = "rnd";
name = "Shutters Control Button";
pixel_x = -6;
@@ -25902,6 +27062,10 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard)
+"biZ" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plating,
+/area/maintenance/port)
"bja" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -26133,6 +27297,10 @@
/obj/structure/closet/wardrobe/black,
/turf/open/floor/plating,
/area/maintenance/central)
+"bjD" = (
+/obj/structure/bed,
+/turf/open/floor/plating,
+/area/maintenance/port)
"bjE" = (
/obj/machinery/airalarm{
dir = 4;
@@ -26268,9 +27436,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
},
-/obj/effect/turf_decal/tile/blue{
- dir = 2
- },
+/obj/effect/turf_decal/tile/blue,
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bjV" = (
@@ -26283,6 +27449,11 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"bjW" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/obj/structure/table/wood/fancy/purple,
+/turf/open/floor/plating,
+/area/maintenance/port)
"bjX" = (
/obj/structure/table,
/obj/machinery/recharger{
@@ -26327,8 +27498,8 @@
"bkb" = (
/obj/machinery/camera{
c_tag = "Medbay Morgue";
- network = list("ss13","medbay");
- dir = 8
+ dir = 8;
+ network = list("ss13","medbay")
},
/obj/machinery/airalarm{
dir = 8;
@@ -26344,10 +27515,23 @@
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/plating,
/area/storage/emergency/starboard)
+"bke" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/junction/flip,
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"bkf" = (
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
/area/storage/emergency/starboard)
+"bkg" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/maintenance/port)
"bkh" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/circuit,
@@ -26372,7 +27556,6 @@
"bkj" = (
/obj/structure/closet/emcloset,
/obj/machinery/airalarm{
- dir = 2;
pixel_y = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -26388,6 +27571,22 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/white,
/area/science/robotics/lab)
+"bkl" = (
+/obj/effect/turf_decal/tile/blue{
+ alpha = 255
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ alpha = 255;
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"bkm" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -26708,9 +27907,9 @@
/area/maintenance/central)
"bkX" = (
/obj/machinery/power/apc{
+ areastring = "/area/bridge/meeting_room";
dir = 4;
name = "Conference Room APC";
- areastring = "/area/bridge/meeting_room";
pixel_x = 24
},
/obj/structure/cable{
@@ -26867,8 +28066,8 @@
/obj/structure/table/reinforced,
/obj/machinery/camera{
c_tag = "Medbay Foyer";
- network = list("ss13","medbay");
- dir = 8
+ dir = 8;
+ network = list("ss13","medbay")
},
/obj/machinery/cell_charger,
/turf/open/floor/plasteel/white,
@@ -26881,9 +28080,9 @@
icon_state = "4-8"
},
/obj/machinery/power/apc{
+ areastring = "/area/storage/emergency/starboard";
dir = 1;
name = "Starboard Emergency Storage APC";
- areastring = "/area/storage/emergency/starboard";
pixel_y = 24
},
/obj/structure/cable{
@@ -26896,9 +28095,9 @@
/area/maintenance/department/medical/morgue)
"blp" = (
/obj/machinery/power/apc{
+ areastring = "/area/security/checkpoint/medical";
dir = 8;
name = "Medbay Security APC";
- areastring = "/area/security/checkpoint/medical";
pixel_x = -25
},
/obj/structure/cable{
@@ -26945,12 +28144,9 @@
/turf/open/floor/plasteel,
/area/science/robotics/mechbay)
"blt" = (
-/obj/machinery/recharge_station,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/science/robotics/mechbay)
+/obj/structure/sign/poster/contraband/tools,
+/turf/closed/wall,
+/area/storage/primary)
"blu" = (
/obj/machinery/computer/mech_bay_power_console{
dir = 4
@@ -27047,8 +28243,6 @@
/obj/item/healthanalyzer,
/obj/item/healthanalyzer,
/obj/item/radio/intercom{
- freerange = 0;
- frequency = 1459;
name = "Station Intercom (General)";
pixel_x = 29
},
@@ -27110,6 +28304,17 @@
/obj/effect/landmark/start/roboticist,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
+"blN" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ alpha = 255;
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"blO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
@@ -27207,7 +28412,7 @@
},
/obj/item/stack/cable_coil,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/white,
@@ -27302,6 +28507,16 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
+"bml" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/plating,
+/area/maintenance/port)
"bmm" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -27484,7 +28699,6 @@
"bmJ" = (
/obj/item/radio/intercom{
broadcasting = 1;
- freerange = 0;
frequency = 1485;
listening = 0;
name = "Station Intercom (Medbay)";
@@ -27492,7 +28706,7 @@
},
/obj/machinery/light,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel/white,
@@ -27643,6 +28857,38 @@
},
/turf/closed/wall/r_wall,
/area/science/robotics/mechbay)
+"bnd" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ alpha = 255;
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
+"bne" = (
+/obj/machinery/button/door{
+ desc = "A remote control switch for the genetics doors.";
+ id = "GeneticsDoor";
+ name = "Genetics Exit Button";
+ normaldoorcontrol = 1;
+ pixel_x = 8;
+ pixel_y = 24
+ },
+/obj/structure/table,
+/obj/item/book/manual/wiki/medical_cloning{
+ pixel_y = 6
+ },
+/obj/item/storage/box/rxglasses{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/storage/box/bodybags,
+/obj/item/pen,
+/turf/open/floor/plasteel/white,
+/area/medical/genetics)
"bnf" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -27699,7 +28945,7 @@
/obj/item/assembly/flash/handheld,
/obj/item/assembly/flash/handheld,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -27731,9 +28977,9 @@
},
/obj/item/stock_parts/scanning_module,
/obj/machinery/power/apc{
+ areastring = "/area/science/lab";
dir = 4;
name = "Research Lab APC";
- areastring = "/area/science/lab";
pixel_x = 26
},
/obj/structure/cable{
@@ -27779,8 +29025,12 @@
/turf/closed/wall,
/area/maintenance/starboard)
"bnt" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/rack,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 3;
+ name = "3maintenance loot spawner"
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
@@ -27946,9 +29196,7 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bnN" = (
-/obj/effect/turf_decal/tile/red{
- dir = 2
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bnO" = (
@@ -28076,10 +29324,15 @@
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain)
"bnZ" = (
-/obj/structure/table/wood,
-/obj/item/flashlight/lamp/green,
-/turf/open/floor/carpet,
-/area/crew_quarters/heads/captain)
+/obj/machinery/navbeacon{
+ codes_txt = "patrol;next_patrol=HOP";
+ location = "CHE"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"boa" = (
/obj/structure/toilet{
dir = 4
@@ -28170,7 +29423,6 @@
pixel_y = -22
},
/obj/machinery/requests_console{
- announcementConsole = 0;
department = "Medbay";
departmentType = 1;
name = "Medbay RC";
@@ -28221,6 +29473,12 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"bop" = (
+/obj/structure/closet/wardrobe/white,
+/obj/item/clothing/under/kilt,
+/obj/item/clothing/under/janimaid,
+/turf/open/floor/plasteel/white,
+/area/medical/genetics)
"boq" = (
/obj/structure/bed/roller,
/obj/effect/turf_decal/tile/blue,
@@ -28239,15 +29497,25 @@
"bos" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/power/apc{
+ areastring = "/area/science/robotics/lab";
dir = 8;
name = "Robotics Lab APC";
- areastring = "/area/science/robotics/lab";
pixel_x = -25
},
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/white,
/area/science/robotics/lab)
+"bot" = (
+/obj/structure/closet/wardrobe/grey,
+/obj/item/clothing/head/beret/black,
+/obj/item/clothing/head/beret/black,
+/obj/item/clothing/head/beret,
+/obj/item/clothing/head/beret,
+/obj/item/clothing/under/assistantformal,
+/obj/item/clothing/under/skirt/black,
+/turf/open/floor/plasteel/white,
+/area/medical/genetics)
"bou" = (
/turf/open/floor/plasteel,
/area/science/robotics/lab)
@@ -28402,9 +29670,7 @@
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
"boM" = (
-/turf/open/floor/plasteel/white/corner{
- dir = 2
- },
+/turf/open/floor/plasteel/white/corner,
/area/science/research)
"boN" = (
/obj/effect/turf_decal/tile/brown{
@@ -28414,9 +29680,7 @@
/area/quartermaster/office)
"boO" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/white/side{
- dir = 2
- },
+/turf/open/floor/plasteel/white/side,
/area/science/research)
"boP" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -28492,20 +29756,16 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"boY" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
+/obj/machinery/vending/cola/black,
+/obj/structure/sign/poster/contraband/sun_kist{
+ pixel_y = 32
},
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/central)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"boZ" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/northleft{
dir = 8;
- icon_state = "left";
name = "Reception Window"
},
/obj/machinery/door/window/brigdoor{
@@ -28513,7 +29773,6 @@
dir = 4;
icon_state = "rightsecure";
name = "Head of Personnel's Desk";
- req_access = null;
req_access_txt = "57"
},
/obj/structure/disposalpipe/segment{
@@ -28578,7 +29837,7 @@
"bpg" = (
/obj/structure/chair/office/light,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/stripes/line{
@@ -28619,13 +29878,18 @@
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain)
"bpk" = (
-/obj/structure/closet/secure_closet/captains,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
+/obj/machinery/camera{
+ c_tag = "Genetics Cloning";
+ dir = 4;
+ network = list("ss13","medbay")
},
-/turf/open/floor/carpet,
-/area/crew_quarters/heads/captain)
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = -24
+ },
+/obj/structure/closet/secure_closet/personal/patient,
+/turf/open/floor/plasteel/white,
+/area/medical/genetics)
"bpl" = (
/obj/structure/table/wood,
/obj/item/storage/box/matches,
@@ -28801,9 +30065,9 @@
/area/medical/chemistry)
"bpG" = (
/obj/machinery/power/apc{
+ areastring = "/area/medical/genetics";
dir = 1;
name = "Genetics APC";
- areastring = "/area/medical/genetics";
pixel_y = 24
},
/obj/structure/cable{
@@ -28817,7 +30081,6 @@
/obj/item/radio/headset/headset_medsci,
/obj/machinery/requests_console{
department = "Genetics";
- departmentType = 0;
name = "Genetics Requests Console";
pixel_y = 30
},
@@ -28949,7 +30212,7 @@
/area/science/robotics/lab)
"bpX" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -28982,6 +30245,12 @@
},
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
+"bqb" = (
+/obj/structure/shuttle/engine/propulsion{
+ dir = 1
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
"bqc" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel/white,
@@ -29183,16 +30452,14 @@
icon_state = "0-4"
},
/obj/machinery/power/apc{
+ areastring = "/area/engine/gravity_generator";
dir = 8;
name = "Gravity Generator APC";
- areastring = "/area/engine/gravity_generator";
pixel_x = -25;
pixel_y = 1
},
/obj/structure/table,
-/obj/item/paper/guides/jobs/engi/gravity_gen{
- layer = 3
- },
+/obj/item/paper/guides/jobs/engi/gravity_gen,
/obj/item/pen/blue,
/obj/item/radio/intercom{
name = "Station Intercom (General)";
@@ -29348,8 +30615,7 @@
},
/obj/machinery/camera{
c_tag = "Medbay West";
- network = list("ss13","medbay");
- dir = 2
+ network = list("ss13","medbay")
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -29454,9 +30720,7 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/effect/turf_decal/tile/blue{
- dir = 2
- },
+/obj/effect/turf_decal/tile/blue,
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bri" = (
@@ -29487,6 +30751,12 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/white,
/area/medical/genetics)
+"brl" = (
+/obj/structure/shuttle/engine/heater{
+ dir = 1
+ },
+/turf/closed/wall/mineral/titanium,
+/area/space/nearstation)
"brm" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -29533,7 +30803,6 @@
"brq" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/button/door{
- dir = 2;
id = "robotics2";
name = "Shutters Control Button";
pixel_x = 24;
@@ -29574,7 +30843,6 @@
/area/science/research)
"bru" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/structure/disposalpipe/segment{
@@ -29641,29 +30909,22 @@
/obj/item/pen,
/obj/machinery/camera{
c_tag = "Experimentor Lab";
- dir = 2;
network = list("ss13","rd")
},
/obj/item/hand_labeler,
/obj/item/stack/packageWrap,
-/turf/open/floor/plasteel/white/side{
- dir = 2
- },
+/turf/open/floor/plasteel/white/side,
/area/science/explab)
"brA" = (
/obj/structure/table,
/obj/item/paper_bin{
pixel_y = 6
},
-/turf/open/floor/plasteel/white/corner{
- dir = 2
- },
+/turf/open/floor/plasteel/white/corner,
/area/science/explab)
"brB" = (
/obj/structure/closet/l3closet/scientist,
-/turf/open/floor/plasteel/white/side{
- dir = 2
- },
+/turf/open/floor/plasteel/white/side,
/area/science/explab)
"brC" = (
/obj/structure/table,
@@ -29673,9 +30934,7 @@
pixel_y = 23
},
/obj/item/radio/off,
-/turf/open/floor/plasteel/white/side{
- dir = 2
- },
+/turf/open/floor/plasteel/white/side,
/area/science/explab)
"brD" = (
/obj/structure/closet/emcloset,
@@ -29815,6 +31074,9 @@
"brS" = (
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
+"brT" = (
+/turf/open/floor/plating,
+/area/space/nearstation)
"brU" = (
/obj/structure/sign/warning/electricshock{
pixel_y = -32
@@ -29944,7 +31206,6 @@
/area/teleporter)
"bsk" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/machinery/light{
@@ -29957,8 +31218,6 @@
/area/teleporter)
"bsl" = (
/obj/item/radio/intercom{
- broadcasting = 0;
- listening = 1;
name = "Station Intercom (General)";
pixel_y = 20
},
@@ -30011,10 +31270,7 @@
dir = 4
},
/obj/item/radio/intercom{
- broadcasting = 0;
- freerange = 0;
frequency = 1485;
- listening = 1;
name = "Station Intercom (Medbay)";
pixel_y = -30
},
@@ -30042,17 +31298,14 @@
/area/medical/medbay/central)
"bst" = (
/obj/item/radio/intercom{
- broadcasting = 0;
- freerange = 0;
frequency = 1485;
- listening = 1;
name = "Station Intercom (Medbay)";
pixel_x = 30
},
/obj/machinery/camera{
c_tag = "Medbay East";
- network = list("ss13","medbay");
dir = 8;
+ network = list("ss13","medbay");
pixel_y = -22
},
/turf/open/floor/plasteel/white,
@@ -30110,6 +31363,9 @@
dir = 9
},
/area/science/research)
+"bsB" = (
+/turf/closed/wall/mineral/titanium,
+/area/space/nearstation)
"bsC" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/open/floor/plasteel/white,
@@ -30162,9 +31418,9 @@
/area/science/explab)
"bsI" = (
/obj/machinery/power/apc{
+ areastring = "/area/science/explab";
dir = 4;
name = "Experimentation Lab APC";
- areastring = "/area/science/explab";
pixel_x = 26
},
/obj/structure/cable,
@@ -30213,12 +31469,8 @@
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
"bsP" = (
-/obj/structure/table/optable{
- name = "Robotics Operating Table"
- },
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/plasteel/dark,
-/area/science/robotics/lab)
+/turf/open/floor/plating/foam,
+/area/space/nearstation)
"bsQ" = (
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
@@ -30289,8 +31541,7 @@
dir = 4
},
/obj/machinery/camera{
- c_tag = "Research Division North";
- dir = 2
+ c_tag = "Research Division North"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -30332,7 +31583,6 @@
/area/science/research)
"btf" = (
/obj/machinery/requests_console{
- announcementConsole = 0;
department = "Medbay";
departmentType = 1;
name = "Medbay RC";
@@ -30355,9 +31605,9 @@
/turf/open/floor/plasteel/white,
/area/science/research)
"bti" = (
-/obj/structure/closet/secure_closet/personal/patient,
-/turf/open/floor/plasteel/white,
-/area/medical/genetics)
+/obj/effect/spawner/structure/window/shuttle,
+/turf/open/floor/plating,
+/area/space/nearstation)
"btj" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -30368,9 +31618,9 @@
/turf/open/floor/plasteel/white,
/area/science/explab)
"btk" = (
-/obj/structure/closet/wardrobe/white,
-/turf/open/floor/plasteel/white,
-/area/medical/genetics)
+/obj/structure/grille/broken,
+/turf/open/floor/plating,
+/area/space/nearstation)
"btl" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel/white,
@@ -30431,7 +31681,6 @@
pixel_y = -8
},
/obj/machinery/button/door{
- dir = 2;
id = "QMLoaddoor2";
layer = 4;
name = "Loading Doors";
@@ -30460,7 +31709,7 @@
"btt" = (
/obj/structure/table,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/folder/yellow,
@@ -30504,11 +31753,16 @@
/turf/open/floor/plasteel,
/area/science/research)
"bty" = (
-/obj/structure/chair{
- dir = 8
+/obj/structure/chair/sofa/right,
+/obj/structure/window{
+ dir = 1
},
-/turf/open/floor/plasteel,
-/area/quartermaster/office)
+/obj/structure/sign/poster/contraband/pwr_game{
+ pixel_x = -32
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"btz" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/tile/brown{
@@ -30518,8 +31772,7 @@
/area/hallway/primary/central)
"btA" = (
/obj/machinery/camera{
- c_tag = "Research Division West";
- dir = 2
+ c_tag = "Research Division West"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -30550,13 +31803,21 @@
"btD" = (
/obj/structure/table,
/obj/item/paper_bin{
- pixel_x = -3;
- pixel_y = 7
+ pixel_x = 1;
+ pixel_y = 9
},
/obj/item/pen,
-/obj/item/stamp/hop,
-/turf/open/floor/plasteel,
-/area/crew_quarters/heads/hop)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/item/folder/white,
+/obj/item/pen/fountain,
+/obj/item/stamp/rd{
+ pixel_x = 3;
+ pixel_y = -2
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/heads/hor)
"btE" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -30591,9 +31852,9 @@
/area/teleporter)
"btI" = (
/obj/machinery/power/apc{
+ areastring = "/area/teleporter";
dir = 8;
name = "Teleporter APC";
- areastring = "/area/teleporter";
pixel_x = -24
},
/obj/structure/cable{
@@ -30679,7 +31940,6 @@
/area/medical/medbay/central)
"btS" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -30763,9 +32023,8 @@
"buc" = (
/obj/machinery/light,
/obj/machinery/power/apc{
- dir = 2;
- name = "Cargo Office APC";
areastring = "/area/quartermaster/office";
+ name = "Cargo Office APC";
pixel_x = 1;
pixel_y = -24
},
@@ -30773,9 +32032,7 @@
icon_state = "0-4"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/tile/brown{
- dir = 2
- },
+/obj/effect/turf_decal/tile/brown,
/turf/open/floor/plasteel,
/area/quartermaster/office)
"bud" = (
@@ -30820,6 +32077,10 @@
},
/turf/open/floor/plasteel/white,
/area/medical/genetics)
+"buh" = (
+/obj/structure/girder,
+/turf/open/floor/plating,
+/area/space/nearstation)
"bui" = (
/obj/machinery/airalarm{
dir = 1;
@@ -30986,10 +32247,16 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/maintenance/starboard)
+"buA" = (
+/obj/structure/frame/computer{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
"buB" = (
/obj/machinery/conveyor_switch/oneway{
- id = "QMLoad";
- dir = 8
+ dir = 8;
+ id = "QMLoad"
},
/turf/open/floor/plasteel,
/area/quartermaster/storage)
@@ -31068,12 +32335,12 @@
/turf/open/floor/plasteel,
/area/quartermaster/office)
"buJ" = (
-/obj/structure/chair{
- dir = 8
+/obj/structure/chair/sofa,
+/obj/structure/window{
+ dir = 1
},
-/obj/machinery/light,
-/turf/open/floor/plasteel,
-/area/quartermaster/office)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"buK" = (
/obj/machinery/light{
dir = 4
@@ -31341,20 +32608,12 @@
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bvn" = (
-/obj/machinery/button/door{
- desc = "A remote control switch for the genetics doors.";
- id = "GeneticsDoor";
- name = "Genetics Exit Button";
- normaldoorcontrol = 1;
- pixel_x = 8;
- pixel_y = 24
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/obj/structure/table,
-/obj/item/book/manual/wiki/medical_cloning{
- pixel_y = 6
- },
-/turf/open/floor/plasteel/white,
-/area/medical/genetics)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall,
+/area/maintenance/port)
"bvo" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -31462,8 +32721,8 @@
"bvB" = (
/obj/machinery/camera{
c_tag = "Genetics Access";
- network = list("ss13","medbay");
dir = 8;
+ network = list("ss13","medbay");
pixel_y = -22
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -31514,6 +32773,20 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/qm)
+"bvG" = (
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/machinery/light/small,
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 5;
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 1
+ },
+/area/crew_quarters/fitness)
"bvH" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -31735,20 +33008,10 @@
/area/hallway/primary/central)
"bwi" = (
/obj/item/radio/intercom{
- dir = 8;
- name = "Station Intercom (General)";
- pixel_x = -28
+ pixel_x = -25
},
-/obj/structure/closet/secure_closet/hop,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/heads/hop)
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"bwj" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -31925,8 +33188,7 @@
/obj/structure/table/glass,
/obj/machinery/camera{
c_tag = "Medbay Cryogenics";
- network = list("ss13","medbay");
- dir = 2
+ network = list("ss13","medbay")
},
/obj/item/reagent_containers/glass/beaker/cryoxadone,
/obj/item/reagent_containers/glass/beaker/cryoxadone,
@@ -31942,24 +33204,17 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bwL" = (
-/obj/machinery/camera{
- c_tag = "Genetics Cloning";
- network = list("ss13","medbay");
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/structure/closet/wardrobe/miner,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/structure/table,
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
- },
-/obj/item/storage/box/rxglasses{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/storage/box/bodybags,
-/obj/item/pen,
-/turf/open/floor/plasteel/white,
-/area/medical/genetics)
+/obj/item/radio/headset/headset_cargo/mining,
+/turf/open/floor/plasteel,
+/area/quartermaster/miningdock)
"bwM" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -32006,6 +33261,10 @@
dir = 9
},
/area/science/research)
+"bwP" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/turf/closed/wall,
+/area/maintenance/port)
"bwQ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -32188,6 +33447,14 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/aft)
+"bxh" = (
+/obj/structure/table,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 4;
+ name = "4maintenance loot spawner"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"bxi" = (
/obj/machinery/computer/aifixer{
dir = 8
@@ -32275,9 +33542,7 @@
pixel_x = 25;
req_access_txt = "47"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white,
/area/science/explab)
"bxt" = (
@@ -32624,6 +33889,7 @@
pixel_x = -3;
pixel_y = 7
},
+/obj/item/pen/fountain,
/turf/open/floor/plasteel,
/area/quartermaster/qm)
"byh" = (
@@ -32793,9 +34059,9 @@
/area/quartermaster/qm)
"byA" = (
/obj/machinery/power/apc{
+ areastring = "/area/quartermaster/qm";
dir = 1;
name = "Quartermaster APC";
- areastring = "/area/quartermaster/qm";
pixel_y = 24
},
/obj/structure/cable{
@@ -32849,9 +34115,9 @@
/area/quartermaster/miningdock)
"byF" = (
/obj/machinery/power/apc{
+ areastring = "/area/quartermaster/miningdock";
dir = 1;
name = "Mining Dock APC";
- areastring = "/area/quartermaster/miningdock";
pixel_y = 24
},
/obj/structure/cable{
@@ -33016,6 +34282,9 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"byV" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/obj/structure/extinguisher_cabinet{
pixel_x = 5;
pixel_y = -32
@@ -33084,7 +34353,6 @@
/obj/item/stack/packageWrap,
/obj/item/pen,
/obj/machinery/requests_console{
- announcementConsole = 0;
department = "Medbay";
departmentType = 1;
name = "Medbay RC";
@@ -33209,8 +34477,8 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4;
external_pressure_bound = 140;
- pressure_checks = 0;
- name = "server vent"
+ name = "server vent";
+ pressure_checks = 0
},
/turf/open/floor/circuit/telecomms/server,
/area/science/server)
@@ -33247,14 +34515,13 @@
"bzy" = (
/obj/machinery/camera{
c_tag = "Server Room";
- dir = 2;
network = list("ss13","rd");
pixel_x = 22
},
/obj/machinery/power/apc{
+ areastring = "/area/science/server";
dir = 1;
name = "Server Room APC";
- areastring = "/area/science/server";
pixel_y = 25
},
/obj/structure/cable{
@@ -33329,7 +34596,7 @@
/area/science/research)
"bzF" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -33340,18 +34607,14 @@
name = "Central Access"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/yellow{
- dir = 2
- },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bzH" = (
/obj/structure/table,
/obj/item/hemostat,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/white/side{
- dir = 2
- },
+/turf/open/floor/plasteel/white/side,
/area/medical/sleeper)
"bzI" = (
/obj/structure/disposalpipe/segment,
@@ -33378,9 +34641,7 @@
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bzL" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white,
/area/crew_quarters/heads/hor)
"bzM" = (
@@ -33452,9 +34713,7 @@
/area/quartermaster/qm)
"bzU" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/obj/effect/turf_decal/tile/blue{
- dir = 2
- },
+/obj/effect/turf_decal/tile/blue,
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bzV" = (
@@ -33561,11 +34820,11 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bAj" = (
-/obj/machinery/navbeacon{
- codes_txt = "patrol;next_patrol=HOP";
- location = "CHE"
+/obj/structure/disposalpipe/trunk{
+ dir = 1
},
-/turf/open/floor/plasteel,
+/obj/machinery/disposal/bin,
+/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
"bAk" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
@@ -33613,9 +34872,9 @@
icon_state = "4-8"
},
/obj/machinery/power/apc{
+ areastring = "/area/security/checkpoint/supply";
dir = 1;
name = "Cargo Security APC";
- areastring = "/area/security/checkpoint/supply";
pixel_x = 1;
pixel_y = 24
},
@@ -33633,7 +34892,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel/white,
@@ -33644,8 +34903,8 @@
},
/obj/machinery/camera{
c_tag = "Medbay Treatment Center";
- network = list("ss13","medbay");
- dir = 8
+ dir = 8;
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel,
/area/medical/sleeper)
@@ -33856,9 +35115,7 @@
"bAP" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/yellow{
- dir = 2
- },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bAQ" = (
@@ -34013,6 +35270,10 @@
/obj/structure/cable{
icon_state = "1-8"
},
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_y = -29
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bBh" = (
@@ -34182,13 +35443,8 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bBz" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/plasteel,
+/obj/machinery/vending/cola/space_up,
+/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
"bBA" = (
/obj/structure/cable{
@@ -34200,14 +35456,20 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bBB" = (
-/obj/structure/cable{
- icon_state = "1-8"
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 9
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
},
/turf/open/floor/plasteel,
-/area/hallway/primary/central)
+/area/crew_quarters/fitness)
"bBC" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -34235,9 +35497,7 @@
"bBF" = (
/obj/machinery/portable_atmospherics/scrubber,
/obj/item/storage/firstaid/toxin,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/machinery/airalarm/unlocked{
pixel_y = 24
},
@@ -34257,19 +35517,14 @@
/turf/closed/wall,
/area/quartermaster/miningdock)
"bBI" = (
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/structure/closet/wardrobe/miner,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
+/obj/structure/table,
+/obj/item/stack/packageWrap,
+/obj/item/stack/packageWrap,
+/obj/item/hand_labeler,
/turf/open/floor/plasteel,
-/area/quartermaster/miningdock)
+/area/hallway/secondary/service)
"bBJ" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/turf/open/floor/plasteel/white,
@@ -34288,6 +35543,14 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"bBM" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 4;
+ name = "4maintenance loot spawner"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"bBN" = (
/turf/closed/wall,
/area/crew_quarters/heads/cmo)
@@ -34347,6 +35610,18 @@
},
/turf/open/floor/circuit/telecomms/server,
/area/science/server)
+"bBT" = (
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
"bBU" = (
/obj/machinery/atmospherics/pipe/simple{
dir = 9
@@ -34408,9 +35683,8 @@
/area/security/checkpoint/science)
"bCa" = (
/obj/machinery/power/apc{
- dir = 2;
- name = "Science Security APC";
areastring = "/area/security/checkpoint/science";
+ name = "Science Security APC";
pixel_y = -24
},
/obj/structure/cable,
@@ -34472,9 +35746,9 @@
/area/maintenance/port/aft)
"bCf" = (
/obj/machinery/power/apc{
+ areastring = "/area/crew_quarters/heads/hor";
dir = 8;
name = "RD Office APC";
- areastring = "/area/crew_quarters/heads/hor";
pixel_x = -25
},
/obj/structure/cable,
@@ -34578,9 +35852,7 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/yellow{
- dir = 2
- },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bCq" = (
@@ -34657,9 +35929,20 @@
/turf/open/floor/plating,
/area/maintenance/aft)
"bCA" = (
-/obj/machinery/vending/cigarette,
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/central)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"bCB" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -34685,9 +35968,7 @@
"bCD" = (
/obj/structure/table,
/obj/item/retractor,
-/turf/open/floor/plasteel/white/side{
- dir = 2
- },
+/turf/open/floor/plasteel/white/side,
/area/medical/sleeper)
"bCE" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -34722,12 +36003,14 @@
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bCI" = (
-/obj/structure/chair/office/dark{
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/green{
dir = 4
},
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/wood,
-/area/library)
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
"bCJ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -34744,8 +36027,7 @@
/obj/structure/closet/secure_closet/medical3,
/obj/machinery/camera{
c_tag = "Medbay Storage";
- network = list("ss13","medbay");
- dir = 2
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
@@ -34762,7 +36044,13 @@
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bCO" = (
-/obj/machinery/bloodbankgen,
+/obj/structure/table,
+/obj/item/storage/box/bodybags{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/storage/box/rxglasses,
+/obj/item/hand_labeler,
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bCP" = (
@@ -34796,35 +36084,22 @@
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bCT" = (
-/obj/structure/table,
-/obj/item/storage/belt/medical{
- pixel_y = 2
- },
-/obj/item/storage/belt/medical{
- pixel_y = 2
- },
-/obj/item/storage/belt/medical{
- pixel_y = 2
- },
-/obj/item/clothing/neck/stethoscope,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/machinery/bloodbankgen,
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bCU" = (
/obj/item/radio/intercom{
- broadcasting = 0;
- freerange = 0;
frequency = 1485;
- listening = 1;
name = "Station Intercom (Medbay)";
pixel_x = -30
},
/obj/machinery/camera{
c_tag = "Medbay South";
- network = list("ss13","medbay");
- dir = 4
+ dir = 4;
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
@@ -34947,7 +36222,6 @@
/obj/item/pen,
/obj/machinery/requests_console{
department = "Mining";
- departmentType = 0;
pixel_x = -30
},
/obj/machinery/light{
@@ -34957,7 +36231,7 @@
/area/quartermaster/miningdock)
"bDl" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -34991,13 +36265,11 @@
/area/quartermaster/miningdock)
"bDp" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/yellow{
- dir = 2
- },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bDq" = (
@@ -35019,9 +36291,15 @@
/turf/open/floor/plasteel,
/area/janitor)
"bDs" = (
-/obj/structure/reagent_dispensers/watertank,
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/green,
/turf/open/floor/plasteel,
-/area/janitor)
+/area/hallway/primary/starboard)
"bDt" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -35039,6 +36317,13 @@
/turf/open/floor/plating,
/area/maintenance/aft)
"bDv" = (
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
+"bDw" = (
/obj/structure/table,
/obj/item/flashlight{
pixel_x = 1;
@@ -35053,14 +36338,15 @@
/obj/machinery/status_display/ai{
pixel_x = -32
},
-/turf/open/floor/plating,
-/area/storage/tech)
-"bDw" = (
-/obj/structure/table,
-/obj/item/screwdriver{
- pixel_y = 16
+/obj/machinery/power/apc{
+ areastring = "/area/storage/tech";
+ dir = 1;
+ name = "Tech Storage APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
},
-/obj/item/wirecutters,
/turf/open/floor/plating,
/area/storage/tech)
"bDx" = (
@@ -35073,33 +36359,28 @@
/turf/open/floor/plating,
/area/storage/tech)
"bDy" = (
-/obj/machinery/camera{
- c_tag = "Tech Storage";
- dir = 2
- },
-/obj/machinery/power/apc{
- dir = 1;
- name = "Tech Storage APC";
- areastring = "/area/storage/tech";
- pixel_y = 24
- },
-/obj/structure/cable{
- icon_state = "0-2"
+/obj/structure/table,
+/obj/item/screwdriver{
+ pixel_y = 16
},
+/obj/item/wirecutters,
/turf/open/floor/plating,
/area/storage/tech)
"bDz" = (
-/obj/machinery/airalarm{
- pixel_y = 23
+/obj/structure/table,
+/obj/item/aicard,
+/obj/item/aiModule/reset,
+/obj/structure/cable{
+ icon_state = "1-2"
},
/turf/open/floor/plating,
/area/storage/tech)
"bDA" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/power/apc{
+ areastring = "/area/medical/sleeper";
dir = 4;
name = "Treatment Center APC";
- areastring = "/area/medical/sleeper";
pixel_x = 26
},
/obj/structure/cable{
@@ -35126,9 +36407,6 @@
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bDD" = (
-/obj/structure/sign/warning/nosmoking{
- pixel_x = -28
- },
/obj/structure/bed,
/obj/item/bedsheet/medical,
/obj/effect/turf_decal/tile/blue{
@@ -35142,8 +36420,8 @@
},
/obj/machinery/camera{
c_tag = "Medbay Recovery Room";
- network = list("ss13","medbay");
- dir = 8
+ dir = 8;
+ network = list("ss13","medbay")
},
/obj/machinery/iv_drip,
/turf/open/floor/plasteel/white,
@@ -35161,9 +36439,7 @@
/area/medical/medbay/central)
"bDG" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/tile/yellow{
- dir = 2
- },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bDH" = (
@@ -35179,8 +36455,9 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bDJ" = (
-/obj/item/storage/box/lights/mixed,
-/obj/item/storage/box/lights/mixed,
+/obj/structure/sign/poster/contraband/lizard{
+ pixel_x = -32
+ },
/turf/open/floor/plasteel,
/area/janitor)
"bDK" = (
@@ -35194,8 +36471,17 @@
/turf/open/floor/plasteel,
/area/janitor)
"bDL" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
/turf/open/floor/plasteel,
-/area/janitor)
+/area/crew_quarters/fitness)
"bDM" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
@@ -35209,11 +36495,15 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bDO" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/machinery/vending/snack/orange,
+/obj/machinery/light{
+ dir = 1
},
-/turf/open/floor/plating,
-/area/maintenance/aft)
+/obj/structure/sign/poster/contraband/donut_corp{
+ pixel_y = 32
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"bDP" = (
/obj/machinery/navbeacon{
codes_txt = "delivery;dir=8";
@@ -35287,6 +36577,13 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"bDX" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"bDY" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -35415,8 +36712,8 @@
},
/obj/machinery/camera{
c_tag = "Chief Medical Office";
- network = list("ss13","medbay");
dir = 8;
+ network = list("ss13","medbay");
pixel_y = -22
},
/obj/effect/turf_decal/tile/blue{
@@ -35433,7 +36730,6 @@
"bEn" = (
/obj/machinery/camera{
c_tag = "Xenobiology Test Chamber";
- dir = 2;
network = list("xeno","rd")
},
/obj/machinery/light{
@@ -35456,9 +36752,9 @@
/area/science/storage)
"bEq" = (
/obj/machinery/power/apc{
+ areastring = "/area/science/research";
dir = 8;
name = "Misc Research APC";
- areastring = "/area/science/research";
pixel_x = -25
},
/obj/structure/cable{
@@ -35488,9 +36784,7 @@
/obj/machinery/light{
dir = 1
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white,
/area/science/mixing)
"bEv" = (
@@ -35498,9 +36792,7 @@
/obj/machinery/light_switch{
pixel_y = 28
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white,
/area/science/mixing)
"bEw" = (
@@ -35508,9 +36800,7 @@
/obj/item/radio/intercom{
pixel_y = 25
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white,
/area/science/mixing)
"bEx" = (
@@ -35519,17 +36809,13 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/machinery/camera{
c_tag = "Toxins Lab West";
- dir = 2;
network = list("ss13","rd")
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white,
/area/science/mixing)
"bEy" = (
@@ -35537,9 +36823,7 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white,
/area/science/mixing)
"bEz" = (
@@ -35685,15 +36969,8 @@
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
"bER" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/techstorage/rnd,
/turf/open/floor/plating,
/area/storage/tech)
"bES" = (
@@ -35743,9 +37020,12 @@
/turf/open/floor/plating,
/area/storage/tech)
"bEX" = (
-/obj/structure/table,
-/obj/item/aicard,
-/obj/item/aiModule/reset,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
/turf/open/floor/plating,
/area/storage/tech)
"bEY" = (
@@ -35841,18 +37121,20 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bFk" = (
-/obj/item/mop,
-/obj/item/reagent_containers/glass/bucket,
-/turf/open/floor/plasteel,
-/area/janitor)
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"bFl" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/power/apc{
+ areastring = "/area/janitor";
dir = 8;
name = "Custodial Closet APC";
- areastring = "/area/janitor";
pixel_x = -24
},
/obj/structure/cable{
@@ -35890,9 +37172,7 @@
/area/maintenance/aft)
"bFq" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/yellow{
- dir = 2
- },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bFr" = (
@@ -35986,21 +37266,14 @@
/turf/open/floor/plasteel,
/area/medical/sleeper)
"bFC" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/condiment/peppermill{
- pixel_x = 5;
- pixel_y = -2
+/obj/structure/door_assembly/door_assembly_mai,
+/obj/item/electronics/airlock,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/item/reagent_containers/food/condiment/saltshaker{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"bFD" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -36067,6 +37340,9 @@
"bFJ" = (
/obj/structure/bed,
/obj/item/bedsheet/medical,
+/obj/structure/sign/warning/nosmoking{
+ pixel_x = -28
+ },
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bFK" = (
@@ -36221,12 +37497,8 @@
/obj/machinery/doppler_array/research/science{
dir = 4
},
-/obj/effect/turf_decal/bot{
- dir = 2
- },
-/turf/open/floor/plasteel{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
/area/science/mixing)
"bGe" = (
/turf/closed/wall,
@@ -36235,6 +37507,22 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating/airless,
/area/science/test_area)
+"bGg" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"bGh" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/starboard/fore)
"bGi" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -36318,8 +37606,7 @@
/area/storage/tech)
"bGs" = (
/obj/machinery/camera{
- c_tag = "Secure Tech Storage";
- dir = 2
+ c_tag = "Secure Tech Storage"
},
/obj/structure/cable{
icon_state = "1-2"
@@ -36344,11 +37631,12 @@
/turf/open/floor/plating,
/area/storage/tech)
"bGw" = (
-/obj/structure/rack,
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
},
-/obj/effect/spawner/lootdrop/techstorage/rnd,
/turf/open/floor/plating,
/area/storage/tech)
"bGx" = (
@@ -36379,18 +37667,14 @@
/turf/open/floor/plasteel/white,
/area/science/mixing)
"bGB" = (
-/obj/structure/table,
-/obj/item/grenade/chem_grenade/cleaner,
-/obj/item/grenade/chem_grenade/cleaner,
-/obj/item/grenade/chem_grenade/cleaner,
-/obj/machinery/requests_console{
- department = "Janitorial";
- departmentType = 1;
- pixel_y = -29
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/obj/item/reagent_containers/spray/cleaner,
-/turf/open/floor/plasteel,
-/area/janitor)
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"bGC" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -36513,9 +37797,7 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/yellow{
- dir = 2
- },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bGP" = (
@@ -36541,15 +37823,34 @@
/area/maintenance/aft)
"bGR" = (
/obj/structure/table,
-/obj/item/hand_labeler,
-/obj/item/storage/box/rxglasses,
-/obj/item/storage/box/bodybags{
- pixel_x = 3;
- pixel_y = 3
+/obj/item/storage/belt/medical{
+ pixel_y = 2
},
-/obj/item/gun/syringe,
+/obj/item/storage/belt/medical{
+ pixel_y = 2
+ },
+/obj/item/storage/belt/medical{
+ pixel_y = 2
+ },
+/obj/item/clothing/neck/stethoscope,
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"bGS" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"bGT" = (
/obj/structure/table,
/obj/item/folder/white,
@@ -36646,9 +37947,9 @@
/area/maintenance/aft)
"bHe" = (
/obj/machinery/power/apc{
+ areastring = "/area/science/storage";
dir = 8;
name = "Toxins Storage APC";
- areastring = "/area/science/storage";
pixel_x = -25
},
/obj/structure/cable{
@@ -36668,6 +37969,22 @@
},
/turf/open/floor/plasteel/white,
/area/science/research)
+"bHg" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/sign/departments/restroom{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"bHh" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -36703,9 +38020,7 @@
"bHl" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
-/obj/effect/turf_decal/tile/yellow{
- dir = 2
- },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bHm" = (
@@ -36761,9 +38076,7 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/corner{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plasteel,
/area/science/mixing)
"bHt" = (
@@ -36796,6 +38109,16 @@
},
/turf/open/floor/plating,
/area/science/test_area)
+"bHx" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/obj/structure/table,
+/obj/item/kitchen/rollingpin,
+/obj/item/shovel/spade,
+/obj/item/reagent_containers/glass/bucket,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
"bHy" = (
/obj/structure/closet/crate,
/obj/machinery/light/small{
@@ -36827,6 +38150,19 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"bHB" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/table,
+/obj/item/storage/box/beakers{
+ pixel_x = -3;
+ pixel_y = 7
+ },
+/obj/item/storage/box/beakers{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
"bHC" = (
/obj/effect/landmark/blobstart,
/turf/open/floor/plating,
@@ -36842,12 +38178,17 @@
/turf/open/floor/plating,
/area/maintenance/port/aft)
"bHF" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"bHG" = (
/obj/structure/rack,
/obj/machinery/light/small{
@@ -36924,9 +38265,7 @@
/turf/open/floor/plating,
/area/storage/tech)
"bHP" = (
-/obj/effect/turf_decal/tile/yellow{
- dir = 2
- },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bHQ" = (
@@ -36969,9 +38308,9 @@
/area/maintenance/aft)
"bHV" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/aft";
dir = 8;
name = "Aft Maintenance APC";
- areastring = "/area/maintenance/aft";
pixel_x = -24
},
/obj/structure/cable{
@@ -37000,6 +38339,18 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"bHZ" = (
+/obj/structure/table,
+/obj/item/book/manual/hydroponics_pod_people{
+ pixel_x = -4;
+ pixel_y = 5
+ },
+/obj/item/paper/guides/jobs/hydroponics{
+ pixel_x = -5;
+ pixel_y = 3
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
"bIa" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -37031,8 +38382,8 @@
},
/obj/machinery/camera{
c_tag = "Surgery Operating";
- network = list("ss13","medbay");
dir = 1;
+ network = list("ss13","medbay");
pixel_x = 22
},
/obj/machinery/light,
@@ -37130,6 +38481,9 @@
/obj/item/clothing/glasses/hud/health,
/obj/item/clothing/glasses/hud/health,
/obj/item/clothing/glasses/hud/health,
+/obj/item/hand_labeler,
+/obj/item/stack/packageWrap,
+/obj/item/stack/packageWrap,
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bIk" = (
@@ -37471,9 +38825,7 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plasteel,
/area/science/mixing)
"bIV" = (
@@ -37869,6 +39221,10 @@
},
/turf/closed/wall,
/area/science/storage)
+"bJS" = (
+/obj/structure/sign/departments/restroom,
+/turf/closed/wall,
+/area/crew_quarters/toilet)
"bJT" = (
/obj/machinery/vending/cigarette,
/turf/open/floor/plasteel/white,
@@ -37951,9 +39307,9 @@
/area/science/mixing)
"bKa" = (
/obj/machinery/power/apc{
+ areastring = "/area/science/mixing";
dir = 4;
name = "Toxins Lab APC";
- areastring = "/area/science/mixing";
pixel_x = 26
},
/obj/structure/cable,
@@ -38249,9 +39605,9 @@
icon_state = "0-8"
},
/obj/machinery/power/apc{
+ areastring = "/area/medical/medbay/central";
dir = 4;
name = "Medbay APC";
- areastring = "/area/medical/medbay/central";
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -38328,9 +39684,9 @@
/area/medical/medbay/central)
"bKS" = (
/obj/machinery/power/apc{
+ areastring = "/area/crew_quarters/heads/cmo";
dir = 1;
name = "CM Office APC";
- areastring = "/area/crew_quarters/heads/cmo";
pixel_y = 24
},
/obj/structure/cable{
@@ -38374,9 +39730,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bKX" = (
@@ -38405,9 +39759,7 @@
pixel_y = 2
},
/obj/structure/table/reinforced,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bKZ" = (
@@ -38428,18 +39780,14 @@
name = "Test Chamber";
req_access_txt = "55"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bLb" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bLc" = (
@@ -38449,9 +39797,7 @@
/obj/item/clothing/glasses/science,
/obj/item/clothing/glasses/science,
/obj/structure/table,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bLd" = (
@@ -38565,10 +39911,18 @@
dir = 8
},
/turf/open/floor/plating{
- luminosity = 2;
- initial_gas_mix = "o2=0.01;n2=0.01"
+ initial_gas_mix = "o2=0.01;n2=0.01";
+ luminosity = 2
},
/area/science/test_area)
+"bLs" = (
+/obj/structure/reagent_dispensers/keg/milk,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"bLt" = (
+/obj/structure/reagent_dispensers/keg/gargle,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"bLu" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance,
@@ -38593,6 +39947,10 @@
/obj/item/stock_parts/subspace/treatment,
/obj/item/stock_parts/subspace/treatment,
/obj/item/stock_parts/subspace/treatment,
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
/turf/open/floor/plating,
/area/storage/tech)
"bLy" = (
@@ -38624,6 +39982,10 @@
/obj/item/clothing/gloves/color/yellow,
/obj/item/t_scanner,
/obj/item/multitool,
+/obj/machinery/camera{
+ c_tag = "Tech Storage";
+ dir = 1
+ },
/turf/open/floor/plating,
/area/storage/tech)
"bLB" = (
@@ -38655,9 +40017,8 @@
"bLF" = (
/obj/structure/filingcabinet/filingcabinet,
/obj/machinery/power/apc{
- dir = 2;
- name = "Delivery Office APC";
areastring = "/area/quartermaster/sorting";
+ name = "Delivery Office APC";
pixel_x = 1;
pixel_y = -24
},
@@ -38854,9 +40215,9 @@
/area/science/misc_lab)
"bMg" = (
/obj/machinery/power/apc{
+ areastring = "/area/science/xenobiology";
dir = 8;
name = "Xenobiology APC";
- areastring = "/area/science/xenobiology";
pixel_x = -25
},
/obj/structure/cable{
@@ -38897,7 +40258,6 @@
"bMm" = (
/obj/machinery/monkey_recycler,
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/effect/turf_decal/stripes/line{
@@ -38963,7 +40323,6 @@
/area/science/mixing)
"bMw" = (
/obj/machinery/sparker/toxmix{
- dir = 2;
pixel_x = 25
},
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxins_mixing_output{
@@ -39038,6 +40397,10 @@
},
/turf/open/floor/plating/airless,
/area/science/test_area)
+"bMF" = (
+/obj/structure/reagent_dispensers/keg/mead,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"bMG" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -39100,7 +40463,6 @@
/area/engine/atmos)
"bMP" = (
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -39141,9 +40503,7 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bMV" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/visible{
- dir = 2
- },
+/obj/machinery/atmospherics/pipe/manifold/supply/visible,
/obj/machinery/meter/atmos/distro_loop,
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -39172,6 +40532,13 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos)
+"bNa" = (
+/obj/machinery/door/firedoor,
+/obj/structure/sign/departments/evac{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
"bNb" = (
/obj/item/airlock_painter,
/obj/structure/lattice,
@@ -39336,9 +40703,7 @@
/turf/open/floor/engine,
/area/science/mixing)
"bNw" = (
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_toxmix{
- dir = 2
- },
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_toxmix,
/turf/open/floor/engine,
/area/science/mixing)
"bNx" = (
@@ -39403,9 +40768,7 @@
/turf/open/floor/plating/airless,
/area/science/test_area)
"bNF" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating/airless,
/area/science/test_area)
"bNG" = (
@@ -39443,11 +40806,30 @@
/turf/open/floor/plasteel,
/area/quartermaster/office)
"bNL" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/obj/machinery/airalarm{
- pixel_y = 23
+ dir = 1;
+ pixel_y = -22
},
/turf/open/floor/plating,
/area/construction)
+"bNM" = (
+/obj/machinery/light,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/sign/directions/evac{
+ dir = 4;
+ pixel_y = -25
+ },
+/obj/structure/sign/directions/science{
+ dir = 4;
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
"bNN" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -39469,8 +40851,6 @@
dir = 6
},
/obj/item/radio/intercom{
- freerange = 0;
- frequency = 1459;
name = "Station Intercom (General)";
pixel_x = -30
},
@@ -39491,8 +40871,7 @@
pixel_y = 23
},
/obj/machinery/camera{
- c_tag = "Atmospherics Monitoring";
- dir = 2
+ c_tag = "Atmospherics Monitoring"
},
/obj/machinery/light{
dir = 4
@@ -39659,8 +41038,7 @@
/obj/structure/closet/emcloset,
/obj/machinery/camera{
c_tag = "Virology Airlock";
- network = list("ss13","medbay");
- dir = 2
+ network = list("ss13","medbay")
},
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -39772,7 +41150,6 @@
/area/tcommsat/computer)
"bOE" = (
/obj/machinery/sparker/toxmix{
- dir = 2;
pixel_x = 25
},
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxins_mixing_input{
@@ -39847,12 +41224,21 @@
/area/quartermaster/office)
"bOM" = (
/obj/structure/table,
-/obj/item/paper_bin,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
+/obj/item/clothing/head/welding{
+ pixel_x = -3;
+ pixel_y = 7
},
+/obj/item/clothing/head/welding{
+ pixel_x = -5;
+ pixel_y = 3
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/item/multitool,
+/obj/item/clothing/glasses/welding,
/turf/open/floor/plasteel,
-/area/tcommsat/computer)
+/area/engine/atmos)
"bON" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/shutters/preopen{
@@ -39863,9 +41249,9 @@
/area/security/detectives_office)
"bOO" = (
/obj/machinery/power/apc{
+ areastring = "/area/security/checkpoint/engineering";
dir = 8;
name = "Engineering Security APC";
- areastring = "/area/security/checkpoint/engineering";
pixel_x = -24
},
/obj/structure/cable{
@@ -39946,7 +41332,6 @@
/obj/effect/turf_decal/delivery,
/obj/machinery/door/window/northleft{
dir = 4;
- icon_state = "left";
name = "Atmospherics Desk";
req_access_txt = "24"
},
@@ -40178,6 +41563,13 @@
},
/turf/open/floor/plasteel/white,
/area/medical/virology)
+"bPv" = (
+/obj/machinery/door/firedoor,
+/obj/structure/sign/departments/evac{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
"bPw" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -40413,6 +41805,36 @@
},
/turf/open/floor/plasteel,
/area/tcommsat/computer)
+"bPR" = (
+/obj/structure/sign/mining{
+ pixel_y = 7
+ },
+/turf/closed/wall,
+/area/quartermaster/miningdock)
+"bPS" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/sign/departments/custodian{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bPT" = (
+/obj/structure/reagent_dispensers/foamtank,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/box,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"bPU" = (
/obj/item/shard,
/turf/open/floor/plating,
@@ -40781,7 +42203,6 @@
/obj/item/clothing/ears/earmuffs,
/obj/machinery/camera{
c_tag = "Testing Lab North";
- dir = 2;
network = list("ss13","rd")
},
/turf/open/floor/plasteel,
@@ -40790,7 +42211,6 @@
/obj/machinery/requests_console{
department = "Science";
departmentType = 2;
- dir = 2;
name = "Science Requests Console";
pixel_y = 30;
receive_ore_updates = 1
@@ -40821,6 +42241,21 @@
},
/turf/open/floor/engine,
/area/science/misc_lab)
+"bQX" = (
+/obj/structure/reagent_dispensers/watertank/high,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/box,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"bQY" = (
/obj/structure/table/reinforced,
/obj/item/integrated_circuit_printer,
@@ -40841,6 +42276,50 @@
/obj/item/stack/sheet/metal/ten,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"bRb" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/structure/sign/departments/engineering{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
+"bRc" = (
+/obj/structure/sign/poster/contraband/space_cola{
+ pixel_x = -32
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"bRd" = (
+/obj/structure/sign/poster/contraband/space_up{
+ pixel_x = -32;
+ pixel_y = 32
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"bRe" = (
+/obj/machinery/computer/slot_machine{
+ balance = 15;
+ money = 500;
+ pixel_x = -5
+ },
+/obj/structure/sign/poster/contraband/robust_softdrinks{
+ pixel_x = -32
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"bRf" = (
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
"bRg" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance{
@@ -40954,7 +42433,6 @@
/obj/machinery/door/firedoor/heavy,
/obj/machinery/door/window/northleft{
dir = 4;
- icon_state = "left";
name = "Atmospherics Desk";
req_access_txt = "24"
},
@@ -41119,7 +42597,7 @@
/area/medical/virology)
"bRO" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/white,
@@ -41339,6 +42817,14 @@
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"bSr" = (
+/obj/structure/sign/poster/official/fruit_bowl{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/hallway/primary/starboard)
"bSs" = (
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
@@ -41353,6 +42839,18 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/tcommsat/computer)
+"bSu" = (
+/obj/machinery/camera{
+ c_tag = "Starboard Primary Hallway 2"
+ },
+/obj/structure/sign/poster/contraband/eat{
+ pixel_y = 32;
+ poster_item_desc = "This poster promotes obesity, it also promotes giving the Chef a reason to keep their job."
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/hallway/primary/starboard)
"bSv" = (
/obj/machinery/camera{
c_tag = "Construction Area";
@@ -41456,20 +42954,13 @@
/area/engine/atmos)
"bSF" = (
/obj/structure/table,
-/obj/item/clothing/head/welding{
- pixel_x = -3;
- pixel_y = 7
+/obj/item/paper_bin,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
},
-/obj/item/clothing/head/welding{
- pixel_x = -5;
- pixel_y = 3
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/item/multitool,
+/obj/item/pen/fountain,
/turf/open/floor/plasteel,
-/area/engine/atmos)
+/area/tcommsat/computer)
"bSG" = (
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty,
@@ -41510,6 +43001,12 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/atmos)
+"bSL" = (
+/obj/structure/sign/poster/contraband/red_rum{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
"bSM" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
@@ -41525,6 +43022,15 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/atmos)
+"bSO" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/sign/poster/official/cohiba_robusto_ad{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel/grimy,
+/area/security/detectives_office)
"bSP" = (
/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
dir = 4
@@ -41608,9 +43114,9 @@
/area/medical/virology)
"bSX" = (
/obj/machinery/power/apc/highcap/five_k{
+ areastring = "/area/medical/virology";
dir = 1;
name = "Virology APC";
- areastring = "/area/medical/virology";
pixel_y = 24
},
/obj/structure/cable{
@@ -41626,6 +43132,15 @@
/obj/machinery/vending/medical,
/turf/open/floor/plasteel/white,
/area/medical/virology)
+"bSZ" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/structure/sign/poster/contraband/have_a_puff{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel/grimy,
+/area/security/detectives_office)
"bTa" = (
/obj/machinery/door/window/northleft{
dir = 4;
@@ -41807,6 +43322,13 @@
/obj/item/pen,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"bTq" = (
+/obj/structure/sign/poster/contraband/smoke{
+ desc = "This poster reminds us all that the Detective is a parasite. Year after year, they must get replacement lungs because of their addiction. ";
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel/grimy,
+/area/security/detectives_office)
"bTr" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -41815,6 +43337,68 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"bTs" = (
+/obj/structure/sign/poster/official/help_others{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
+"bTt" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/structure/reagent_dispensers/watertank,
+/turf/open/floor/plating,
+/area/maintenance/port)
+"bTu" = (
+/obj/machinery/recharge_station,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/sign/poster/official/state_laws{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/science/robotics/mechbay)
+"bTv" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/structure/sign/poster/official/ian{
+ pixel_x = 32;
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bTw" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/structure/sign/poster/official/love_ian{
+ pixel_x = 32;
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bTx" = (
+/obj/effect/turf_decal/bot,
+/obj/structure/sign/poster/official/pda_ad{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bTy" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/sign/poster/contraband/hacking_guide{
+ pixel_y = 32
+ },
+/turf/open/floor/plating,
+/area/maintenance/aft)
"bTz" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
@@ -41900,9 +43484,9 @@
/area/tcommsat/computer)
"bTJ" = (
/obj/machinery/power/apc{
- name = "Aft Hall APC";
areastring = "/area/hallway/primary/aft";
dir = 8;
+ name = "Aft Hall APC";
pixel_x = -25;
pixel_y = 1
},
@@ -42223,6 +43807,21 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"bUw" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/sign/poster/contraband/free_drone{
+ pixel_y = 32
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"bUx" = (
/obj/structure/disposalpipe/junction/yjunction{
dir = 1
@@ -42252,11 +43851,27 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"bUA" = (
+/obj/machinery/door/poddoor/preopen{
+ id = "Engineering";
+ name = "engineering security door"
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/shower{
+ dir = 8
+ },
+/obj/structure/sign/warning/enginesafety{
+ pixel_x = 32
+ },
+/obj/structure/sign/poster/official/safety_eye_protection{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"bUB" = (
/obj/machinery/power/apc{
- dir = 2;
- name = "Telecomms Monitoring APC";
areastring = "/area/tcommsat/computer";
+ name = "Telecomms Monitoring APC";
pixel_y = -24
},
/obj/structure/cable{
@@ -42401,6 +44016,7 @@
/area/engine/atmos)
"bUU" = (
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"bUV" = (
@@ -42508,7 +44124,6 @@
/area/hallway/primary/aft)
"bVg" = (
/obj/item/radio/intercom{
- broadcasting = 0;
name = "Station Intercom (General)";
pixel_y = 20
},
@@ -42632,9 +44247,7 @@
/turf/open/space,
/area/space/nearstation)
"bVx" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/on{
- dir = 2
- },
+/obj/machinery/atmospherics/components/unary/outlet_injector/on,
/turf/open/floor/plating/airless,
/area/maintenance/port/aft)
"bVy" = (
@@ -42706,6 +44319,19 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"bVH" = (
+/obj/machinery/camera{
+ c_tag = "Engineering Storage";
+ dir = 4
+ },
+/obj/machinery/rnd/production/protolathe/department/engineering,
+/obj/structure/sign/poster/contraband/power{
+ desc = "Lord Singuloth must feed. Annoyingly, it's really easy for people to sabotage containment and let Lord Singuloth eat the entire station.. For this reason, Nanotrasen prefers Supermatter reactors.";
+ pixel_x = -32;
+ poster_item_desc = "This poster depicts Lord Singuloth. Nanotrasen doesn't approve. Nanotrasen wants Supermatter over Singularities, as they are usually much safer."
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"bVI" = (
/turf/closed/wall/r_wall,
/area/tcommsat/server)
@@ -42716,6 +44342,12 @@
/obj/machinery/vending/snack/random,
/turf/open/floor/plasteel,
/area/engine/break_room)
+"bVL" = (
+/obj/machinery/shower{
+ dir = 8
+ },
+/turf/open/floor/plasteel/freezer,
+/area/security/prison)
"bVM" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
@@ -42899,6 +44531,13 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/medical/virology)
+"bWk" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/plasteel,
+/area/quartermaster/office)
"bWl" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -42956,9 +44595,7 @@
/turf/open/floor/plasteel,
/area/science/misc_lab)
"bWq" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2
- },
+/obj/machinery/atmospherics/components/binary/pump,
/turf/open/floor/plasteel,
/area/science/misc_lab)
"bWr" = (
@@ -43037,9 +44674,9 @@
dir = 1
},
/obj/machinery/power/apc/highcap/five_k{
+ areastring = "/area/tcommsat/server";
dir = 1;
name = "Telecomms Server APC";
- areastring = "/area/tcommsat/server";
pixel_y = 25
},
/obj/structure/cable{
@@ -43153,8 +44790,6 @@
/area/security/checkpoint/engineering)
"bWR" = (
/obj/item/radio/intercom{
- freerange = 0;
- frequency = 1459;
name = "Station Intercom (General)";
pixel_x = -30
},
@@ -43444,6 +45079,17 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/science/circuit)
+"bXu" = (
+/obj/machinery/camera{
+ c_tag = "Bar West";
+ dir = 4
+ },
+/obj/machinery/computer/arcade/orion_trail,
+/obj/structure/sign/poster/official/foam_force_ad{
+ pixel_x = -32
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"bXv" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
@@ -43608,6 +45254,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/item/cartridge/atmos,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXS" = (
@@ -43615,23 +45262,15 @@
dir = 4
},
/obj/machinery/portable_atmospherics/canister,
-/obj/effect/turf_decal/bot{
- dir = 2
- },
-/turf/open/floor/plasteel{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
/area/engine/atmos)
"bXT" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 8
},
-/obj/effect/turf_decal/bot{
- dir = 2
- },
-/turf/open/floor/plasteel{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
/area/engine/atmos)
"bXU" = (
/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
@@ -43770,12 +45409,8 @@
/area/science/misc_lab)
"bYk" = (
/obj/structure/reagent_dispensers/fueltank,
-/obj/effect/turf_decal/bot{
- dir = 2
- },
-/turf/open/floor/plasteel{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
/area/science/misc_lab)
"bYl" = (
/obj/structure/disposalpipe/segment,
@@ -43790,12 +45425,8 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/effect/turf_decal/bot{
- dir = 2
- },
-/turf/open/floor/plasteel{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
/area/science/misc_lab)
"bYn" = (
/obj/structure/disposalpipe/segment,
@@ -43934,29 +45565,22 @@
/turf/open/floor/plasteel,
/area/tcommsat/computer)
"bYG" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/obj/effect/turf_decal/tile/yellow{
+/obj/structure/chair{
dir = 8
},
+/obj/machinery/light,
+/obj/effect/landmark/start/assistant,
/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
+/area/quartermaster/office)
"bYH" = (
/turf/closed/wall,
/area/engine/break_room)
"bYI" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 2
- },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bYJ" = (
@@ -44043,6 +45667,7 @@
/area/engine/atmos)
"bYU" = (
/obj/machinery/portable_atmospherics/canister/toxins,
+/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"bYV" = (
@@ -44118,6 +45743,22 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/break_room)
+"bZf" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"bZg" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -44253,13 +45894,17 @@
/area/engine/break_room)
"bZz" = (
/obj/structure/table,
-/obj/machinery/cell_charger,
/obj/machinery/light_switch{
pixel_x = -23
},
/obj/machinery/light{
dir = 8
},
+/obj/item/book/manual/wiki/engineering_hacking{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/book/manual/wiki/engineering_construction,
/turf/open/floor/plasteel,
/area/engine/break_room)
"bZA" = (
@@ -44324,9 +45969,9 @@
/area/engine/break_room)
"bZF" = (
/obj/machinery/power/apc{
+ areastring = "/area/engine/atmos";
dir = 8;
name = "Atmospherics APC";
- areastring = "/area/engine/atmos";
pixel_x = -24
},
/obj/structure/cable{
@@ -44510,6 +46155,15 @@
},
/turf/open/floor/plasteel,
/area/science/misc_lab)
+"cab" = (
+/obj/structure/table,
+/obj/item/storage/pill_bottle/dice{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/obj/item/reagent_containers/food/snacks/cherrycupcake,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"cac" = (
/obj/structure/chair/stool,
/turf/open/floor/plating,
@@ -44552,6 +46206,18 @@
},
/turf/open/floor/circuit/telecomms/mainframe,
/area/tcommsat/server)
+"caj" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/drinks/soda_cans/starkist{
+ pixel_x = 5;
+ pixel_y = 7
+ },
+/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb{
+ pixel_x = -3;
+ pixel_y = 2
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"cak" = (
/obj/machinery/telecomms/hub/preset,
/obj/effect/turf_decal/tile/neutral{
@@ -44589,6 +46255,18 @@
},
/turf/open/floor/plasteel/dark,
/area/tcommsat/computer)
+"cam" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "kitchen";
+ name = "kitchen shutters"
+ },
+/obj/item/reagent_containers/food/snacks/bluecherrycupcake{
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/kitchen)
"can" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
@@ -44687,13 +46365,20 @@
/area/hallway/primary/aft)
"caw" = (
/obj/structure/table,
+/obj/item/storage/box/lights/mixed,
/obj/item/clothing/glasses/meson,
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -22
+/obj/item/clothing/glasses/meson,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
},
/turf/open/floor/plasteel,
-/area/engine/break_room)
+/area/engine/engineering)
"cax" = (
/obj/structure/closet/wardrobe/black,
/obj/effect/decal/cleanable/cobweb,
@@ -44730,6 +46415,18 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/security/checkpoint/engineering)
+"caB" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "kitchen";
+ name = "kitchen shutters"
+ },
+/obj/item/reagent_containers/food/snacks/cheesynachos{
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/kitchen)
"caC" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -44858,9 +46555,7 @@
/obj/machinery/atmospherics/components/binary/valve{
dir = 4
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/maintenance/aft)
"caQ" = (
@@ -44997,9 +46692,9 @@
/area/science/misc_lab)
"cbd" = (
/obj/machinery/power/apc{
+ areastring = "/area/science/misc_lab";
dir = 4;
name = "Testing Lab APC";
- areastring = "/area/science/misc_lab";
pixel_x = 26
},
/obj/structure/cable{
@@ -45097,13 +46792,11 @@
/turf/open/floor/plating,
/area/tcommsat/computer)
"cbp" = (
-/obj/structure/closet/secure_closet/engineering_chief{
- req_access_txt = "0"
- },
+/obj/structure/closet/secure_closet/engineering_chief,
/obj/machinery/power/apc/highcap/five_k{
+ areastring = "/area/crew_quarters/heads/chief";
dir = 4;
name = "CE Office APC";
- areastring = "/area/crew_quarters/heads/chief";
pixel_x = 24
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
@@ -45167,16 +46860,14 @@
dir = 8;
pixel_y = -22
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 2
- },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"cbu" = (
/obj/machinery/power/apc{
+ areastring = "/area/engine/break_room";
dir = 8;
name = "Engineering Foyer APC";
- areastring = "/area/engine/break_room";
pixel_x = -24
},
/obj/structure/cable{
@@ -45193,33 +46884,37 @@
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"cbw" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/disposalpipe/sorting/mail/flip{
+ dir = 8;
+ sortType = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
"cbx" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+ dir = 10
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
-"cby" = (
/obj/structure/cable{
icon_state = "1-2"
},
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
+"cby" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"cbz" = (
@@ -45416,6 +47111,11 @@
},
/turf/open/floor/plasteel,
/area/science/misc_lab)
+"cbX" = (
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/obj/machinery/atmospherics/miner/carbon_dioxide,
+/turf/open/floor/engine/co2,
+/area/engine/atmos)
"cbY" = (
/obj/structure/table/reinforced,
/obj/item/multitool,
@@ -45469,10 +47169,10 @@
/turf/open/space,
/area/solar/port/aft)
"ccd" = (
-/obj/structure/closet,
-/obj/effect/spawner/lootdrop/maintenance,
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/machinery/atmospherics/miner/nitrogen,
+/turf/open/floor/engine/n2,
+/area/engine/atmos)
"cce" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -45635,17 +47335,15 @@
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"ccu" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/disposalpipe/segment{
- dir = 5
+ icon_state = "1-2"
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
"ccv" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel,
@@ -45684,8 +47382,9 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"ccB" = (
-/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
-/turf/open/floor/engine/co2,
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/atmospherics/miner/oxygen,
+/turf/open/floor/engine/o2,
/area/engine/atmos)
"ccC" = (
/obj/machinery/air_sensor/atmos/carbon_tank,
@@ -45717,6 +47416,11 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/aft)
+"ccH" = (
+/obj/structure/table,
+/obj/item/paper/fluff/holodeck/disclaimer,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"ccI" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -45799,13 +47503,23 @@
/area/science/xenobiology)
"ccR" = (
/obj/machinery/portable_atmospherics/pump,
-/obj/effect/turf_decal/bot{
- dir = 2
- },
-/turf/open/floor/plasteel{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
/area/science/misc_lab)
+"ccS" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/structure/window,
+/obj/structure/sign/poster/official/high_class_martini{
+ pixel_x = -32
+ },
+/obj/effect/landmark/start/assistant,
+/obj/structure/chair/sofa/left{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"ccT" = (
/obj/machinery/light{
dir = 4
@@ -45893,38 +47607,25 @@
/turf/open/floor/plasteel,
/area/tcommsat/computer)
"cdh" = (
-/obj/structure/disposalpipe/sorting/mail/flip{
- dir = 8;
- sortType = 4
+/obj/structure/lattice/catwalk,
+/obj/item/stack/marker_beacon{
+ anchored = 1;
+ icon_state = "markerburgundy-on";
+ light_power = 3;
+ light_range = 3;
+ name = "Docking Beacon";
+ picked_color = "Burgundy"
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
-/area/maintenance/port/aft)
+/area/space/nearstation)
"cdi" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
+/obj/structure/grille,
+/obj/structure/lattice,
/turf/open/floor/plating,
-/area/maintenance/port/aft)
+/area/space/nearstation)
"cdj" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
+/turf/template_noop,
+/area/template_noop)
"cdk" = (
/obj/machinery/computer/atmos_alert,
/obj/effect/turf_decal/tile/neutral{
@@ -45949,6 +47650,7 @@
/obj/item/paper/monitorkey,
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/item/pen/fountain,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/chief)
"cdn" = (
@@ -45993,9 +47695,9 @@
/area/maintenance/starboard/aft)
"cds" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/starboard/aft";
dir = 8;
name = "Starboard Quarter Maintenance APC";
- areastring = "/area/maintenance/starboard/aft";
pixel_x = -25
},
/obj/structure/cable{
@@ -46162,6 +47864,13 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
+"cdM" = (
+/obj/structure/window,
+/obj/structure/chair/sofa/right{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"cdN" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -46176,6 +47885,15 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"cdP" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"cdQ" = (
/obj/structure/closet/emcloset,
/obj/effect/decal/cleanable/cobweb,
@@ -46187,12 +47905,8 @@
/area/maintenance/starboard/aft)
"cdS" = (
/obj/machinery/portable_atmospherics/scrubber,
-/obj/effect/turf_decal/bot{
- dir = 2
- },
-/turf/open/floor/plasteel{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
/area/science/misc_lab)
"cdT" = (
/obj/effect/turf_decal/stripes/line{
@@ -46220,9 +47934,9 @@
/area/maintenance/starboard/aft)
"cdW" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/port/aft";
dir = 8;
name = "Port Quarter Maintenance APC";
- areastring = "/area/maintenance/port/aft";
pixel_x = -25;
pixel_y = 1
},
@@ -46239,6 +47953,13 @@
},
/turf/open/floor/plasteel/white,
/area/science/research)
+"cdY" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"cdZ" = (
/obj/machinery/telecomms/processor/preset_two,
/turf/open/floor/plasteel/dark/telecomms,
@@ -46313,16 +48034,18 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cek" = (
-/obj/machinery/door/poddoor/preopen{
- id = "Engineering";
- name = "engineering security door"
- },
-/obj/effect/turf_decal/delivery,
-/obj/machinery/shower{
- dir = 8
+/obj/structure/closet/wardrobe/grey,
+/obj/machinery/requests_console{
+ department = "Locker Room";
+ pixel_x = -32
},
+/obj/item/clothing/under/assistantformal,
+/obj/item/clothing/under/assistantformal,
+/obj/item/clothing/under/assistantformal,
+/obj/item/clothing/under/color/grey,
+/obj/item/clothing/under/color/grey,
/turf/open/floor/plasteel,
-/area/engine/engineering)
+/area/crew_quarters/locker)
"cel" = (
/obj/machinery/door/poddoor/preopen{
id = "Engineering";
@@ -46399,6 +48122,18 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"ceu" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"cev" = (
/obj/effect/spawner/structure/window,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -46529,12 +48264,8 @@
/area/maintenance/starboard/aft)
"ceP" = (
/obj/machinery/portable_atmospherics/canister,
-/obj/effect/turf_decal/bot{
- dir = 2
- },
-/turf/open/floor/plasteel{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
/area/science/misc_lab)
"ceQ" = (
/obj/structure/cable{
@@ -46604,18 +48335,18 @@
"cfa" = (
/obj/structure/rack,
/obj/item/storage/belt/utility,
-/obj/item/wrench,
-/obj/item/weldingtool,
-/obj/item/clothing/head/welding{
- pixel_x = -3;
- pixel_y = 5
- },
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/item/weldingtool/largetank,
+/obj/item/clothing/head/welding{
+ pixel_x = -3;
+ pixel_y = 5
+ },
+/obj/item/clothing/glasses/welding,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cfb" = (
@@ -46634,7 +48365,7 @@
/area/crew_quarters/heads/chief)
"cfd" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/closet/radiation,
@@ -46658,6 +48389,16 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"cff" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"cfg" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -46734,10 +48475,9 @@
/area/maintenance/aft)
"cfr" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 2;
external_pressure_bound = 140;
- pressure_checks = 0;
- name = "killroom vent"
+ name = "killroom vent";
+ pressure_checks = 0
},
/obj/machinery/camera{
c_tag = "Xenobiology Kill Room";
@@ -46801,14 +48541,33 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cfB" = (
-/obj/structure/closet/secure_closet/engineering_personal,
-/obj/effect/turf_decal/tile/yellow,
+"cfA" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"cfB" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"cfC" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
dir = 4
},
/turf/open/floor/plasteel,
-/area/engine/engineering)
+/area/crew_quarters/fitness)
"cfD" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/door/airlock/maintenance{
@@ -46821,6 +48580,18 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"cfE" = (
+/obj/machinery/button/door{
+ desc = "Bolts the doors to the Private Study.";
+ id = "PrivateStudy";
+ name = "Private Study Lock";
+ pixel_x = 25;
+ pixel_y = 25;
+ req_access_txt = "";
+ req_one_access_txt = "28;63"
+ },
+/turf/open/floor/wood,
+/area/library)
"cfF" = (
/obj/machinery/suit_storage_unit/ce,
/obj/effect/turf_decal/stripes/line{
@@ -46829,9 +48600,9 @@
/turf/open/floor/plasteel/white,
/area/crew_quarters/heads/chief)
"cfG" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
+/obj/effect/landmark/stationroom/box/engine,
+/turf/open/space/basic,
+/area/space)
"cfH" = (
/obj/machinery/button/door{
id = "ceprivacy";
@@ -46855,17 +48626,15 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/chief)
"cfI" = (
-/obj/structure/closet/secure_closet/engineering_personal,
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
+/obj/structure/disposalpipe/segment{
+ dir = 9
},
+/obj/effect/landmark/start/assistant,
/turf/open/floor/plasteel,
-/area/engine/engineering)
+/area/hallway/primary/central)
"cfJ" = (
/obj/machinery/light/small{
dir = 1
@@ -46929,6 +48698,14 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos)
+"cfS" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 8;
+ name = "8maintenance loot spawner"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"cfT" = (
/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 9
@@ -46941,6 +48718,17 @@
},
/turf/closed/wall,
/area/maintenance/disposal/incinerator)
+"cfV" = (
+/obj/structure/table,
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/item/stack/packageWrap,
+/obj/item/stack/packageWrap,
+/obj/item/hand_labeler,
+/turf/open/floor/plasteel,
+/area/engine/break_room)
"cfW" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -46953,9 +48741,8 @@
/area/maintenance/aft)
"cfX" = (
/obj/machinery/power/apc{
- dir = 2;
- name = "Incinerator APC";
areastring = "/area/maintenance/disposal/incinerator";
+ name = "Incinerator APC";
pixel_y = -24
},
/obj/structure/cable,
@@ -47064,7 +48851,6 @@
/area/science/xenobiology)
"cgl" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
- dir = 2;
external_pressure_bound = 120;
name = "killroom vent"
},
@@ -47094,11 +48880,11 @@
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"cgp" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
+/obj/structure/rack,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 4;
+ name = "4maintenance loot spawner"
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
@@ -47136,9 +48922,8 @@
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"cgu" = (
-/obj/structure/rack,
-/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"cgv" = (
@@ -47162,12 +48947,6 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cgx" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
"cgy" = (
/obj/machinery/light/small{
dir = 1
@@ -47236,32 +49015,44 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cgI" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
+"cgH" = (
+/obj/structure/closet/secure_closet/engineering_personal,
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
},
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/obj/item/clothing/under/overalls,
+/obj/item/clothing/under/overalls,
+/obj/item/radio/headset/headset_eng,
+/turf/open/floor/plasteel,
/area/engine/engineering)
-"cgJ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cgK" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
+"cgM" = (
+/obj/structure/closet/secure_closet/engineering_personal,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
},
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cgL" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine Room";
- req_access_txt = "10"
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
},
-/turf/open/floor/engine,
+/obj/item/clothing/under/overalls,
+/obj/item/clothing/under/overalls,
+/obj/item/radio/headset/headset_eng,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cgN" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/obj/structure/closet/secure_closet/engineering_electrical,
+/obj/item/storage/toolbox/artistic{
+ icon_state = "yellow";
+ item_state = "toolbox_yellow";
+ name = "Cable Toolbox";
+ pixel_y = 6
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cgO" = (
/obj/structure/rack,
@@ -47283,6 +49074,19 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/chief)
+"cgP" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/closet/secure_closet/engineering_welding,
+/obj/item/clothing/glasses/welding,
+/obj/item/clothing/glasses/welding,
+/obj/item/clothing/glasses/welding,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"cgQ" = (
/obj/machinery/camera{
c_tag = "Engineering East";
@@ -47483,7 +49287,6 @@
dir = 1
},
/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
name = "atmospherics mix pump"
},
/turf/open/floor/plasteel,
@@ -47672,27 +49475,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"chF" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"chG" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"chH" = (
/obj/structure/closet/firecloset,
/turf/open/floor/plating,
@@ -47722,13 +49504,6 @@
/obj/structure/lattice/catwalk,
/turf/open/space,
/area/solar/port/aft)
-"chM" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/solar/port/aft)
"chN" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -47788,40 +49563,14 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"chV" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/table/reinforced,
-/obj/item/tank/internals/emergency_oxygen/engi{
- pixel_x = 5
- },
-/obj/item/clothing/gloves/color/black,
-/obj/item/clothing/glasses/meson/engine,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"chX" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"chY" = (
/obj/machinery/shieldgen,
/turf/open/floor/plating,
/area/engine/engineering)
+"chZ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall,
+/area/crew_quarters/locker)
"cia" = (
/obj/effect/turf_decal/bot{
dir = 1
@@ -47834,6 +49583,14 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"cib" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 8;
+ name = "8maintenance loot spawner"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"cic" = (
/obj/effect/turf_decal/bot{
dir = 1
@@ -47856,9 +49613,9 @@
},
/obj/structure/reagent_dispensers/watertank,
/obj/machinery/power/apc/highcap/fifteen_k{
+ areastring = "/area/engine/engineering";
dir = 1;
name = "Engineering APC";
- areastring = "/area/engine/engineering";
pixel_y = 25
},
/obj/structure/cable{
@@ -47900,24 +49657,10 @@
"cig" = (
/turf/closed/wall,
/area/engine/engineering)
-"cii" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/table/reinforced,
-/obj/item/clothing/suit/radiation,
-/obj/item/clothing/head/radiation,
-/obj/item/clothing/glasses/meson,
-/obj/item/geiger_counter,
-/obj/item/geiger_counter,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+"cih" = (
+/obj/effect/spawner/lootdrop/keg,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"cij" = (
/obj/machinery/modular_computer/console/preset/engineering,
/obj/structure/cable{
@@ -47955,6 +49698,13 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/chief)
+"cil" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/light_construct{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"cim" = (
/turf/open/floor/plasteel,
/area/crew_quarters/heads/chief)
@@ -47983,15 +49733,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/chief)
-"cip" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"ciq" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -48001,13 +49742,6 @@
},
/turf/open/floor/plating,
/area/crew_quarters/heads/chief)
-"cir" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
"cis" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel,
@@ -48026,6 +49760,12 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/atmos)
+"ciw" = (
+/obj/structure/light_construct{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"cix" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/closed/wall/r_wall,
@@ -48115,8 +49855,10 @@
},
/area/maintenance/starboard/aft)
"ciK" = (
-/obj/structure/rack,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "12"
+ },
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"ciL" = (
@@ -48148,16 +49890,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"ciO" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"ciP" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -48169,17 +49901,16 @@
/obj/machinery/power/solar_control{
dir = 4;
id = "portsolar";
- name = "Port Quarter Solar Control";
- track = 0
+ name = "Port Quarter Solar Control"
},
/obj/structure/cable,
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
"ciR" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/solars/port/aft";
dir = 4;
name = "Port Quarter Solar APC";
- areastring = "/area/maintenance/solars/port/aft";
pixel_x = 23;
pixel_y = 2
},
@@ -48204,22 +49935,27 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"ciV" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/light_construct{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"ciW" = (
/obj/effect/landmark/blobstart,
/turf/open/floor/plating,
/area/engine/engineering)
"ciX" = (
-/obj/structure/closet/crate,
-/obj/item/stack/sheet/metal/fifty,
-/obj/item/stack/rods/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/electronics/airlock,
-/obj/item/electronics/airlock,
-/obj/item/stock_parts/cell/high/plus,
-/obj/item/stack/sheet/mineral/plasma{
- amount = 30
+/obj/machinery/light{
+ dir = 1
},
-/turf/open/floor/plating,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"ciY" = (
/obj/machinery/door/poddoor{
@@ -48324,12 +50060,6 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/chief)
-"cjh" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cji" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -48615,6 +50345,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/structure/closet/wardrobe/engineering_yellow,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cjT" = (
@@ -48695,6 +50426,11 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/chief)
+"cjZ" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"cka" = (
/obj/machinery/door/poddoor/preopen{
id = "testlab";
@@ -48804,14 +50540,22 @@
/turf/closed/wall,
/area/maintenance/starboard/aft)
"ckp" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 2;
- name = "2maintenance loot spawner"
+ lootcount = 3;
+ name = "3maintenance loot spawner"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"ckq" = (
+/obj/structure/table,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/rods/fifty,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"ckr" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -48828,9 +50572,9 @@
/area/maintenance/solars/starboard/aft)
"ckt" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/solars/starboard/aft";
dir = 8;
name = "Starboard Quarter Solar APC";
- areastring = "/area/maintenance/solars/starboard/aft";
pixel_x = -26;
pixel_y = 3
},
@@ -48904,6 +50648,14 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"ckE" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/door/airlock/maintenance{
+ name = "Locker Room Maintenance";
+ req_access_txt = "12"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port)
"ckF" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
@@ -48928,6 +50680,15 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"ckJ" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 2;
+ name = "2maintenance loot spawner"
+ },
+/obj/item/storage/toolbox/electrical,
+/turf/open/floor/plating,
+/area/maintenance/department/medical/morgue)
"ckK" = (
/obj/structure/tank_dispenser,
/obj/effect/turf_decal/bot{
@@ -48992,10 +50753,27 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/chief)
+"ckP" = (
+/obj/structure/noticeboard{
+ pixel_y = -27
+ },
+/obj/structure/chair/sofa/right{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"ckQ" = (
/obj/structure/closet/cardboard,
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
+"ckR" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/item/coin/gold,
+/obj/item/coin/gold,
+/obj/item/coin/gold,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"ckS" = (
/obj/structure/closet/cardboard,
/turf/open/floor/plating,
@@ -49069,9 +50847,7 @@
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"cle" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 2
- },
+/obj/machinery/atmospherics/pipe/simple/general/visible,
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"clf" = (
@@ -49185,13 +50961,10 @@
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"cls" = (
-/obj/structure/rack,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 3;
- name = "3maintenance loot spawner"
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating,
+/turf/closed/wall,
/area/maintenance/starboard/aft)
"clt" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -49325,6 +51098,12 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/engine_smes)
+"clH" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"clI" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -49339,23 +51118,33 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/engine/engineering)
-"clM" = (
-/obj/structure/table,
-/obj/item/crowbar/large,
-/obj/item/storage/box/lights/mixed,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
+"clK" = (
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/metal/fifty,
+/obj/item/stack/rods/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/electronics/airlock,
+/obj/item/electronics/airlock,
+/obj/item/stock_parts/cell/high/plus,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 30
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel,
+/obj/item/lightreplacer,
+/obj/item/lightreplacer,
+/turf/open/floor/plating,
/area/engine/engineering)
+"clL" = (
+/obj/structure/table,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/item/coin/silver,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"clM" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/item/coin/silver,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"clN" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/yellow{
@@ -49364,13 +51153,21 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"clO" = (
-/obj/machinery/vr_sleeper,
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/landmark/start/janitor,
+/mob/living/simple_animal/hostile/lizard{
+ name = "Wags-His-Tail";
+ real_name = "Wags-His-Tail"
},
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/area/janitor)
+"clP" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plating,
+/area/maintenance/port)
"clQ" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
@@ -49378,21 +51175,9 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"clR" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/table,
-/obj/item/book/manual/wiki/engineering_hacking{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/book/manual/wiki/engineering_construction,
-/obj/item/clothing/glasses/meson,
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
+/obj/machinery/portable_atmospherics/pump,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"clS" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/machinery/rnd/production/techfab/department/security,
@@ -49403,28 +51188,30 @@
/turf/open/floor/plasteel,
/area/security/main)
"clT" = (
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/turf/open/floor/engine/n2,
-/area/engine/atmos)
+/obj/machinery/portable_atmospherics/scrubber,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"clU" = (
/turf/open/floor/engine/n2,
/area/engine/atmos)
"clV" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/turf/open/floor/engine/o2,
-/area/engine/atmos)
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"clW" = (
/turf/open/floor/engine/o2,
/area/engine/atmos)
"clX" = (
-/obj/effect/landmark/event_spawn,
-/obj/effect/landmark/xmastree,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
+/obj/machinery/light{
dir = 1
},
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/hallway/primary/central)
"clY" = (
/obj/effect/landmark/xeno_spawn,
/turf/open/floor/engine/air,
@@ -49432,17 +51219,28 @@
"clZ" = (
/turf/open/floor/engine/air,
/area/engine/atmos)
+"cma" = (
+/obj/machinery/hydroponics/constructable,
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = 29
+ },
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"cmb" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/maintenance/disposal/incinerator)
"cmc" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 2
+/obj/machinery/camera{
+ c_tag = "Starboard Primary Hallway"
},
-/turf/closed/wall/r_wall,
-/area/maintenance/disposal/incinerator)
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
"cmd" = (
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
@@ -49506,15 +51304,27 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
+"cmm" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/condiment/flour,
+/obj/item/kitchen/rollingpin,
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/kitchen)
"cmn" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
+/obj/structure/table/wood,
+/obj/item/storage/pill_bottle/dice,
+/turf/open/floor/plasteel,
+/area/security/prison)
"cmo" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"cmp" = (
+/obj/structure/table/wood,
+/obj/item/toy/cards/deck,
+/turf/open/floor/plasteel,
+/area/security/prison)
"cmq" = (
/obj/effect/landmark/xeno_spawn,
/obj/structure/disposalpipe/segment,
@@ -49523,21 +51333,18 @@
},
/area/maintenance/starboard/aft)
"cmr" = (
-/obj/structure/closet/toolcloset,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
+/obj/structure/chair/comfy/brown{
+ dir = 8
},
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
+/turf/open/floor/plasteel,
+/area/security/prison)
"cms" = (
-/obj/machinery/door/airlock/maintenance{
- req_access_txt = "12"
+/obj/structure/chair/comfy/brown{
+ color = "#66b266";
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
+/turf/open/floor/plasteel,
+/area/security/prison)
"cmt" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -49564,8 +51371,7 @@
/obj/machinery/power/solar_control{
dir = 1;
id = "starboardsolar";
- name = "Starboard Quarter Solar Control";
- track = 0
+ name = "Starboard Quarter Solar Control"
},
/obj/structure/cable{
icon_state = "0-4"
@@ -49645,6 +51451,13 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/engine/engineering)
+"cmE" = (
+/obj/structure/chair/comfy/brown{
+ color = "#596479";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"cmF" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
@@ -49656,7 +51469,7 @@
/area/engine/engineering)
"cmG" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/cable{
@@ -49673,6 +51486,34 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"cmH" = (
+/obj/item/electropack/shockcollar,
+/obj/item/assembly/signaler,
+/turf/open/floor/plating,
+/area/security/prison)
+"cmI" = (
+/obj/structure/bed,
+/obj/effect/spawner/lootdrop/bedsheet,
+/turf/open/floor/plating,
+/area/security/prison)
+"cmJ" = (
+/obj/machinery/door/airlock/external{
+ name = "External Access";
+ req_access_txt = "13"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"cmK" = (
+/obj/machinery/door/airlock/external{
+ name = "External Access";
+ req_access_txt = "13"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"cmL" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -49722,9 +51563,7 @@
/turf/open/floor/plasteel,
/area/construction)
"cmY" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 2
- },
+/obj/machinery/atmospherics/components/binary/pump/on,
/obj/machinery/light/small{
dir = 8
},
@@ -49874,9 +51713,6 @@
/area/engine/engine_smes)
"cnr" = (
/obj/machinery/door/window/southleft{
- base_state = "left";
- dir = 2;
- icon_state = "left";
name = "Engineering Delivery";
req_access_txt = "10"
},
@@ -49902,18 +51738,6 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cnx" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cny" = (
/obj/effect/landmark/start/station_engineer,
/turf/open/floor/plasteel,
@@ -49968,7 +51792,6 @@
/area/maintenance/aft)
"cnF" = (
/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 2;
name = "Waste Out"
},
/obj/structure/disposalpipe/segment{
@@ -49993,11 +51816,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"cnJ" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/spawner/lootdrop/maintenance,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"cnK" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -50171,15 +51989,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"coc" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine Room";
- req_access_txt = "10"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cop" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/incinerator_input{
dir = 1
@@ -50342,16 +52151,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"coK" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
"coL" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -50364,18 +52163,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"coM" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"coS" = (
/obj/structure/rack,
/obj/item/gun/energy/laser{
@@ -50387,39 +52174,18 @@
pixel_x = 3;
pixel_y = -3
},
-/obj/effect/turf_decal/bot{
- dir = 2
- },
+/obj/effect/turf_decal/bot,
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
-/turf/open/floor/plasteel{
- dir = 2
- },
+/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"coT" = (
/obj/machinery/atmospherics/pipe/simple/general/visible,
/obj/machinery/meter,
/turf/open/floor/engine,
/area/science/misc_lab)
-"coZ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
-/obj/structure/closet/secure_closet/engineering_electrical,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cpa" = (
-/obj/machinery/light{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/structure/closet/secure_closet/engineering_welding,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cpb" = (
/obj/structure/closet/emcloset,
/obj/machinery/light/small{
@@ -50481,9 +52247,7 @@
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"cpk" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"cpl" = (
@@ -50539,59 +52303,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cps" = (
-/obj/structure/table,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cpt" = (
-/obj/structure/table,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/storage/toolbox/electrical{
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cpu" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine Room";
- req_access_txt = "10"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cpv" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cpx" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cpy" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cpA" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -50606,15 +52317,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/bridge)
-"cpD" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cpE" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -50645,7 +52347,6 @@
"cpO" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 2;
name = "Incinerator Output Pump"
},
/turf/open/space,
@@ -50669,9 +52370,8 @@
"cpS" = (
/obj/structure/cable,
/obj/machinery/power/apc{
- dir = 2;
- name = "SMES room APC";
areastring = "/area/engine/engine_smes";
+ name = "SMES room APC";
pixel_y = -24
},
/obj/effect/turf_decal/stripes/line{
@@ -50702,158 +52402,18 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/engine/engine_smes)
-"cpV" = (
-/obj/machinery/camera{
- c_tag = "Engineering Storage";
- dir = 4
- },
-/obj/machinery/rnd/production/protolathe/department/engineering,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cpW" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cpX" = (
-/obj/structure/table,
-/obj/item/stack/rods/fifty,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cpY" = (
/obj/structure/cable{
icon_state = "2-8"
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cpZ" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/mechanical{
- pixel_y = 5
- },
-/obj/item/flashlight{
- pixel_x = 1;
- pixel_y = 5
- },
-/obj/item/flashlight{
- pixel_x = 1;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cqa" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cqb" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqc" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqd" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqe" = (
-/obj/effect/turf_decal/stripes/corner,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 6
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqf" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqg" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 8;
- name = "Gas to Filter"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqh" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -26
- },
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Fore";
- dir = 1;
- network = list("ss13","engine");
- pixel_x = 23
- },
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqi" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/light,
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqj" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/button/door{
- id = "engsm";
- name = "Radiation Shutters Control";
- pixel_y = -24;
- req_access_txt = "10"
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cql" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqm" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cqn" = (
/obj/structure/grille,
/turf/open/floor/plating,
@@ -50902,13 +52462,6 @@
/obj/machinery/door/poddoor/incinerator_atmos_main,
/turf/open/floor/engine/vacuum,
/area/maintenance/disposal/incinerator)
-"cqu" = (
-/obj/machinery/door/airlock/external{
- name = "External Access";
- req_access_txt = "13"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"cqv" = (
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/open/floor/plating,
@@ -50942,53 +52495,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cqA" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/obj/machinery/door/airlock/external{
- name = "Engineering External Access";
- req_access_txt = "10;13"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cqB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqC" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqD" = (
-/obj/structure/sign/warning/radiation,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cqE" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/airlock/engineering/glass/critical{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cqF" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"cqG" = (
/obj/structure/rack,
/obj/item/storage/box/rubbershot{
@@ -51022,11 +52528,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
-"cqJ" = (
-/obj/structure/cable,
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/solar/starboard/aft)
"cqK" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/maintenance{
@@ -51041,12 +52542,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cqM" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
"cqN" = (
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty,
@@ -51076,91 +52571,20 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cqQ" = (
-/obj/structure/reagent_dispensers/watertank,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cqR" = (
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cqS" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/structure/closet/emcloset/anchored,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cqT" = (
-/obj/structure/sign/warning/vacuum/external{
- pixel_x = 32
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cqU" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
- },
-/obj/effect/turf_decal/bot,
-/obj/machinery/portable_atmospherics/canister,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"cqY" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/engineering)
-"cqZ" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cra" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Gas to Filter"
- },
-/obj/machinery/airalarm/engine{
- dir = 4;
- pixel_x = -23
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"crb" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
- name = "Gas to Chamber"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"crc" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"crd" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine Room";
- req_access_txt = "10"
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"crh" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plating,
/area/engine/engineering)
-"cri" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"crk" = (
/obj/structure/lattice/catwalk,
/turf/open/space,
@@ -51209,36 +52633,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/engineering)
-"crs" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 6
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"crt" = (
-/obj/machinery/door/airlock/engineering/glass/critical{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cru" = (
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"crv" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"crw" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
@@ -51249,9 +52643,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"crz" = (
@@ -51331,44 +52723,6 @@
/obj/structure/lattice/catwalk,
/turf/open/space,
/area/solar/starboard/aft)
-"crH" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"crI" = (
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"crJ" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"crK" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
- dir = 8
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"crL" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"crM" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"crP" = (
/obj/machinery/light,
/turf/open/floor/plasteel,
@@ -51380,26 +52734,6 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
-"crT" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"crU" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
- },
-/turf/open/space,
-/area/space/nearstation)
-"crV" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"crW" = (
/obj/machinery/light/small{
dir = 8
@@ -51418,39 +52752,11 @@
/obj/structure/transit_tube,
/turf/open/floor/plating,
/area/engine/engineering)
-"crZ" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"csa" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"csb" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 9
- },
-/turf/open/space,
-/area/space/nearstation)
"csc" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/space,
/area/maintenance/aft)
-"csd" = (
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cse" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"csg" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
@@ -51467,13 +52773,6 @@
},
/turf/open/space,
/area/space/nearstation)
-"csj" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
"csk" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating/airless,
@@ -51521,77 +52820,10 @@
/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
-"css" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/turf/open/space,
-/area/space/nearstation)
-"csu" = (
-/obj/structure/closet/firecloset,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"csv" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
- },
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"csx" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/turf/open/space,
-/area/space/nearstation)
-"csy" = (
-/obj/structure/table,
-/obj/item/weldingtool,
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
-"csA" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
"csD" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
-"csE" = (
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/solar/starboard/aft)
-"csH" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"csI" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"csM" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/simple/yellow/visible,
@@ -51607,30 +52839,6 @@
/obj/structure/transit_tube/horizontal,
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
-"csP" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"csR" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"csT" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/landmark/xmastree,
@@ -51659,27 +52867,6 @@
},
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
-"csY" = (
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/structure/cable,
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/solar/starboard/aft)
-"csZ" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/solar/starboard/aft)
"cta" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
@@ -51978,7 +53165,7 @@
pixel_y = 4
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -52031,9 +53218,9 @@
icon_state = "0-8"
},
/obj/machinery/power/apc{
+ areastring = "/area/ai_monitored/turret_protected/aisat_interior";
dir = 4;
name = "MiniSat Foyer APC";
- areastring = "/area/ai_monitored/turret_protected/aisat_interior";
pixel_x = 27
},
/obj/structure/chair,
@@ -52098,8 +53285,6 @@
"cud" = (
/obj/machinery/turretid{
control_area = "/area/ai_monitored/turret_protected/aisat_interior";
- enabled = 1;
- icon_state = "control_standby";
name = "Antechamber Turret Control";
pixel_y = -24;
req_access = null;
@@ -52178,7 +53363,6 @@
/area/ai_monitored/turret_protected/aisat/service)
"cun" = (
/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
name = "Mix to MiniSat"
},
/obj/effect/turf_decal/stripes/line,
@@ -52187,12 +53371,10 @@
"cuo" = (
/obj/machinery/portable_atmospherics/canister/air,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat/atmos)
"cup" = (
@@ -52276,7 +53458,7 @@
amount = 35
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/corner{
@@ -52344,8 +53526,6 @@
},
/obj/machinery/turretid{
control_area = "/area/ai_monitored/turret_protected/aisat/atmos";
- enabled = 1;
- icon_state = "control_standby";
name = "Atmospherics Turret Control";
pixel_x = -27;
req_access = null;
@@ -52371,8 +53551,6 @@
},
/obj/machinery/turretid{
control_area = "/area/ai_monitored/turret_protected/aisat/service";
- enabled = 1;
- icon_state = "control_standby";
name = "Service Bay Turret Control";
pixel_x = 27;
req_access = null;
@@ -52461,9 +53639,9 @@
/area/ai_monitored/turret_protected/aisat/atmos)
"cuM" = (
/obj/machinery/power/apc{
+ areastring = "/area/ai_monitored/turret_protected/aisat/atmos";
dir = 8;
name = "MiniSat Atmospherics APC";
- areastring = "/area/ai_monitored/turret_protected/aisat/atmos";
pixel_x = -27
},
/obj/structure/cable{
@@ -52587,9 +53765,9 @@
/area/ai_monitored/turret_protected/aisat/service)
"cuX" = (
/obj/machinery/power/apc{
+ areastring = "/area/ai_monitored/turret_protected/aisat/service";
dir = 4;
name = "MiniSat Service Bay APC";
- areastring = "/area/ai_monitored/turret_protected/aisat/service";
pixel_x = 27
},
/obj/structure/cable{
@@ -52674,8 +53852,6 @@
},
/obj/machinery/turretid{
control_area = "/area/ai_monitored/turret_protected/aisat/hallway";
- enabled = 1;
- icon_state = "control_standby";
name = "Chamber Hallway Turret Control";
pixel_x = 32;
pixel_y = -24;
@@ -52793,23 +53969,18 @@
"cvx" = (
/obj/effect/landmark/start/ai/secondary,
/obj/item/radio/intercom{
- anyai = 1;
freerange = 1;
listening = 0;
name = "Custom Channel";
pixel_y = 28
},
/obj/item/radio/intercom{
- broadcasting = 0;
freerange = 1;
- listening = 1;
name = "Common Channel";
pixel_x = -27;
pixel_y = 5
},
/obj/item/radio/intercom{
- anyai = 1;
- broadcasting = 0;
freerange = 1;
frequency = 1447;
name = "Private Channel";
@@ -52832,23 +54003,18 @@
"cvA" = (
/obj/effect/landmark/start/ai/secondary,
/obj/item/radio/intercom{
- anyai = 1;
freerange = 1;
listening = 0;
name = "Custom Channel";
pixel_y = 28
},
/obj/item/radio/intercom{
- broadcasting = 0;
freerange = 1;
- listening = 1;
name = "Common Channel";
pixel_x = 27;
pixel_y = 5
},
/obj/item/radio/intercom{
- anyai = 1;
- broadcasting = 0;
freerange = 1;
frequency = 1447;
name = "Private Channel";
@@ -52947,7 +54113,7 @@
network = list("aicore")
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/circuit,
@@ -53044,9 +54210,9 @@
"cwa" = (
/obj/structure/cable,
/obj/machinery/power/apc{
+ areastring = "/area/ai_monitored/turret_protected/aisat/hallway";
dir = 4;
name = "MiniSat Chamber Hallway APC";
- areastring = "/area/ai_monitored/turret_protected/aisat/hallway";
pixel_x = 27
},
/turf/open/floor/circuit,
@@ -53145,7 +54311,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/dark,
@@ -53243,13 +54409,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/ai)
-"cwy" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/table_frame,
-/obj/item/wirerod,
-/obj/effect/spawner/lootdrop/maintenance,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"cwz" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -53309,9 +54468,8 @@
icon_state = "0-8"
},
/obj/machinery/power/apc/highcap/five_k{
- dir = 2;
- name = "AI Chamber APC";
areastring = "/area/ai_monitored/turret_protected/ai";
+ name = "AI Chamber APC";
pixel_y = -24
},
/obj/machinery/flasher{
@@ -53451,14 +54609,6 @@
},
/turf/open/floor/plating,
/area/security/processing)
-"cxW" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/obj/machinery/door/airlock/external{
- name = "External Access";
- req_access_txt = "13"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
"cxY" = (
/obj/machinery/camera{
c_tag = "Arrivals Escape Pod 1";
@@ -53677,19 +54827,6 @@
},
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
-"czE" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"czF" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/obj/machinery/meter,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"czG" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
@@ -53737,15 +54874,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
-"czP" = (
-/obj/structure/chair/stool/bar,
-/obj/effect/landmark/event_spawn,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
"czQ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/disposalpipe/segment,
@@ -53898,109 +55026,10 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cAl" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAm" = (
-/obj/machinery/power/supermatter_crystal/engine,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cAo" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAp" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 4;
- name = "Cooling Loop to Gas"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAq" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAr" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Gas to Mix"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAs" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAt" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAu" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/emitter/anchored{
- dir = 4;
- state = 2
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"cAy" = (
/obj/structure/closet/secure_closet/freezer/kitchen/maintenance,
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cAz" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
"cAA" = (
/obj/machinery/light/small{
dir = 1
@@ -54046,9 +55075,8 @@
icon_state = "4-8"
},
/obj/machinery/power/apc{
- dir = 2;
- name = "Head of Personnel APC";
areastring = "/area/crew_quarters/heads/hop";
+ name = "Head of Personnel APC";
pixel_y = -24
},
/obj/structure/cable{
@@ -54076,14 +55104,6 @@
/obj/machinery/light/small,
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cAL" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/mob/living/simple_animal/hostile/lizard{
- name = "Wags-His-Tail";
- real_name = "Wags-His-Tail"
- },
-/turf/open/floor/plasteel,
-/area/janitor)
"cAN" = (
/obj/machinery/door/airlock/maintenance{
name = "Security Maintenance";
@@ -54100,10 +55120,6 @@
},
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
-"cAP" = (
-/obj/structure/sign/warning/fire,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"cAQ" = (
/obj/structure/chair,
/turf/open/floor/plating,
@@ -54122,23 +55138,18 @@
"cAS" = (
/obj/effect/landmark/start/ai,
/obj/item/radio/intercom{
- broadcasting = 0;
freerange = 1;
- listening = 1;
name = "Common Channel";
pixel_x = -27;
pixel_y = -9
},
/obj/item/radio/intercom{
- anyai = 1;
freerange = 1;
listening = 0;
name = "Custom Channel";
pixel_y = -31
},
/obj/item/radio/intercom{
- anyai = 1;
- broadcasting = 0;
freerange = 1;
frequency = 1447;
name = "Private Channel";
@@ -54233,7 +55244,6 @@
"cBb" = (
/obj/machinery/camera/motion{
c_tag = "MiniSat AI Chamber South";
- dir = 2;
network = list("aicore")
},
/turf/open/floor/circuit,
@@ -54265,7 +55275,6 @@
"cBf" = (
/obj/machinery/camera{
c_tag = "MiniSat External South";
- dir = 2;
network = list("minisat");
start_active = 1
},
@@ -54315,14 +55324,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
-"cBn" = (
-/obj/machinery/camera{
- c_tag = "Locker Room Toilets";
- dir = 8
- },
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet/locker)
"cBo" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/wood,
@@ -54398,7 +55399,6 @@
/area/science/xenobiology)
"cBA" = (
/obj/machinery/button/massdriver{
- dir = 2;
id = "toxinsdriver";
pixel_y = 24
},
@@ -54520,15 +55520,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/engine/air,
/area/engine/atmos)
-"cBR" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cBS" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -54537,18 +55528,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat/hallway)
-"cBT" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
-"cBU" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/closet/emcloset,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"cBV" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/security{
@@ -54623,31 +55602,6 @@
},
/turf/closed/wall,
/area/security/detectives_office)
-"cCl" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
-"cCm" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
-"cCn" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/power/apc{
- dir = 4;
- name = "Detective's Office APC";
- areastring = "/area/security/detectives_office";
- pixel_x = 24
- },
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/maintenance/port)
"cCo" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -54783,79 +55737,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cDe" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/closet/radiation,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cDg" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "2-8"
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDh" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/structure/table/reinforced,
-/obj/item/storage/toolbox/mechanical,
-/obj/item/flashlight,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/item/pipe_dispenser,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDi" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/table/reinforced,
-/obj/item/clothing/suit/radiation,
-/obj/item/clothing/head/radiation,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDj" = (
-/obj/structure/cable/yellow{
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDk" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
"cDl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -54870,92 +55751,6 @@
/obj/machinery/vending/engivend,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cDo" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cDp" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDr" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDs" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDt" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDv" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDw" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDx" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Atmos to Loop"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDy" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDz" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cDB" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -54963,70 +55758,6 @@
/obj/effect/landmark/start/station_engineer,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cDC" = (
-/obj/item/wrench,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cDD" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 4
- },
-/obj/machinery/meter,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cDE" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "External Gas to Loop"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cDF" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "External Gas to Loop"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cDG" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDH" = (
-/obj/structure/rack,
-/obj/item/clothing/mask/gas{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas{
- pixel_x = -3;
- pixel_y = -3
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cDI" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cDJ" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/simple/orange/visible{
@@ -55067,817 +55798,6 @@
/obj/structure/closet/radiation,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cEa" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
- },
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cEd" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Port";
- dir = 4;
- network = list("ss13","engine")
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEe" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/light{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEf" = (
-/obj/machinery/status_display/ai,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cEg" = (
-/obj/machinery/status_display,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cEh" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEi" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Starboard";
- dir = 8;
- network = list("ss13","engine")
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEk" = (
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cEl" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
- },
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"cEr" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEs" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 8;
- name = "Gas to Cooling Loop"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEt" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cEu" = (
-/obj/machinery/camera{
- c_tag = "Supermatter Chamber";
- dir = 2;
- network = list("engine");
- pixel_x = 23
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEv" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-8"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEw" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEx" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEy" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 4
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-4"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEz" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEA" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cEB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEC" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Mix to Gas"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cED" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEE" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
- },
-/turf/open/space,
-/area/space/nearstation)
-"cEK" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cEL" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -22
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEM" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/item/tank/internals/plasma,
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cET" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/decal/cleanable/oil,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cEU" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEW" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cFb" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFc" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
- name = "Cooling Loop Bypass"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFe" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-8"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cFh" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-4"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cFj" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cFk" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Mix Bypass"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFm" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"cFn" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
- },
-/turf/open/space,
-/area/space/nearstation)
-"cFo" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
- },
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"cFu" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/obj/machinery/meter,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFw" = (
-/obj/structure/sign/warning/electricshock,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cFy" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFz" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cFA" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cFI" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFJ" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFK" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFL" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 6
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFM" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFN" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFO" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Aft";
- dir = 2;
- network = list("ss13","engine");
- pixel_x = 23
- },
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cFP" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFR" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFS" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFT" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 9
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFU" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGd" = (
-/obj/structure/closet/crate/bin,
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGe" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGf" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8;
- filter_type = "n2"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGg" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGh" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGi" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGj" = (
-/obj/structure/table,
-/obj/item/pipe_dispenser,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGk" = (
-/obj/machinery/light,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGl" = (
-/obj/structure/closet/secure_closet/engineering_personal,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGr" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cGs" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cGt" = (
-/obj/structure/closet/wardrobe/engineering_yellow,
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGu" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGv" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGx" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible,
-/obj/machinery/meter,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGC" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/atmospherics/components/binary/valve/digital/on{
- dir = 4;
- name = "Output Release"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGD" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cGE" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cGH" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cGI" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Laser Room";
- req_access_txt = "10"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGK" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cGL" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cGM" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
-"cGR" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGS" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cGT" = (
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGU" = (
-/obj/structure/reflector/double/anchored{
- dir = 6
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGV" = (
-/obj/structure/reflector/box/anchored{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGY" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGZ" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{
- dir = 1
- },
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
-"cHa" = (
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -22
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cHb" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHc" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHd" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHe" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHg" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHj" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/machinery/power/emitter/anchored{
- dir = 8;
- state = 2
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHn" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHo" = (
-/obj/structure/reflector/single/anchored{
- dir = 9
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cHp" = (
-/obj/structure/reflector/single/anchored{
- dir = 5
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cHr" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"cHD" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -55910,7 +55830,6 @@
/area/science/robotics/mechbay)
"cHF" = (
/obj/machinery/button/door{
- dir = 2;
id = "Skynet_launch";
name = "Mech Bay Door Control";
pixel_x = 6;
@@ -56188,10 +56107,6 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
-"cMm" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
"cMC" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -56212,16 +56127,6 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
-"cMD" = (
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cMH" = (
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cMN" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/supermatter)
"cMQ" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -56259,9 +56164,9 @@
/area/quartermaster/sorting)
"cNL" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/central";
dir = 1;
name = "Central Maintenance APC";
- areastring = "/area/maintenance/central";
pixel_y = 24
},
/obj/structure/cable{
@@ -56296,9 +56201,9 @@
/area/maintenance/starboard)
"cNS" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/starboard";
dir = 4;
name = "Starboard Maintenance APC";
- areastring = "/area/maintenance/starboard";
pixel_x = 26
},
/obj/structure/cable{
@@ -56427,12 +56332,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"cSz" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/closed/wall,
-/area/chapel/main)
"cSA" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -56451,42 +56350,6 @@
},
/turf/open/floor/plasteel/dark/telecomms,
/area/tcommsat/server)
-"cSG" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cSH" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cSI" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cSJ" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cSK" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cSL" = (
/obj/machinery/button/door{
id = "atmos";
@@ -56525,7 +56388,6 @@
"cSM" = (
/obj/machinery/computer/station_alert,
/obj/item/radio/intercom{
- broadcasting = 0;
name = "Station Intercom (General)";
pixel_y = 20
},
@@ -56724,7 +56586,6 @@
icon_state = "4-8"
},
/obj/machinery/requests_console{
- announcementConsole = 0;
department = "Engineering";
departmentType = 4;
name = "Engineering RC";
@@ -56743,9 +56604,9 @@
icon_state = "1-2"
},
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/central/secondary";
dir = 8;
name = "Central Maintenance APC";
- areastring = "/area/maintenance/central/secondary";
pixel_x = -24
},
/obj/structure/cable{
@@ -56769,12 +56630,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cTI" = (
-/obj/machinery/door/airlock/maintenance/abandoned{
- req_access_txt = "12"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"cTJ" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
@@ -56805,9 +56660,9 @@
/area/medical/morgue)
"cTM" = (
/obj/machinery/power/apc{
+ areastring = "/area/maintenance/department/medical/morgue";
dir = 4;
name = "Morgue Maintenance APC";
- areastring = "/area/maintenance/department/medical/morgue";
pixel_x = 26
},
/obj/structure/cable{
@@ -56993,10 +56848,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
-"fsQ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"fvY" = (
/obj/machinery/computer/cryopod{
pixel_y = 26
@@ -57012,13 +56863,6 @@
icon_state = "wood-broken4"
},
/area/maintenance/bar)
-"fGf" = (
-/obj/machinery/smartfridge/disks{
- pixel_y = 2
- },
-/obj/structure/table,
-/turf/open/floor/plasteel,
-/area/hydroponics)
"fKl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/landmark/event_spawn,
@@ -57029,17 +56873,10 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
-"gbq" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/construction)
"gbT" = (
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty,
@@ -57055,18 +56892,6 @@
"gjl" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
-"gsz" = (
-/obj/machinery/camera{
- c_tag = "Fitness Room South";
- dir = 1
- },
-/obj/machinery/vr_sleeper,
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
"gwd" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -57095,12 +56920,6 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
-"gOZ" = (
-/obj/machinery/door/airlock/maintenance{
- req_access_txt = "12"
- },
-/turf/open/floor/plating,
-/area/crew_quarters/fitness)
"gWd" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -57125,9 +56944,9 @@
icon_state = "1-2"
},
/obj/machinery/power/apc{
+ areastring = "/area/quartermaster/warehouse";
dir = 4;
name = "Cargo Warehouse APC";
- areastring = "/area/quartermaster/warehouse";
pixel_x = 26
},
/obj/structure/cable{
@@ -57135,12 +56954,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
-"hwu" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-24"
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
"hEm" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-22"
@@ -57161,11 +56974,6 @@
"iiW" = (
/turf/open/floor/wood,
/area/maintenance/bar)
-"ijc" = (
-/obj/structure/table,
-/obj/item/stack/sheet/metal/fifty,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"imH" = (
/obj/structure/falsewall,
/turf/open/floor/plating,
@@ -57247,12 +57055,6 @@
/obj/machinery/rnd/production/techfab/department/cargo,
/turf/open/floor/plasteel,
/area/quartermaster/office)
-"jnR" = (
-/obj/machinery/atmospherics/components/binary/valve{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
"jqv" = (
/obj/structure/chair/wood/normal{
dir = 1
@@ -57303,15 +57105,6 @@
},
/turf/open/floor/wood,
/area/maintenance/port/aft)
-"jMY" = (
-/obj/structure/table,
-/obj/item/stack/cable_coil{
- pixel_x = 3;
- pixel_y = -7
- },
-/obj/item/stack/cable_coil,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"jSO" = (
/obj/machinery/light{
dir = 4
@@ -57330,14 +57123,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"khb" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
-/obj/structure/table,
-/obj/item/kitchen/rollingpin,
-/turf/open/floor/plasteel,
-/area/hallway/secondary/service)
"khB" = (
/obj/machinery/door/airlock/external{
req_access_txt = "13"
@@ -57382,21 +57167,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
-"kQk" = (
-/obj/structure/rack,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 2;
- name = "2maintenance loot spawner"
- },
-/turf/open/floor/plating,
-/area/maintenance/department/medical/morgue)
-"kQq" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"kSb" = (
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -57429,14 +57199,6 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/science/circuit)
-"mjr" = (
-/obj/machinery/vending/wardrobe/bar_wardrobe,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"moD" = (
-/obj/effect/landmark/barthpot,
-/turf/open/floor/wood,
-/area/library)
"mpI" = (
/obj/structure/table/wood,
/turf/open/floor/wood{
@@ -57452,17 +57214,6 @@
/obj/effect/spawner/lootdrop/keg,
/turf/open/floor/wood,
/area/maintenance/bar)
-"mBv" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/binary/valve{
- dir = 4;
- name = "Output to Waste"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"mNi" = (
/obj/machinery/light_switch{
pixel_x = -20
@@ -57486,14 +57237,10 @@
/obj/machinery/vending/autodrobe,
/turf/open/floor/wood,
/area/maintenance/bar)
-"noK" = (
-/obj/structure/girder,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"nxv" = (
/obj/machinery/power/apc{
- name = "Construction Area APC";
areastring = "/area/construction";
+ name = "Construction Area APC";
pixel_y = -24
},
/obj/structure/cable{
@@ -57501,10 +57248,6 @@
},
/turf/open/floor/plating,
/area/construction)
-"nzh" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"nGt" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -57522,6 +57265,10 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"nWU" = (
+/obj/machinery/smartfridge/organ/preloaded,
+/turf/closed/wall,
+/area/medical/sleeper)
"oce" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
@@ -57536,10 +57283,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"oDF" = (
-/obj/machinery/light,
-/turf/open/floor/plating,
-/area/engine/engineering)
"oHU" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -57548,7 +57291,6 @@
/area/science/circuit)
"oKh" = (
/obj/structure/chair/wood/normal{
- icon_state = "wooden_chair";
dir = 8
},
/turf/open/floor/wood,
@@ -57589,9 +57331,7 @@
pixel_y = -3
},
/obj/item/radio/intercom{
- freerange = 0;
frequency = 1485;
- listening = 1;
name = "Station Intercom (Medbay)";
pixel_x = 30
},
@@ -57660,12 +57400,6 @@
/obj/item/reagent_containers/food/drinks/beer,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"rsp" = (
-/obj/machinery/atmospherics/components/unary/tank/air{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
"rBq" = (
/obj/item/clothing/head/kitty,
/obj/item/clothing/under/maid,
@@ -57724,12 +57458,6 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
-"sxs" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/table,
-/obj/item/shovel/spade,
-/turf/open/floor/plasteel,
-/area/hallway/secondary/service)
"sAM" = (
/turf/open/floor/wood{
icon_state = "wood-broken6"
@@ -57809,7 +57537,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 2;
pixel_y = 24
},
/turf/open/floor/carpet,
@@ -57824,10 +57551,6 @@
/obj/item/restraints/handcuffs/fake,
/turf/open/floor/plating,
/area/maintenance/bar)
-"tyO" = (
-/obj/item/clothing/under/color/grey,
-/turf/open/floor/plating,
-/area/maintenance/bar)
"tMl" = (
/obj/effect/turf_decal/loading_area,
/turf/open/floor/plasteel/showroomfloor,
@@ -57871,22 +57594,6 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
-"udp" = (
-/obj/item/crowbar/large,
-/obj/structure/rack,
-/obj/item/flashlight,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"uhH" = (
-/obj/item/wrench,
-/obj/item/weldingtool,
-/obj/item/clothing/head/welding{
- pixel_x = -3;
- pixel_y = 5
- },
-/obj/structure/rack,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"ujF" = (
/obj/machinery/cryopod{
dir = 4
@@ -57940,9 +57647,7 @@
/turf/open/floor/plasteel,
/area/science/circuit)
"uPT" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 2
- },
+/obj/machinery/atmospherics/pipe/simple/general/visible,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -57993,13 +57698,6 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
-"vpY" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
-/obj/machinery/meter,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
"vsM" = (
/obj/machinery/power/apc/auto_name/south,
/obj/structure/cable,
@@ -58016,7 +57714,7 @@
"vzp" = (
/obj/structure/table/reinforced,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/stock_parts/cell/high,
@@ -58111,11 +57809,6 @@
},
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
-"wUY" = (
-/obj/structure/table,
-/obj/item/reagent_containers/glass/bucket,
-/turf/open/floor/plasteel,
-/area/hallway/secondary/service)
"xgF" = (
/obj/structure/chair/stool/bar,
/turf/open/floor/wood{
@@ -64199,6 +63892,11 @@ aaa
aaa
aaa
aaa
+cdh
+aaa
+aaa
+aaa
+cdh
aaa
aaa
aaa
@@ -64211,12 +63909,7 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aVw
aaa
aaa
aaa
@@ -64450,23 +64143,23 @@ aaa
aaa
aaa
aaa
+cdh
+aaa
+cdh
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
+cdh
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cdh
aaa
aaa
aaa
@@ -64707,23 +64400,23 @@ aaa
aaa
aaa
aaa
+gXs
+aaa
+gXs
aaa
aaa
+gXs
+apv
+gXs
+gXs
+gXs
+apv
+gXs
aaa
aaa
+gXs
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+gXs
aaa
aaa
aaa
@@ -64963,25 +64656,25 @@ aaa
aaa
aaa
aaa
+apv
+apv
+gXs
+aag
+apv
+gXs
+gXs
aaa
aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aae
-aaa
+gXs
+gXs
+apv
+apv
+aQd
+aag
+apv
aaa
aaa
aaa
@@ -65220,25 +64913,25 @@ aaa
aaa
aaa
aaa
+aGk
+aQe
+aaa
+aQe
+aRx
+gXs
+aoV
aaa
aaa
aaa
aaa
aaa
aaa
+gXs
+aGk
+aQe
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aQe
+aRx
aaa
aaa
aaa
@@ -65477,10 +65170,11 @@ aaa
aaa
aaa
aaa
-aaa
+aab
aaa
cpe
aaa
+asL
aaa
aaa
aaa
@@ -65490,12 +65184,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
+aab
aaa
cwV
aaa
-aaa
+asL
aaa
aaa
aaa
@@ -65733,14 +65426,12 @@ aaa
aaa
aaa
aae
-aaf
+alN
+gXs
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aae
+gXs
aaa
aaa
aaa
@@ -65750,9 +65441,11 @@ aaa
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
@@ -65990,14 +65683,12 @@ aaa
aaa
aaa
aaa
-aaf
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+alN
+gXs
+aaa
+aaa
+aaa
+gXs
aaa
aaa
aaa
@@ -66007,9 +65698,11 @@ aaa
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
@@ -66247,14 +65940,12 @@ aaa
aaa
aaa
aaa
-aaf
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+alN
+gXs
+aaa
+aaa
+aaa
+gXs
aaa
aaa
aaa
@@ -66264,9 +65955,11 @@ aaa
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
@@ -66504,11 +66197,12 @@ aaa
aaa
aaa
aaa
-aaf
-aaa
+alN
+gXs
aaa
cqq
aaa
+gXs
aaa
aaa
aaa
@@ -66518,12 +66212,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
+gXs
aaa
cqq
aaa
-aaa
+gXs
aaa
aaa
aaa
@@ -66761,7 +66454,7 @@ aaf
aaf
aaf
aaa
-aaf
+alN
arB
asE
cyb
@@ -68834,7 +68527,7 @@ aaa
awW
aOh
ayl
-ayl
+bRf
aRY
awW
aaa
@@ -68846,7 +68539,7 @@ awW
awZ
ayl
ayl
-bgi
+aQR
awW
aaa
aaa
@@ -71411,7 +71104,7 @@ aUO
aUy
aWm
aWf
-aUQ
+bcW
czK
bhN
bcl
@@ -71694,7 +71387,7 @@ aaa
aaa
aaa
aaa
-aae
+aaa
aaa
aaa
aaa
@@ -71950,7 +71643,7 @@ aaa
aaa
aaa
aaa
-aaa
+aae
aaa
aaa
aaa
@@ -72178,7 +71871,7 @@ aPa
aQn
ayl
czK
-aUP
+aUO
aUO
aXL
aXZ
@@ -72429,7 +72122,7 @@ aHy
ayl
aKk
aLA
-aNf
+aHD
aNf
aLA
aQD
@@ -74455,8 +74148,8 @@ ady
ady
ady
ady
-ady
ajq
+aTp
ajW
akB
alh
@@ -74481,7 +74174,7 @@ aBG
aAQ
aAQ
aAQ
-aBM
+aAQ
aAQ
aKn
aLE
@@ -74497,11 +74190,11 @@ aXQ
aXQ
aXQ
aXQ
-aXQ
-aXQ
-aXQ
-aXQ
-bhQ
+aPz
+aPz
+bcJ
+aPz
+bkg
bjj
bkF
aaa
@@ -74751,14 +74444,14 @@ aPA
aPA
aPA
aXQ
-aZt
+baO
aXQ
-aZt
-aXQ
-aZt
-aXQ
-aZt
-bhQ
+bdV
+aPz
+axS
+bgs
+biM
+bkg
bjj
bkF
aaa
@@ -75003,20 +74696,20 @@ aNm
aOl
aPA
aQO
-aSh
aTw
aUU
+cek
aWn
aXQ
-aZv
-aXQ
bbL
aXQ
-bdJ
-aXQ
-bgr
-bhQ
-bjj
+bgl
+aPz
+aEb
+bhK
+biZ
+bvn
+bml
bkF
aaa
aaa
@@ -75241,7 +74934,7 @@ alU
amC
arM
alU
-atT
+avc
asO
avV
atO
@@ -75249,7 +74942,7 @@ ayw
atN
aAV
aBQ
-aDh
+bbA
aDo
aFQ
aHe
@@ -75266,13 +74959,13 @@ aUn
aTy
aWy
aYe
-aZw
-aZw
bbq
-bct
-bfa
-bfa
-bhQ
+bcS
+aPz
+aEc
+bhP
+bjD
+bkg
bjk
bkE
aaa
@@ -75516,20 +75209,20 @@ aLk
aNo
aOo
aPA
-aQQ
+aQS
aQN
aSV
aUo
aUX
aXp
-baO
-aZo
-baw
-bcO
-baw
-cBn
-bgs
+bct
+bdJ
+bgr
+aPz
+aSG
bhQ
+bjW
+bwP
bjk
bkF
aaa
@@ -75773,20 +75466,20 @@ aLE
aLE
aOn
aPA
-aQP
+aQQ
aQN
-aTx
-aUV
+aTz
+aUt
aWo
aXQ
aXQ
aXQ
aXQ
-aXQ
-aXQ
-aXQ
-aXQ
-bhQ
+aPz
+aPz
+aPz
+aPz
+bkg
bjk
aPz
aaa
@@ -75830,7 +75523,7 @@ ccb
ccb
ccb
aaa
-chL
+aUf
aaa
ccb
ccb
@@ -76022,26 +75715,26 @@ aAY
aBQ
aDl
bxk
-aFS
+aDo
aDo
aIX
-aBQ
+blt
aLE
aLE
aOp
aPA
-aQR
+aMg
aQN
-aTA
-aUq
+aQN
+aUt
aWq
-aXs
-aYH
-aZx
+aQN
+aQN
+aQN
+aQN
+bfe
bbO
aPA
-bdM
-aPz
bgt
bhS
bjk
@@ -76087,7 +75780,7 @@ aaa
aaf
aaa
aaa
-chL
+aUg
aaa
aaa
aaf
@@ -76289,16 +75982,16 @@ aOl
aPC
aQN
aQN
-aTz
-aUp
-aWq
-aXr
-aZx
+aTB
+aUq
+aUV
+aXv
+bbr
+aQN
+aQN
cBh
-bbN
+bit
aPA
-bdL
-aPz
bgt
bhR
bjk
@@ -76344,7 +76037,7 @@ aaf
aaf
aaf
aaf
-chM
+aUg
aaf
aaf
aaf
@@ -76537,25 +76230,25 @@ aBQ
aDn
aDo
aDo
-aHD
+aFU
aIZ
aBQ
aLE
aLE
aOq
aPD
-aQT
-aQT
+aQV
+aQN
aTC
-aUs
+aUr
aUY
-aXv
-aYS
-aZx
+aXw
+bbU
+aQN
+aQN
+bfe
bbO
aPA
-bdM
-aPz
aSg
bhT
bjk
@@ -76785,7 +76478,7 @@ amC
amC
amC
alU
-aqO
+avc
amC
atJ
atO
@@ -76796,23 +76489,23 @@ aDo
aDo
aDo
aIY
-aBQ
+blt
aLE
aLE
aOl
aPA
-aQS
+aQX
aQN
-aTB
+aTC
aUr
-aWq
-aXt
+aYX
+aXx
+bcu
+aQN
+aQN
aPA
aPA
aPA
-aPA
-aPA
-aPz
bel
bfI
bgq
@@ -77039,7 +76732,7 @@ aaf
alU
alU
alU
-alU
+amC
amC
alU
atM
@@ -77050,7 +76743,7 @@ aAY
aBQ
aDp
aDo
-aFU
+aFS
aDo
aJb
aKp
@@ -77058,15 +76751,15 @@ aLE
aLE
aOl
aPE
-aQV
+aQY
+aQN
+aTC
+aUs
+aWB
+aXx
+bcu
+aQN
aQN
-aSi
-aUu
-aWq
-aXw
-aZB
-aZB
-aZB
aZB
aPA
bfc
@@ -77295,8 +76988,8 @@ alU
aaf
aaH
alU
-arO
-alU
+aQT
+amC
amC
avc
atO
@@ -77315,15 +77008,15 @@ aLH
aLE
aOl
aPA
-aQU
+aSX
+aQN
+aTD
+aUu
+aXk
+aXA
+bcw
aQN
aQN
-aUt
-aWq
-aXw
-aZA
-aZA
-aZA
aZA
aPA
aWv
@@ -77572,17 +77265,17 @@ aLK
aLK
aOr
aPA
-aQX
-aQN
+aTx
aQN
+aSi
aUv
aWp
-aXA
-aYX
-aYX
-aYX
-bbs
-bcw
+aTy
+aTy
+aTy
+aTy
+bcT
+chZ
bfd
bgw
aZE
@@ -77829,18 +77522,18 @@ aLJ
aLE
aOl
aPA
-aQW
-aQW
-aTD
-aQW
+aTA
+aQN
+aUp
aUZ
-aXx
+aXr
aYU
aYU
aYU
-bbr
-bcu
-bfe
+aYU
+aYU
+ckE
+bTt
aYb
aZE
bjm
@@ -78090,14 +77783,14 @@ aPG
aPG
aPG
aPG
+aZx
+aQW
+aQW
+aQW
+aQW
+bdL
aPA
-aPA
-aPA
-aPA
-aPA
-aPA
-aPA
-aWv
+clP
aYb
aZE
bjp
@@ -78343,19 +78036,19 @@ aLL
bDe
aOl
aPF
-aQY
-aSk
+aSh
+aQt
aTE
aPG
-aWu
-aYa
-aZD
-aZD
-hcE
-aZD
-aZD
-bff
-bfk
+aPA
+aPA
+aPA
+aPA
+aPA
+aPA
+aPA
+aWv
+aYb
aZE
bjo
bjr
@@ -78604,17 +78297,17 @@ aRa
aRa
aTG
aPG
-aWw
-aYc
-aZF
-aZF
-aZF
-aZF
-aZF
-aZF
-bgy
+aWu
+aYa
+aZD
+aZD
+hcE
+aZD
+aZD
+bff
+bfk
aZE
-bjr
+bgx
bjr
ama
bmh
@@ -78656,7 +78349,7 @@ bHE
bUs
ceY
bCq
-bHE
+bJP
bUs
bHE
bLu
@@ -78861,15 +78554,15 @@ aQZ
aRa
aTF
aPG
-aSX
-aWC
-baS
-aZI
-baS
-baS
-bdS
-bdU
-ckQ
+aWw
+aYc
+aZF
+aZF
+aZF
+aZF
+aZF
+aZF
+bgy
gjl
bjq
bjr
@@ -79123,7 +78816,7 @@ aXJ
bgA
aZp
baY
-bcJ
+aYZ
bcF
bfg
bgA
@@ -79412,7 +79105,7 @@ aoV
bCq
bHE
bHE
-bSq
+bad
cdb
bCq
bVE
@@ -79637,7 +79330,7 @@ aXM
bfi
cBi
bbS
-bcS
+bdM
bbt
bfi
beD
@@ -79891,14 +79584,14 @@ aTH
aPK
aWz
aWC
+baS
+baS
+baS
+bcR
+baS
+baS
+baS
gjl
-gjl
-gjl
-bcT
-gjl
-gjl
-gjl
-aZE
bju
biv
bmf
@@ -79939,14 +79632,14 @@ mrR
dKP
odx
rBq
-tur
+bat
bCq
bUs
bLv
aaa
bLv
bJf
-ccd
+cfS
bCq
aaa
aaa
@@ -80146,16 +79839,16 @@ aRc
aSm
aTJ
aPK
-cCl
-aYh
-cCm
-cCm
-cCm
-cCn
-aPz
+aWA
+aWC
+baS
+aZI
+baS
bdW
-aSg
-aZE
+bdS
+bdU
+ckQ
+gjl
bgz
biT
boU
@@ -80166,7 +79859,7 @@ bbR
btu
bbR
bOL
-bxy
+bPR
byF
bwW
bGm
@@ -80403,11 +80096,11 @@ aPK
aSm
aTI
aPK
-aWB
+aXs
cCj
apd
apd
-bbU
+apd
cCk
apd
aZK
@@ -80452,7 +80145,7 @@ iiW
dfL
dKP
mqZ
-tyO
+tur
wfR
bCq
bUs
@@ -80660,9 +80353,9 @@ aPK
aSn
aTK
aPK
-apd
-cCj
-asW
+aXt
+aZo
+aYj
baW
bLE
bLG
@@ -80921,8 +80614,8 @@ apd
aYi
aqW
aqW
-bbQ
-bLG
+aVT
+bSO
apd
aZH
aZK
@@ -81200,7 +80893,7 @@ bwY
byJ
bwe
bAc
-bBI
+bwL
bGn
bGn
bGn
@@ -81436,7 +81129,7 @@ aWG
aZa
baX
bcH
-bdE
+bSZ
apd
aZH
bnL
@@ -81634,9 +81327,9 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
+gXs
+gXs
+brT
abc
abu
abu
@@ -81719,7 +81412,7 @@ bCq
bHD
bJe
bCq
-bLu
+cib
bHE
bHE
bHE
@@ -81890,10 +81583,10 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
+gXs
+aai
+aai
+aai
abb
abt
aca
@@ -81946,11 +81639,11 @@ aSa
aSr
aSr
apd
-aYZ
+asW
bLE
aqW
aqW
-bLE
+bTq
apd
beA
bqp
@@ -82148,9 +81841,9 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
+aai
+cmH
+aay
abe
abw
acc
@@ -82203,7 +81896,7 @@ aTL
aTP
aWD
apd
-aYj
+aYh
aZL
baU
baU
@@ -82219,8 +81912,8 @@ bnJ
bbR
bbR
bbR
-bty
-buJ
+bWk
+bYG
bwe
bxE
byM
@@ -82404,10 +82097,10 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
+gXs
+aai
+cmI
+aay
abd
abv
acb
@@ -82511,8 +82204,8 @@ bLw
bLw
bLw
caq
-cbw
-ccu
+bCA
+bHE
ciT
bCq
bSs
@@ -82662,11 +82355,11 @@ aaa
aaa
aaf
aaf
-aaH
-aai
-aai
-abg
-aby
+ctv
+acd
+aaM
+aaP
+aaY
aby
aby
aby
@@ -82768,10 +82461,10 @@ bVI
bVI
bVI
bTA
-bEP
-cdi
-bCq
-bCq
+bHF
+bHE
+bHE
+bHE
bHE
bHE
cmD
@@ -82779,29 +82472,29 @@ cnr
cnU
chD
cpq
-cpV
+bVH
cqw
cqO
crp
-aaa
-aaf
-aaa
-aaa
-aaf
-aaa
-aaa
-aaf
-aaa
-aaa
-aaa
-aaT
-aaT
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
aaa
+cfG
aaa
aaa
aaa
@@ -82920,10 +82613,10 @@ aaf
aaf
aai
aai
-aai
-aaU
abf
-abx
+aat
+aaU
+abg
acd
acC
ada
@@ -83025,8 +82718,8 @@ bWB
bWB
bVI
cax
-cbx
-cdh
+cbw
+cby
ciU
cjK
ckA
@@ -83040,20 +82733,20 @@ cgR
cgR
cqN
cro
-cEl
-cEE
-cEl
-cFm
-csx
-cFm
-cFm
-csx
-csv
-aaa
-aaa
-aaT
-ctv
-aaT
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -83177,7 +82870,7 @@ aai
aai
aai
aaI
-aaM
+aat
aat
aat
aat
@@ -83244,12 +82937,12 @@ aYl
bBi
aLY
bnN
-boY
+bTv
bqw
aJq
aJq
aYl
-aKF
+bTw
aLX
aJq
aJq
@@ -83282,8 +82975,8 @@ cdd
cea
bVI
caz
-cby
-cdj
+cbx
+ccu
cdv
cem
cem
@@ -83297,20 +82990,20 @@ ciN
cji
cDZ
crr
-crJ
-crT
-crJ
-cFn
-css
-csx
-csx
-css
-csb
-aaf
-aaf
-aaT
-ctv
-aaT
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -83432,8 +83125,8 @@ aaf
aai
aan
aaw
-aaB
-aat
+aaD
+aaL
aaJ
aat
abh
@@ -83554,20 +83247,20 @@ cgR
cDB
cqP
crq
-crZ
-crT
-crZ
-cFo
-css
-cFm
-cFm
-css
-csv
-aaa
-aaa
-aaT
-ctv
-aaT
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -83687,9 +83380,9 @@ aaa
aag
aaa
aak
-aap
-aay
-aaD
+aao
+aaz
+aaE
aat
aat
aat
@@ -83726,7 +83419,7 @@ ats
atY
auo
axy
-ayN
+ayM
azE
aAW
aCa
@@ -83763,7 +83456,7 @@ bqy
cBr
bqy
buK
-bqy
+bTx
aJw
aJq
aJq
@@ -83795,10 +83488,10 @@ bWB
bWB
cec
bVI
-cay
+bUw
ccw
chY
-ciX
+clK
cjM
ckB
ckB
@@ -83809,22 +83502,22 @@ coH
cgR
cgR
cqx
-cqR
+cgR
crp
-crJ
-crT
-crJ
-cFn
-css
-csx
-csx
-css
-csb
-aaf
-aaf
-aaT
-ctv
-aaT
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -83944,9 +83637,9 @@ aaa
aag
aaf
aaj
-aao
-aax
-aaC
+aap
+aaB
+aaF
aat
aat
adO
@@ -83983,7 +83676,7 @@ atu
cCi
awg
axy
-ayM
+ayN
azs
aAR
aBP
@@ -84063,25 +83756,25 @@ ckC
ccw
cnX
coH
-cps
-cpX
+cjZ
+ckq
cqz
-cqQ
+cqR
ccw
-crH
-crT
-crZ
-cFo
-css
-cFm
-cFm
-css
-csv
-aaa
-aaa
-aaT
-ctv
-aaT
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -84201,13 +83894,13 @@ aaa
aag
aaa
aal
-aar
-aay
-aaF
-aat
-aaO
-aaW
+aaq
+aax
+aaN
aat
+aaV
+cmn
+cms
abB
acf
abM
@@ -84277,11 +83970,11 @@ bqA
brW
btB
buM
-bwi
+aOJ
bmr
aMm
aJq
-bBi
+byV
bCs
bCs
bEY
@@ -84322,28 +84015,28 @@ coa
coJ
clJ
clJ
-cig
-cig
-ccw
-crJ
-crT
-crJ
-cFn
-css
-csx
-csx
-css
-csb
-aaf
-aaf
-aaT
-ctv
-aaT
-aaa
-aaa
-aaa
-aaa
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -84458,13 +84151,13 @@ aaa
aag
aaf
aaj
-aaq
-aay
-aaE
-aaJ
-aaN
-aaV
+aar
+aaC
+aaO
aat
+aaW
+cmp
+cmE
aat
acd
abL
@@ -84540,11 +84233,11 @@ aMn
aJq
bBi
bCs
-bDv
+bDw
+bDz
+bFb
bEX
bFa
-bHH
-bFa
bKt
bLx
bCs
@@ -84577,30 +84270,30 @@ ccw
ccw
cnZ
coH
-cpt
-cpZ
-cig
-cqS
-ccw
-crH
-crT
-crZ
-cFo
-css
-cFm
-cFm
-css
-csv
-aaa
-aaa
-aaT
-ctv
-aaT
-aaa
-aaa
-aaf
-aaa
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -84715,13 +84408,13 @@ aaa
aag
aaa
aal
-aat
-aay
+aau
aat
aat
-aaJ
aat
aat
+cmr
+aat
abD
acd
acd
@@ -84789,7 +84482,7 @@ bnR
bpe
bqB
bqq
-btD
+bbQ
buO
bwk
bmr
@@ -84834,30 +84527,30 @@ cmG
cnt
cob
coL
-cDo
-cgR
-cqA
-cqT
-csg
-crJ
-crU
-csb
-cFn
-css
-csx
-csx
-css
-csb
-aaf
-aaf
-aaT
-aaT
-aaT
-gXs
-aaf
-aaf
-aaf
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -84973,7 +84666,7 @@ aag
aaf
aaj
aas
-aaz
+aat
aat
aat
aat
@@ -85021,7 +84714,7 @@ aGq
aHO
aJl
ayW
-aJq
+clV
aJq
aOE
aJn
@@ -85054,7 +84747,7 @@ byP
aJq
bBi
bCs
-bDw
+bDy
bEZ
bGv
bHH
@@ -85066,7 +84759,7 @@ bNJ
bNJ
bKx
cjL
-gbq
+bNL
bNI
bUz
bVJ
@@ -85088,33 +84781,33 @@ cSS
ckD
cTc
cTe
-cfG
+cgR
cgw
-coK
-cpu
-cMm
-ccw
-ccw
-ccw
-crK
-cEK
-csa
-csj
-csa
-csa
-cGr
-aaa
-aaa
-aaa
-aaa
-aaf
-aaa
-aaa
-aaa
-aaa
-aaf
-aaa
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -85232,9 +84925,9 @@ aam
aav
aav
aav
-aaL
-aaQ
-aaY
+aav
+aav
+aav
aav
abE
acg
@@ -85311,7 +85004,7 @@ byR
bnM
bBl
bCs
-bDz
+bFa
bFa
bFa
bHH
@@ -85319,7 +85012,7 @@ bFa
bFa
bFa
bCs
-bNL
+bNJ
bNJ
apV
cjL
@@ -85346,32 +85039,32 @@ ckG
clJ
cmF
cgR
-cgI
-chF
-ciO
-cqc
-cqc
-cqc
-cEd
-cEr
-cEL
-cFb
-cFu
-cFI
-cGd
-cGs
-cGr
-ccw
-ccw
-ccw
-ccw
-ccw
-ccw
-aaa
-eRz
-aaT
-eRz
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -85486,14 +85179,14 @@ aaa
aag
aaf
aai
-aau
+aaA
aaA
aaG
-aaK
-aaP
+aaA
+aaQ
aaX
-hwu
-aat
+abj
+abG
acd
acD
acY
@@ -85568,10 +85261,10 @@ byQ
aJq
aJq
bCs
-bDy
-bFb
-bGw
+bFa
+bFa
bER
+bGw
bJk
bFa
bLA
@@ -85603,32 +85296,32 @@ cTa
ceZ
clQ
cgR
-cgx
-coM
-cpv
-cqb
-cqb
-cqb
-cqb
-cEs
-cqb
-cqb
-cAp
-cqb
-cAo
-cGt
-cgx
-jMY
-csd
-cHa
-csd
-uhH
-ccw
-aaa
-aaT
-ctv
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -85749,8 +85442,8 @@ aai
aai
aai
aai
-abj
-abG
+abx
+abF
acd
acd
acd
@@ -85823,7 +85516,7 @@ aaa
aJn
aXf
aJq
-byV
+aJq
bCs
bAM
bFa
@@ -85842,7 +85535,7 @@ bNI
bEP
bVJ
bVJ
-bOM
+bSF
bQd
bQP
bSt
@@ -85860,32 +85553,32 @@ cTb
cTd
ckF
ckF
-cgK
-cDg
-cDp
-cqe
-cqB
-cqB
-cEe
-csP
-cAl
-cFc
-cAq
-cFJ
-cSH
-cGu
-cGH
-fsQ
-fsQ
-cGR
-csd
-csd
-ccw
-aaa
-aaT
-ctv
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -86007,7 +85700,7 @@ aaa
aaf
aai
abi
-abF
+bVL
ach
acK
adf
@@ -86117,32 +85810,32 @@ cnA
cev
cfg
cgU
-cgJ
-chG
-cpx
-cqd
-cDC
-cqU
-cEf
-cEt
-cEM
-csA
-cEg
-cFK
-cGe
-cGv
-cGI
-cGS
-cHb
-cHg
-cHn
-oDF
-ccw
-aaf
-aaT
-ctv
-aaT
-aaf
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -86374,32 +86067,32 @@ cig
cig
cTf
cgR
-ccw
-cDh
-cpy
-cDv
-cDD
-cqU
-cMD
-cEu
-cEz
-cEz
-cMD
-cFL
-cGf
-kQq
-cMm
-ciZ
-cHc
-cAu
-cAu
-ciZ
-ccw
-aaa
-aaT
-ctv
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -86528,11 +86221,11 @@ cpg
acv
adi
adi
-aaZ
+arl
aeW
agQ
ahv
-ahQ
+agX
aiI
aiH
ajB
@@ -86545,7 +86238,7 @@ anw
anz
aov
aph
-aph
+ayY
ard
ard
ard
@@ -86631,32 +86324,32 @@ ckI
clJ
cmL
cBO
-ccw
-chV
-cpx
-cqf
-cqD
-cMD
-crs
-cEv
-cEv
-cFe
-cMD
-cFM
-czE
-kQq
-ccw
-cGT
-csd
-csd
-csd
-csd
-ccw
-aaf
-aaT
-ctv
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -86785,7 +86478,7 @@ acl
ajC
acL
adi
-aaZ
+anq
agp
agT
ahx
@@ -86800,7 +86493,7 @@ afM
amR
anw
anz
-aov
+aJN
apk
anw
anw
@@ -86809,9 +86502,9 @@ anw
aVh
avj
awl
-axC
-ayY
-azZ
+ayZ
+aCf
+aDh
azZ
azZ
azZ
@@ -86888,32 +86581,32 @@ ckK
clJ
cmL
cgR
-cgL
-chX
-cpx
-cqh
-cqF
-cra
-crI
-cEw
-cEw
-cEw
-cFw
-cFN
-csH
-csR
-cMm
-cGU
-csd
-csd
-cHo
-csd
-ccw
-aaa
-aaT
-ctv
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aae
aaa
@@ -87145,32 +86838,32 @@ ckI
clJ
cmL
cnv
-cMm
-chX
-cpx
-cqg
-cqE
-cqZ
-crt
-cMH
-cAm
-cMH
-cMN
-cFO
-cSI
-cSI
-cMm
-cGV
-csd
-cGV
-noK
-csd
-ccw
-aaa
-aaT
-ctv
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -87314,7 +87007,7 @@ agj
amS
anx
anz
-aoz
+aKS
apm
aqd
anA
@@ -87323,9 +87016,9 @@ atd
anA
avk
awk
-axE
-ayZ
-aAa
+aCe
+aCV
+aHZ
aBu
aAa
aAa
@@ -87402,32 +87095,32 @@ cfb
ccw
cmN
cgR
-cgL
-chX
-cpx
-cqj
-cSG
-crb
-cru
-cEx
-cEx
-cEx
-cAP
-cFP
-csI
-cAt
-cMm
-csd
-csd
-csd
-cHp
-csd
-ccw
-aaf
-aaT
-ctv
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -87560,7 +87253,7 @@ aeY
agt
agt
ahz
-aie
+ahQ
aiN
ajc
ajI
@@ -87648,7 +87341,7 @@ bYH
bYH
bVg
bXn
-bYG
+bRb
cfb
cfF
cfb
@@ -87656,35 +87349,35 @@ cik
cjg
cjU
cfb
-clM
+caw
cfz
cgR
-ccw
-cii
-cpx
-cqi
-cMD
-cAP
-crv
-cEy
-cEy
-cFh
-cMD
-cFM
-czE
-kQq
-ccw
-cGT
-csd
-csd
-csd
-csd
-ccw
-aaf
-aaT
-ctv
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -87882,7 +87575,7 @@ aJq
bBu
bCv
bAT
-bDL
+bDJ
bDq
bCv
bJs
@@ -87901,7 +87594,7 @@ bWO
bXK
bYH
bZz
-caw
+cfV
bYH
bVo
bXq
@@ -87916,32 +87609,32 @@ cfb
cfa
cje
cgR
-ccw
-cDi
-cDr
-cDw
-cDE
-cEa
-cMD
-cEz
-cEz
-cEz
-cMD
-cFR
-cSJ
-kQq
-cMm
-ciZ
-cHd
-cHj
-cHd
-ciZ
-ccw
-aaa
-aaT
-ctv
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -88140,7 +87833,7 @@ bBt
bCv
bDH
bFf
-bGB
+aNJ
bCv
bJs
bKy
@@ -88173,32 +87866,32 @@ ckL
cmF
cje
cgR
-cMm
-chX
-cpD
-cDw
-cDF
-cEa
-cEg
-cEA
-cET
-cFj
-cEf
-cFS
-cGg
-mBv
-cGI
-cGS
-cHe
-cHe
-cHr
-oDF
-ccw
-aaf
-aaT
-ctv
-aaT
-aaf
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -88329,7 +88022,7 @@ adg
aeu
alt
agu
-agX
+agt
ahB
aij
agn
@@ -88346,14 +88039,14 @@ aoB
aod
aqe
arf
-aqa
-atf
+aqU
+awy
arf
-aqa
-atf
+aqU
+awy
arf
-aqa
-atf
+aqU
+awy
dgz
tqg
ujF
@@ -88430,32 +88123,32 @@ ceq
clQ
cje
cgR
-cMm
-cDj
-cDs
-cql
-cDG
-cDG
-cEh
-cEB
-cEU
-cFk
-cAs
-cFT
-cSK
-cGx
-cGK
-nzh
-nzh
-cGY
-csd
-csd
-ccw
-aaf
-aaT
-ctv
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -88603,13 +88296,13 @@ aoz
aod
aqe
arf
-apY
+ari
ate
arf
-apY
+ari
ath
arf
-apY
+ari
ath
dgz
fvY
@@ -88650,9 +88343,9 @@ bsh
bqH
aJq
aJq
-aXf
+bPS
bCv
-bDJ
+aNI
bCt
bGD
bCv
@@ -88687,32 +88380,32 @@ ckO
ckH
cja
cny
-ccw
-cip
-cnx
-cDx
-cqb
-cqb
-cqb
-cEC
-cqb
-cqb
-cAr
-cqb
-cGh
-cGC
-cey
-ijc
-csd
-cEk
-csd
-udp
-ccw
-aaf
-aaT
-ctv
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -88898,7 +88591,7 @@ bjF
blc
bmz
bnY
-bpk
+aOH
bqJ
bsj
btI
@@ -88941,35 +88634,35 @@ ciq
cfb
cfb
cfb
-clR
+ciX
cgR
cgR
-cMm
-cir
-cDt
-cDy
-cqC
-crc
-cEi
-cED
-crc
-crc
-cFy
-cBR
-cGi
-cGD
-cGL
-ccw
-ccw
-ccw
-ccw
-ccw
-ccw
-aaa
-aaT
-aaT
-aaT
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -89111,7 +88804,7 @@ akY
afM
amp
aiX
-anA
+axC
anz
aoC
aod
@@ -89121,19 +88814,19 @@ asd
atg
arf
asd
-awo
+axT
arf
asd
-aAb
+aFe
dgz
iVU
aDK
vHj
eVC
dgz
+aBM
+aEs
aJv
-aKG
-aMg
bHt
aOE
aJn
@@ -89167,7 +88860,7 @@ aJq
aXf
bCv
bAU
-cAL
+clO
bFg
bFs
bJt
@@ -89201,32 +88894,32 @@ ces
clN
ccm
ckF
-cDe
-cDk
-coc
-cqa
-cig
-ccw
-ccw
-czF
-csd
-csd
-cFz
-cFU
-cGj
-cGE
-cGM
-cGZ
-aag
-aaa
-aaf
-aaa
-aaa
-aaa
-aaa
-aaf
-aaa
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -89374,18 +89067,18 @@ aoF
apo
aqh
arh
-asg
+auA
atj
aul
-auR
+axQ
atj
-aul
+azl
+aNH
+atj
+aJQ
azc
atj
-aAX
-azc
-atj
-aFe
+aMq
aul
aHT
aJy
@@ -89411,7 +89104,7 @@ bim
bjG
aZV
bmB
-bnZ
+aDH
bpl
bqH
bsl
@@ -89424,8 +89117,8 @@ aLY
bBx
bCv
apG
-bFk
-bDs
+aPZ
+aQa
bCv
bJs
bHo
@@ -89461,29 +89154,29 @@ cgU
cgU
cis
cjN
-cDz
-cDH
-cMm
-csd
-crM
-crV
-crV
-cFA
-csd
-cGk
-ccw
-aag
-aag
-aag
-aaf
-aaf
-aaf
-aaf
-gXs
-aaf
-aaf
-aaf
-aaf
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -89634,15 +89327,15 @@ aun
asf
ati
auk
-aux
-avt
-axL
+arQ
+aus
+aJk
bbl
-azT
-auk
-auk
-aDG
-aFd
+avt
+aJR
+aya
+aLs
+aMr
auk
aHH
aJg
@@ -89692,8 +89385,8 @@ bNT
bOV
bQj
bRw
-bSF
-bOd
+bOM
+bPT
bTP
bRA
bWQ
@@ -89709,38 +89402,38 @@ cap
ctR
ccn
cdo
-cek
+bUA
ccw
cet
cfd
-cfB
-cfI
+cgH
+cgM
cgQ
cjS
cjN
-cqm
-cgR
-crd
-cEk
-crL
-cEW
-cse
-cse
-csu
-cGl
-ccw
-aaa
-aaa
-aaf
-aaa
-aaf
-ctv
-aaT
-aaa
-aaa
-aaf
-aaa
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -89891,15 +89584,15 @@ arf
arf
arf
arf
-auU
-avG
+arf
+auC
+aKg
awr
awr
-azV
+aKr
+aAh
aAh
aAh
-aFg
-aFh
aAh
aAh
aAh
@@ -89933,7 +89626,7 @@ btL
buY
buY
bqH
-aJq
+clV
aJq
aXf
bCv
@@ -89950,7 +89643,7 @@ bOV
bQo
bRz
bSH
-bOd
+bQX
bTP
bRA
bWQ
@@ -89975,29 +89668,29 @@ ccw
ccw
cDl
cjN
-cjh
-cDI
-ccw
-ccw
-ccw
-ccw
-ccw
-cMm
-cMm
-cMm
-ccw
-aaf
-aaf
-aaf
-aaf
-aaf
-ctv
-aaT
-aaa
-aaa
-aaf
-aaa
-aaa
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
+cdj
aaa
aaa
aaa
@@ -90145,23 +89838,23 @@ aoG
cSA
aqe
arf
-aqo
-asp
+auu
+atm
+atm
arf
-auS
-avv
-awu
-awr
aAd
+auW
+awr
+aXH
+aXO
aAh
-aCm
-aDL
-aFf
-aGk
-aHU
-alN
+aSp
aAh
-aLQ
+aUP
+aAh
+bbN
+aAh
+aOL
aJq
aOE
aJn
@@ -90194,7 +89887,7 @@ aJq
aJq
bBy
bzs
-bDO
+bTy
bFl
bGH
bHU
@@ -90207,7 +89900,7 @@ bOV
bQj
bRy
bSG
-bOd
+bPT
bUK
bVT
bWR
@@ -90402,23 +90095,23 @@ aoH
cSA
aqe
arf
-asm
+aqC
blU
-atQ
-avg
-awp
-axN
+blU
+awA
+auy
+aKh
awr
-aAg
+awr
+aKJ
aAh
-aDO
-aDQ
-aFi
-aGl
-aBy
-aBy
+apH
aAh
-aMn
+apQ
+aAh
+aqt
+aAh
+clX
aJq
aOE
aJn
@@ -90487,7 +90180,7 @@ clU
clU
bOh
ccw
-coZ
+cgN
cgU
cgU
cDK
@@ -90659,21 +90352,21 @@ ajo
cSA
aqe
arf
-ari
+aqD
+ask
asu
aun
-auW
-avR
-axM
-awu
-aAf
+awv
+aKg
+aYI
+awr
+bHg
aAh
-aCn
-aDM
-aGx
-aAh
-aAh
-aBy
+aop
+bwi
+aop
+aop
+aop
aAh
aMm
aJq
@@ -90706,7 +90399,7 @@ bqH
bqH
aJq
bHt
-bBz
+bgi
bzs
bzs
bFm
@@ -90740,11 +90433,11 @@ bMQ
aaf
bQA
ckU
-clT
+ccd
cmU
bOh
ccw
-cpa
+cgP
cjc
cqo
cDL
@@ -90919,19 +90612,19 @@ arf
arf
arf
arf
-avm
-aws
-axP
-azb
-aAi
-aAh
-aCn
-aDM
-aGx
-aGm
-aHV
-aBy
-aAh
+arf
+auC
+aKN
+aYP
+baa
+aKM
+aKP
+aFE
+aDY
+aLQ
+aYS
+aop
+aMw
aJq
aJq
aJq
@@ -90962,9 +90655,9 @@ bva
bwu
bwu
bwu
-bwu
-bBB
-aJv
+bke
+cfI
+bBz
bzs
bFp
bGJ
@@ -91173,21 +90866,21 @@ ajo
app
aqi
arf
-ask
+ars
+atm
atm
arf
-avl
-awq
-axO
-aza
+aHt
+aKO
+aZb
+bab
+aSj
aAh
aAh
aAh
-aDS
-aGx
aAh
aAh
-aDN
+aMu
aAh
aMo
aNC
@@ -91219,7 +90912,7 @@ aJq
aJq
aJq
aJq
-bAj
+bnZ
aJq
aKG
bzs
@@ -91430,22 +91123,22 @@ ajo
aps
aqk
arf
-asm
+auv
+blU
aHw
-aup
-avn
-awv
-axX
-aze
+awX
+axR
+aKq
+aZZ
+awr
+bac
aAh
-aBz
-aBz
-aDU
-aGx
-aGn
-aHW
-aBy
+aVK
+azm
+azm
aAh
+aAZ
+bJS
aJq
aJq
aJq
@@ -91476,9 +91169,9 @@ aJq
aJq
bxL
byX
-aJq
-aJq
-bCA
+aXh
+bmE
+bAj
bzs
bCC
bDA
@@ -91687,31 +91380,31 @@ ajo
apr
aqj
arf
-ark
-asL
+ary
+ask
+aua
aun
-avu
-awt
-axV
-azd
-azX
-aAZ
-aCe
-aDT
-aGx
+axU
+awr
+awr
+axW
+aHb
+aLh
+aUj
+aMv
+aMv
+aMx
+aZt
aAh
-aAh
-aBy
-aAh
-aCr
-aCr
-aCr
aJC
+aJC
+aJC
+aQg
bYP
-aQg
aJC
aQg
aJC
+aJC
aQg
aJC
aJC
@@ -91768,7 +91461,7 @@ bMQ
aaf
bQA
ckX
-clV
+ccB
cmV
bOh
cig
@@ -91942,35 +91635,35 @@ ajp
ajp
ajo
apt
-aqm
-arj
-arj
-arj
-arj
-avx
-awz
-axR
-avx
+arn
+arf
+arf
+arf
+arf
+arf
+asX
+awr
+awr
+avG
+axP
aAh
-aBA
-aBA
-aDP
-aBx
-aGp
-aHX
-aBy
+aCh
+azo
+azo
aAh
-aMq
-adq
-aQb
-aPZ
-aRu
-aQc
-aUf
-aQc
-aXi
-aQc
-amB
+aAM
+aMH
+bRc
+bRe
+bty
+aFj
+ccS
+bXu
+aKR
+aFd
+aDM
+cab
+bfa
aJC
bcq
bcq
@@ -92199,16 +91892,17 @@ ajo
aoa
ajo
apt
-aql
-apv
-arl
-asM
-atV
-avw
-awy
-axQ
-azj
-arj
+aqr
+aoJ
+aoJ
+aoJ
+aoJ
+arr
+auN
+awr
+awr
+avG
+aNt
aAh
aAh
aAh
@@ -92216,19 +91910,18 @@ aAh
aAh
aAh
aAh
-aAh
-aMp
-aMr
-aOH
-aPY
-aQc
-aRx
-aQc
-aQc
-aPY
-aQc
-aZZ
-aJC
+aKR
+aKR
+buJ
+aDU
+aDX
+aEt
+aKR
+aFf
+aDN
+aDU
+aFF
+aQg
aYV
aYV
aYV
@@ -92456,35 +92149,35 @@ ahT
anb
ahT
anZ
-apu
-arj
-asb
-asV
-aus
-aus
-awA
-axT
-azl
-aAl
-arj
-aCq
-aDR
+aqo
+arf
+arf
+arf
+arf
+arf
+aDW
+avl
+avm
+avg
+awE
+aCr
+azP
aFl
aGD
-aHZ
+bdE
aCr
-aKJ
-aMr
-aMr
-aOH
-aQc
-aQd
-aQa
-aRv
-aPY
-aVw
-aPY
-bac
+boY
+bRd
+aKR
+aDO
+aFC
+cdM
+aEu
+aKR
+aFg
+aDO
+caj
+ckP
aJC
aYV
aYV
@@ -92706,44 +92399,44 @@ aif
aif
aif
aif
-aif
-aif
-alK
-aif
bkV
-anc
-anD
-aoI
-apX
-arn
-asN
-aur
-avy
-avy
-axS
-azk
-aAk
-arj
-aCf
-aDY
-aFj
+adq
+amB
+aif
+aif
+apw
+aqH
+aqI
+arf
+apu
+atl
+avw
+aut
+axM
+avx
+avn
+awp
+aNG
+aCr
+aLS
+aUC
aGr
aHI
-aJk
-aMr
-aMr
-aNt
-aOH
-aQc
-aQc
-aSq
-aQc
-aQc
-aPY
-aQc
-bab
+aOK
+aKR
+aKR
+aKR
+aKR
+aKR
+aKR
+aKR
+aKR
+aKR
+aKR
+aKR
+asq
aJC
-aYV
+bSL
aYV
ber
bfF
@@ -92955,11 +92648,7 @@ abp
afo
abp
abp
-ahn
-ahn
-aiA
-aiA
-aiA
+aSq
ahn
aiA
aiA
@@ -92971,38 +92660,42 @@ aod
ahn
apx
ahn
-arj
-asr
-asN
-aut
-avz
-aXF
-axU
-azn
-aAn
-arj
-aCh
-aEc
-aFk
-aGw
+ahn
+ahn
+ahn
+ahn
+arf
+aoI
+aqF
+awo
+arf
+aoY
+awr
+awr
+awt
+aXj
+aCr
+aQb
+aVA
+bcO
aHK
aCr
-aKr
-aMr
-bHF
-aOH
-aQc
-aQc
-aSo
-clX
-aVx
-aQc
-aQc
-aQc
+bDO
+aKR
+aKR
+aDP
+aDP
+aEo
+aKR
+aKR
+aKR
+aDP
+aKR
+aKR
bbx
aYV
aYV
-aYV
+bTs
bfF
bhd
bis
@@ -93208,16 +92901,12 @@ aaf
aaf
aaf
abp
-aaa
+aRw
afp
-aaa
+aRw
abp
-aaa
-aaa
-aaa
-aaf
-aaf
-aaf
+aqa
+ahn
aaa
aaf
aaf
@@ -93226,36 +92915,40 @@ ahn
anE
aod
aoK
-apw
+amI
aqp
-arj
-asq
-asN
-aut
-avz
-avz
-axU
-azm
-aAm
-arj
+ahn
+anc
+anr
+anM
+aqF
+aqF
+aqF
+aur
+aun
+aEr
+awr
+awr
+awt
+aSo
aCr
-aEb
aCr
+aVD
aGv
aCr
aCr
-aKq
-aLS
-aNF
-aOH
-aQc
-aQc
-aSH
-aQc
-aQc
-aRx
-aQc
-aQc
+aCm
+aKR
+aDu
+aDT
+aDV
+aEp
+aHX
+aKR
+aIs
+atT
+aFD
+aKR
aQg
aYV
aYV
@@ -93280,7 +92973,7 @@ bvj
bvj
bvd
bFu
-bvj
+nWU
bvj
bvd
bKH
@@ -93469,12 +93162,8 @@ aaa
aaa
aaa
adR
-aaa
-aaa
-aaa
-aaf
-aaf
-aaa
+ahn
+ahn
aaa
aaa
aaa
@@ -93485,43 +93174,47 @@ aoe
aoL
apy
aqq
-arj
-ast
-asN
-auv
-avA
-avA
-axW
-azo
-aAp
+ahn
+aql
+aqN
+arf
+aqE
+ark
+aqF
+axN
+arf
+aKi
+avm
+aAn
+aIG
+aXl
aBC
aCt
aEA
-aCt
aGz
aIb
aCr
-aKN
-aMv
-aNH
-aOJ
-aQc
-aPY
-aSG
-aPY
-aUg
-bFC
-aRw
-aQc
+aCn
+aKR
+aKR
+axV
+aFh
+arC
+aKR
+aKR
+aNn
+avR
+aFD
+aKR
bbx
aYV
aYV
bet
bfH
bhf
+bkl
bhh
-bhh
-bhh
+bkl
bmJ
bof
bpu
@@ -93721,15 +93414,11 @@ aaa
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+gXs
aaa
aaa
aaa
@@ -93742,43 +93431,47 @@ ahn
ahn
ahn
ahn
-arj
-ass
-asX
-auu
-att
-att
-att
-azf
+ahn
+arf
+arf
+arf
+asd
+arf
+arf
+arf
+arf
+aMJ
+azn
aAo
-apX
+aJz
+amP
aBB
aBB
aBB
aGy
aIa
cNE
-aKM
-aMu
-aNG
-aKM
-aKM
-aKM
-aSp
-aQc
-aQc
-aSq
-aQc
-bad
+aQP
+awB
+awB
+aaK
+aFi
+awB
+awB
+awB
+aIi
+aOu
+aKR
+asD
bby
aYV
aYV
bet
bfG
bhe
-bit
+blN
bjS
-bli
+bnd
bli
boe
bli
@@ -93978,15 +93671,11 @@ aaa
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+gXs
aaa
aaa
aaa
@@ -93996,37 +93685,41 @@ aaa
aag
aag
aag
-aaa
-aaa
-aaf
-arj
-clO
-asZ
-aua
-clO
-awB
-axY
-azh
-gsz
-arj
-aaf
-aaa
+arf
+amJ
+axO
+arf
+apu
+acN
+amP
+atz
+axL
+atQ
+awu
+aEv
+azj
+aAb
+aAr
+amN
+amN
+aza
+azX
alP
aGI
aId
aJD
-aKP
-aMx
-aNJ
-aQe
-aOL
-aOL
-aOL
-aOL
-aOL
-aOL
-aXO
-aZb
+aCx
+awC
+awC
+bbs
+aHW
+awC
+awC
+awC
+awC
+aIw
+aKR
+asG
aJC
aYV
aYV
@@ -94235,10 +93928,11 @@ aaa
aaa
aaa
aaa
-aaa
+aab
aaa
aqG
aaa
+asL
aaa
aaa
aaa
@@ -94248,44 +93942,43 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aqr
-arm
-arm
-asY
+arf
+amO
+anr
+anM
+aqF
+alK
+arf
+axZ
+amN
atZ
-auB
-auB
-atZ
-azg
-azp
-azp
-aCu
-aaf
+amN
+amN
+bBB
+cdP
+ceu
+cfA
+amN
+azb
+aUk
alP
aGH
aIc
aJC
-aKO
-aMw
-aNI
-aMw
-aOK
-acN
-acN
-acN
-acN
-acN
-aQc
-bae
+aCy
+aTN
+aDS
+aKR
+aKR
+aEq
+aEq
+aEq
+aEq
+aEq
+aKR
+aKR
aJC
-bcr
+cmc
aYV
bet
bfG
@@ -94328,7 +94021,7 @@ bYU
bXW
bOh
cbH
-ccB
+cbX
cbH
bOh
aaf
@@ -94492,6 +94185,11 @@ aaa
aaa
aaa
aaa
+aac
+apK
+aaa
+apK
+atX
aaa
aaa
aaa
@@ -94501,30 +94199,25 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aqs
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aCv
-aaa
+arf
+arf
+arf
+arf
+aoI
+anD
+arj
+art
+amN
+amN
+amN
+amN
+bDL
+amN
+aAX
+cfB
+amN
+azd
+aAf
alP
aGJ
aIe
@@ -94534,13 +94227,13 @@ aJC
aJC
aJC
aJC
-aXj
-aVy
-aSY
-aVy
-aVy
-aYI
-bah
+aXF
+aEw
+aEx
+aEw
+aNF
+aEq
+aHU
aJC
aYV
bdo
@@ -94749,8 +94442,11 @@ aaa
aaa
aaa
aaa
-aaa
-aae
+apv
+apv
+gXs
+apv
+apv
aaa
aaa
aaa
@@ -94762,42 +94458,39 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aqs
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aCv
-aaf
+arf
+aqm
+aqF
+axX
+arf
+asb
+asr
+avu
+amN
+amN
+bDL
+amN
+aAX
+cfB
+amN
+aze
+aAg
alP
aGJ
aIe
-aJE
-aKQ
+asm
aLU
-aNu
+aKQ
+aYH
aJC
aPw
-aQc
+aZw
aQc
aSZ
aQc
-aVy
-czP
-bag
+aFk
+aEq
+aHV
aJC
aYV
aYV
@@ -95007,6 +94700,9 @@ aaa
aaa
aaa
aaa
+gXs
+aaa
+gXs
aaa
aaa
aaa
@@ -95019,26 +94715,23 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aqs
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aCv
-aaa
+arf
+ast
+arD
+apX
+arf
+arO
+aup
+atV
+amN
+asg
+bZf
+cdY
+cff
+cfC
+amN
+azb
+bvG
alP
aGA
aHS
@@ -95052,9 +94745,9 @@ aRz
aSF
aQc
aQc
-aXl
-aQc
-bai
+aFp
+aKR
+atk
aJC
aYV
aYV
@@ -95264,9 +94957,9 @@ aaa
aaa
aaa
aaa
+apT
aaa
-aaa
-aaa
+apT
aaa
aaa
aaa
@@ -95279,43 +94972,43 @@ aaa
aae
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aqs
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aCv
-aaf
+arf
+arf
+arf
+arf
+arf
+asZ
+att
+avA
+awq
+aVy
+aVG
+amN
+aRu
+aVP
+aXi
+azV
+aPj
alP
aGL
aHM
-aJm
+asp
aKz
-mjr
+bLs
aND
aJC
-aab
+aZv
aRg
aQc
-aac
-aQc
-aXk
-aQc
+bai
aQc
+aFt
+aKR
+aKR
aJC
aYV
aYV
-bev
+bNM
bfK
bhi
bhi
@@ -95513,6 +95206,7 @@ aaa
aaa
aaa
aaa
+aae
aaa
aaa
aaa
@@ -95538,34 +95232,33 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
+gXs
aqs
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
-aro
+asY
+asY
+auB
+aws
+avy
+avy
+aws
+azp
+aCu
+aCu
aCv
-aaa
+auR
alP
aGL
aIe
aJC
-aKS
-aMC
+atf
+bLt
aJC
aJC
aJI
aJI
aSI
aJI
-aVA
+baw
aJI
aYK
aJI
@@ -95795,27 +95488,27 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
+gXs
+gXs
aqu
-arm
-arm
-arm
-auy
-auB
-auB
-axZ
-azp
-azp
-azp
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
aCw
-aaf
+aaa
alP
aGL
aIg
aJH
aKR
-aMB
+bMF
aJC
aOP
aJI
@@ -95826,7 +95519,7 @@ aVz
aVz
aYJ
aJI
-bbz
+bSr
aYV
aYV
aYV
@@ -96051,22 +95744,22 @@ aaa
aaa
aaa
aaa
+gXs
+gXs
aaa
+aqu
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aCw
aaf
-aaf
-aaf
-arj
-arj
-arj
-auA
-avD
-awC
-ayb
-arj
-alP
-alP
-aaa
-aaa
alP
aGL
aIe
@@ -96307,23 +96000,23 @@ aaa
aaa
aaa
aaa
+gXs
+gXs
+aaa
+aaa
+aqu
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aCw
aaa
-aaf
-aaf
-aaf
-aaf
-aaf
-aaf
-arj
-auz
-avC
-avC
-aya
-arj
-arA
-alP
-alP
-alP
alP
aGN
aIh
@@ -96343,7 +96036,7 @@ baj
bbz
aYV
bdp
-aYV
+bDv
bfK
bfK
bfK
@@ -96396,7 +96089,7 @@ cle
cli
uPT
cmY
-cmc
+cme
cop
cmd
cmd
@@ -96563,24 +96256,24 @@ aaa
aaa
aaa
aaa
+gXs
+gXs
aaa
+aaa
+aaa
+aqu
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aCw
aaf
-aaf
-aaa
-aaa
-aaa
-aaa
-aaf
-arj
-auB
-auB
-arj
-gOZ
-arj
-anf
-anf
-rsp
-rsp
alP
aGB
aIf
@@ -96592,11 +96285,11 @@ aON
aQk
aRD
aSM
-aVD
+aEy
aVE
aXm
aVz
-bak
+cam
bbz
aYV
bdp
@@ -96819,25 +96512,25 @@ aaa
aaa
aaa
aaa
-aaa
-aaf
-aaf
-aaa
-aaa
-aaa
-aaa
-aaa
-aaf
-aaa
gXs
-aoV
-alP
-anf
-anf
-anf
-anf
-aDW
-aDV
+gXs
+aaa
+aaa
+aaa
+aaa
+aqu
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aro
+aCw
+aaa
alP
aGL
aHY
@@ -96849,7 +96542,7 @@ aOM
aQj
aRB
aSL
-aTN
+cmm
cCq
aVz
cAg
@@ -97075,7 +96768,6 @@ aaa
aaa
aaa
aaa
-aaa
aaf
aaf
aaa
@@ -97083,18 +96775,19 @@ aaa
aaa
aaa
aaa
-aaa
-aaf
-aaa
-gXs
-aoV
-alP
-awD
-anf
-anf
-anf
-aCy
-jnR
+arm
+asY
+asY
+asY
+awz
+avy
+avy
+aAm
+aCu
+aCu
+aCu
+aVx
+auR
alP
aGL
avI
@@ -97110,7 +96803,7 @@ aTO
cCq
aVz
aVz
-bak
+caB
bbz
aYV
bdp
@@ -97126,8 +96819,8 @@ boo
bqQ
bhg
bua
-bvn
-bwL
+bne
+bpk
bxX
bsL
bua
@@ -97331,7 +97024,6 @@ aaS
aaS
aaS
aaS
-aaa
aaf
aaf
aaa
@@ -97339,21 +97031,22 @@ aaa
aaa
aaa
aaa
-aaf
-aaf
-alO
-alO
-alO
+aaa
+aaa
+aaa
+aaa
+auR
+azg
+avz
+ccH
+aAX
+aAp
+aAk
+aAl
+aCq
+aDR
alP
-alP
-alP
-alP
-alP
-alP
-alP
-vpY
-aFn
-aGP
+aGJ
avI
aJI
aJI
@@ -97368,7 +97061,7 @@ aVF
aVF
aYM
aJI
-bbA
+bSu
aYV
bdr
bdb
@@ -97589,26 +97282,26 @@ aaf
aaa
aaS
aaf
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaf
-aaa
-aaa
-aaa
-aaa
-aaa
-aag
-alO
-arp
-alO
-awD
-anf
-anf
-awD
-anf
-aoP
-alP
-aBE
-alP
-aDX
+aaf
+auR
+auS
+ayb
+azk
+atZ
+amN
+amN
+aAs
+amN
+amN
alP
aGJ
avI
@@ -97640,7 +97333,7 @@ boq
boq
brj
bpE
-btk
+bop
bum
bvq
bzn
@@ -97845,22 +97538,22 @@ adS
aeG
aaa
aaS
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaf
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aag
-cxW
-anf
-aqv
-anf
-anf
-anf
-aEl
-anf
+aaf
+alO
+auR
+auR
+auR
+azT
+aAi
cVb
cVb
cVb
@@ -97897,7 +97590,7 @@ bpE
bpE
bpE
bpE
-bti
+bot
bul
bvp
bzm
@@ -98111,11 +97804,11 @@ aaa
aaa
aag
alO
-alO
+arp
alO
anf
-auC
-alP
+anf
+anf
anf
anf
cVb
@@ -98137,7 +97830,7 @@ aSR
aUi
aVJ
aOX
-aYP
+aPP
bal
bam
aYV
@@ -98366,20 +98059,20 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-alO
-aqy
-anf
-alP
-awE
+aag
+ass
anf
+aqv
+ayf
+aux
+auU
+avv
+avC
cVb
vCb
-wUY
-khb
-sxs
+bBI
+bHx
+bHB
tal
aCI
aIj
@@ -98623,15 +98316,15 @@ aaf
aaf
aaf
aaf
-aaf
-apC
-apC
-apC
-apC
-apC
-apC
+aag
+alO
+anf
+alO
+aud
+auz
alP
anf
+aCG
cVb
cVb
cVb
@@ -98644,12 +98337,12 @@ aIq
aKK
aMy
aIp
-aOX
+arg
aQm
-aRJ
-aRJ
-aRJ
-aVK
+aBx
+aGp
+aGp
+aHc
aRJ
aRJ
aRJ
@@ -98882,18 +98575,18 @@ aof
aof
aof
aof
-arq
-asv
-atv
-auD
-apC
-awF
-anf
alP
-arA
-anf
+alP
+alP
+alP
+alP
+awF
+aCG
+alP
+bBM
+aBE
aCz
-asw
+aQU
aCJ
aGT
aIn
@@ -98903,10 +98596,10 @@ aMt
aIp
aOW
aQm
-aRJ
-aSS
-aUj
-aRJ
+aGm
+aGw
+aGP
+aHr
aRJ
aYQ
cBg
@@ -99139,35 +98832,35 @@ aoh
aoN
apA
aof
-ars
-anf
-arx
-anf
-apC
+arq
+asv
+atv
+auD
+alP
aoQ
-cqM
-asw
-asw
-asw
-aCA
-anf
-aFp
+avD
+ayg
+ayg
+ayg
+azf
+aFn
+aAq
aGW
anf
aIp
-fGf
+bcr
aMA
aIp
aOX
aQm
-aRJ
-aST
-aUk
-aRJ
+aGm
+aGx
+aGR
+aHr
aRJ
aYQ
bam
-aYV
+bBT
aYV
aYV
aYV
@@ -99384,10 +99077,10 @@ adU
adU
adU
adU
-adU
-adU
-adU
alg
+aTq
+aTq
+aTq
acx
amv
ane
@@ -99396,11 +99089,11 @@ aog
aoM
apz
aqw
-arr
+asM
asw
asw
auE
-apC
+alP
awG
auF
alP
@@ -99417,14 +99110,14 @@ aMz
aNQ
aOX
aQm
-aRJ
-aRJ
-aRJ
-aRJ
+aGn
+aGK
+aGK
+aHs
aRJ
aYR
ban
-aYV
+bCI
aYV
aYV
bez
@@ -99481,7 +99174,7 @@ bAw
cmk
cnf
bzs
-aaa
+aaf
aaa
aaa
aaa
@@ -99653,22 +99346,22 @@ aoi
aoO
apB
aqx
-art
+asN
anf
anf
auF
-apC
+alP
awH
auF
alP
-aAr
-anf
+axd
+aBF
alP
aaa
aFq
aGX
aIp
-aJO
+bHZ
aKU
aME
aNN
@@ -99681,13 +99374,13 @@ aXo
aXo
aYO
bap
-aYV
+bCI
aYV
bci
beB
bfS
bfS
-kQk
+ckJ
ipA
gbT
cTO
@@ -99910,35 +99603,35 @@ aof
aof
aof
aof
-anf
+asV
aoP
atw
auF
-apC
+alP
aoP
auF
azr
-anf
+aRv
atw
alP
alP
aFo
aGV
aIp
-aJN
+aJO
aLd
aMN
aNQ
aOZ
aOX
aOX
-aOX
+cma
aUz
aVM
aOX
aYT
bam
-aYV
+bDs
baR
bcb
bdl
@@ -99995,7 +99688,7 @@ bAw
bAw
clp
aag
-aaa
+apv
aaa
aaa
aaa
@@ -100171,9 +99864,9 @@ anf
anf
aty
auF
-apC
alP
-auF
+aAt
+aAu
alP
alP
alP
@@ -100252,7 +99945,7 @@ bPn
bPn
bPn
aag
-aaa
+gXs
aaa
aaa
aaa
@@ -100424,16 +100117,16 @@ aaa
aaa
apC
anf
-anf
+aRv
alP
atx
auF
-apC
+alP
auD
auF
-alP
-aAs
-anf
+apE
+axJ
+awL
alP
aCG
aFr
@@ -100507,9 +100200,9 @@ czY
cOT
aaa
aaa
+gXs
aaa
-aaa
-aaa
+gXs
aaa
aaa
aaa
@@ -100685,13 +100378,13 @@ alP
alP
apE
auG
-apC
-aoP
+alP
+clM
auF
apE
anf
anf
-alP
+azh
aCG
aDZ
aFu
@@ -100764,9 +100457,9 @@ czY
cOT
aaa
aaa
+gXs
aaa
-aaa
-aaa
+gXs
aaa
aaa
aaa
@@ -100952,12 +100645,12 @@ aCB
aEB
aFs
bbE
-aIr
+amd
bav
aLf
-aIt
-aNS
-aPb
+aCU
+aDG
+aRO
aQp
aRN
aIt
@@ -100979,7 +100672,7 @@ bls
bfT
boD
bpY
-bsP
+aPY
box
btw
buT
@@ -101020,11 +100713,11 @@ cQB
czY
cOT
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+apv
+apv
+apv
+apv
+apv
aaa
aaa
aaa
@@ -101197,24 +100890,24 @@ apC
alP
alP
alP
-anf
+ciw
auH
avF
awI
ayc
+ciV
asw
-aAu
asw
aCD
aEa
aFv
aGG
aIu
-aJQ
-bCI
+aBA
aIt
aIt
-aPb
+aDG
+aRO
aIt
aRN
aIt
@@ -101460,17 +101153,17 @@ avE
anf
anf
awD
-aAt
+anf
aty
aCC
aDZ
+anf
aFu
-aFu
-aIs
-aJP
-aLg
-aMH
+aBy
+aJJ
+aCA
aIt
+aDJ
aYW
aYW
aYW
@@ -101489,7 +101182,7 @@ cHJ
cHL
blw
bjP
-blt
+bTu
bfT
boG
bqa
@@ -101537,10 +101230,10 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
+bsP
+bti
+btk
+buh
aaa
aaa
aaa
@@ -101722,12 +101415,12 @@ alP
aCE
aDZ
aFu
-aHc
-aIw
+aFu
+aBz
aJS
-aJS
-aMJ
+aCS
aNP
+aDL
aOS
aOS
aOS
@@ -101790,15 +101483,15 @@ cOT
cQB
cAa
cOT
+gXs
+bqb
+brl
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bsP
+bsP
+bsP
+buh
aaa
aaa
aaa
@@ -101966,7 +101659,7 @@ aaf
aaf
alO
aqA
-anf
+arz
alP
anf
anf
@@ -101975,25 +101668,25 @@ awJ
anf
alP
aAv
-anf
+cih
aCE
aDZ
aFu
-aHb
+aIy
aIv
-aJR
-aJR
+aBD
aIt
aIt
+aDG
+aRO
+aIt
aPd
aIt
-aRO
-aRO
-aUC
-aVP
+aPb
+aIt
aXu
aYW
-bat
+aVS
bbD
aYV
aXq
@@ -102048,14 +101741,14 @@ czU
czZ
cOT
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+apv
+brT
+brT
+bsP
+bsP
+bsP
+buA
+bti
aaa
aaa
aaa
@@ -102239,15 +101932,15 @@ aFu
aHd
aIx
aJF
-aLh
+aQq
+aNS
+aDG
+aRO
aIt
-aNV
aPd
aIt
-aRO
-aRO
+aPb
aIt
-aVQ
aXu
aYW
aVQ
@@ -102304,15 +101997,15 @@ cOT
cgm
czY
cOT
+gXs
+bqb
+brl
+bsB
+brT
+brT
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bsB
aaa
aaa
aaa
@@ -102477,8 +102170,8 @@ aaf
aaf
aaa
aaa
-alO
-apD
+alP
+aie
aEl
anf
arx
@@ -102492,22 +102185,22 @@ alP
alP
aCF
aDZ
+alP
aFw
aFw
aFw
aFw
aFw
-aFw
-aFw
+aFu
aPf
aQq
aRP
+cfE
aIt
aIt
-moD
aWd
aXV
-aIt
+aGl
bbD
aYV
aXq
@@ -102564,11 +102257,11 @@ cNW
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bsB
+bsB
+bti
+bsP
+gXs
aaa
aaa
aaa
@@ -102734,15 +102427,15 @@ aaa
aaf
aaf
aaa
-alP
+alO
anf
anf
arw
-asA
-asA
+bxh
+clL
anf
alP
-awL
+aqB
anf
anf
apE
@@ -102751,17 +102444,17 @@ aCH
aED
aFy
aGO
-aIB
-aJJ
+aIA
+aJM
aKZ
-aMW
aFw
aFu
aFu
aFu
+aFu
aTc
aUD
-aVS
+aSk
aYW
aYW
bax
@@ -102825,10 +102518,10 @@ aaa
aaa
aaa
aaa
-cOT
-cOT
-cOT
-aag
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -103008,17 +102701,17 @@ aCk
aEC
aFx
aGM
-aIy
+aIB
aJG
-cAz
aMK
aFw
-aPg
+aMW
+aPi
aQr
aFu
aTb
aIt
-aVR
+aLg
aYW
aYW
aUD
@@ -103079,13 +102772,13 @@ aaa
aaa
aaa
aaa
+apv
+apv
+apv
+apv
aaa
aaa
aaa
-cOT
-cOe
-cqu
-aag
aaa
aaa
aaa
@@ -103247,16 +102940,16 @@ aaa
aaa
aaa
aaa
+gXs
alP
-alP
-alP
-aqB
-arx
-anf
-anf
-anf
-alP
-awM
+apD
+ayf
+bev
+cil
+aFn
+aFn
+aBB
+bGB
ayg
ayg
ayg
@@ -103269,9 +102962,9 @@ aFw
aLo
aLb
aFw
-aFw
-aPi
-aQt
+aPg
+aYW
+aYW
aRQ
aIt
aUF
@@ -103332,17 +103025,17 @@ cOT
cgm
czY
cOT
-aaf
-aaf
-aaf
-aaf
-aaf
-cNW
-cNW
-cOT
-cqu
-cOT
-aag
+aaa
+aaa
+aaa
+aaa
+gXs
+aaa
+aaa
+gXs
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -103503,13 +103196,13 @@ aaa
aaa
aaa
aaa
-aaa
-alP
-aoP
-alP
-alP
-apE
-alP
+amx
+amx
+amx
+amx
+aMB
+amx
+amx
atB
alP
alP
@@ -103523,16 +103216,16 @@ aEd
aFw
aHf
aIz
-aJM
+aJP
aLa
-cBZ
aFw
aPh
+aYW
aQs
aFu
aTd
aUE
-aVT
+aVR
aYW
aYW
aZd
@@ -103592,13 +103285,13 @@ cOT
aaa
aaa
aaa
-aaf
-aaf
-cNW
-cwy
-cmn
-cmn
-cOT
+aaa
+gXs
+aaa
+aaa
+gXs
+aaa
+aaa
aaa
aaa
aaa
@@ -103753,36 +103446,35 @@ aaa
aaa
aaa
aaa
-aaf
-aaf
-aaf
-aaf
-alP
-alP
-alP
-alP
-alP
-anf
-anf
-anf
-anf
-anf
-anf
-aty
-anf
-awx
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+amx
+axE
+aIr
+aJm
+aNV
+bDX
+bFC
+bGg
+bGh
+bGg
+bGS
avI
asA
apE
-arx
aCo
+aCG
aEf
aFw
aGU
aIC
aJU
aLe
-aMX
aFw
aCR
aCR
@@ -103790,6 +103482,7 @@ aCR
aCR
aCR
aCR
+aCR
aWe
aWe
aCR
@@ -103852,10 +103545,10 @@ cNW
cNW
cNW
cNW
-cmn
-cmn
-cmn
cOT
+cOT
+aag
+aaa
aaa
aaa
aaa
@@ -104014,15 +103707,15 @@ aaa
aaa
aaa
aaa
-alO
-amx
-anf
-anf
-anf
-anf
-alP
-alP
-alP
+aaa
+aaa
+aaa
+apY
+aIr
+aIr
+aIr
+aIr
+aMC
asB
asB
asB
@@ -104036,13 +103729,13 @@ aCK
aEf
aFw
aHg
-aIA
+cBZ
aJT
aLc
-aMX
aFw
aFz
aFz
+aFz
aRR
aTe
aUG
@@ -104106,14 +103799,14 @@ cko
clq
cmq
ciI
-cnJ
-cri
-cTI
-cmn
-cBT
-cBU
-cOT
-aaa
+bae
+cmJ
+cOe
+cOe
+cmK
+aag
+gXs
+apv
aaa
aaa
aaa
@@ -104271,15 +103964,15 @@ aaa
aaa
aaa
aaa
-alP
-alP
-alP
-alP
-alP
-anf
-alP
-aqD
-arz
+aaa
+aaa
+aaa
+apY
+aIr
+aIr
+aIr
+aIr
+aNu
asB
atD
auJ
@@ -104296,8 +103989,8 @@ aGY
aII
aJW
aMX
-aMX
aNW
+aFz
aPl
aQv
aPl
@@ -104363,13 +104056,13 @@ cNW
cOx
cBL
cOe
-cOe
cvO
cNW
cNW
-cNW
-cNW
-cNW
+cOT
+cOT
+aag
+aaa
aaa
aaa
aaa
@@ -104526,17 +104219,17 @@ aaa
aaa
aaa
aaa
-aaf
-aaf
-aaf
-aaf
-aaf
-aaf
-alP
-anf
-alP
-aqC
-ary
+aaa
+aaa
+aaa
+aaa
+aaa
+amx
+aIr
+aIr
+aIr
+aIr
+aIr
asB
atC
auI
@@ -104554,7 +104247,7 @@ aHi
aJV
aFw
aFw
-aFw
+aFz
aPk
aQu
aPk
@@ -104619,9 +104312,9 @@ cNW
cNW
cNW
cNW
-cNW
cOe
-csy
+bag
+clH
cko
cAf
aaa
@@ -104788,12 +104481,12 @@ aaa
aaa
aaa
aaa
-aaf
-alP
-anf
-alP
-alP
-alP
+apY
+aIr
+aIr
+aIr
+aIr
+aIr
asB
atE
auI
@@ -104803,7 +104496,7 @@ avM
azv
aAA
asB
-cSz
+aCE
aEi
aFw
aHl
@@ -104871,14 +104564,14 @@ ceO
cNW
cgm
chw
-ciK
+cgp
cjC
+cgu
ckp
cls
-cmr
-cNW
cOe
-cmo
+cOe
+cou
cNW
aaf
aaf
@@ -105043,20 +104736,20 @@ aaa
aaa
aaa
aaa
-aaf
-aaf
-aaf
-alP
-anf
-apE
-anf
-anf
+aaa
+aaa
+apY
+aIr
+aIr
+aIr
+aIr
+aIr
asB
asB
asB
avL
awR
-auI
+aMp
azu
aAz
asB
@@ -105096,7 +104789,7 @@ buo
bvJ
bCk
byo
-aDH
+btD
bxP
bCf
bvK
@@ -105126,16 +104819,16 @@ bQZ
cdR
ceN
cNW
-cgp
+axY
chv
ciJ
cbf
-cbf
+ciK
clr
-bnt
-cNW
+bah
cOe
-cou
+cOe
+bMB
cOT
aaa
aaa
@@ -105302,12 +104995,12 @@ aaa
aaa
aaa
aaa
-aaf
-alP
-aoQ
-alP
-aqE
-arA
+amx
+awM
+aIr
+aJE
+aIr
+bFk
asB
atG
auL
@@ -105389,10 +105082,10 @@ cNW
cNW
cNW
clt
-bnt
-cNW
+cQw
cOe
-bMB
+cOe
+bNA
cOT
aaa
aaa
@@ -105558,13 +105251,13 @@ aaa
aaa
aaa
aaa
-aaf
-aaf
-alP
-alP
-alP
-alP
-alP
+aaa
+amx
+amx
+amx
+amx
+amx
+amx
asB
atF
auK
@@ -105645,11 +105338,11 @@ chx
cNW
aaa
cNW
-cgr
-cms
+clt
+cQw
+cNW
+cNW
cNW
-cOe
-bNA
cNW
aaf
aaf
@@ -105850,9 +105543,9 @@ aXB
aZh
baB
aCR
-bcq
+bNa
bdx
-bcq
+bPv
bgc
bgc
biX
@@ -105903,10 +105596,10 @@ cOT
aaa
cOT
clt
-bnt
+cQw
+cOe
cOe
cOe
-cNW
cNW
aaa
aaa
@@ -106161,18 +105854,18 @@ aaa
cOT
clt
cQw
-cNW
-cNW
-cNW
-aaa
-aaa
-aaS
-aaS
-aaS
-aaS
-aaS
-aaS
-aaS
+cOe
+cOe
+cOe
+cOe
+sQX
+cdi
+cdi
+cdi
+cdi
+cdi
+cdi
+cdi
aaS
aaS
aba
@@ -106358,7 +106051,7 @@ aCR
aCR
aCR
aTl
-amd
+aUL
aVW
aXD
aZj
@@ -106411,17 +106104,17 @@ ccT
bSc
bSc
cfu
-cgu
+bnt
chA
cNW
aaa
cNW
clt
cQw
-aaf
-aaf
-aaf
-aaf
+cOe
+cOe
+cOe
+cNW
aaf
aaS
aaa
@@ -106675,10 +106368,10 @@ cNW
cNW
clt
cQw
-aaa
-aaa
-aaa
-aaa
+cOe
+cOe
+cOe
+cNW
aaa
aaS
aaa
@@ -106924,18 +106617,18 @@ cbZ
bSl
cmo
cNW
-cOx
+ckR
cNW
chC
ciL
cOe
cOe
clv
-cmt
-aaa
-aaa
-aaa
-aaa
+cQw
+cNW
+cNW
+cNW
+cNW
aaa
aba
aaf
@@ -107191,7 +106884,7 @@ clu
cmt
aaa
aaa
-aaa
+gXs
aaa
aaa
aaf
@@ -107705,7 +107398,7 @@ cjD
cjD
cnj
aaa
-aaa
+gXs
aaa
aaa
aaf
@@ -107976,7 +107669,7 @@ crD
aaa
aaa
aaa
-csZ
+aSY
aaa
aaa
aaa
@@ -108223,18 +107916,18 @@ cyU
cpi
cpi
cpi
-cqJ
+aSH
+aSS
crk
crk
crk
crk
crk
+aST
+aSH
+aSS
crk
-crk
-csE
-cpi
-csY
-cpi
+aST
cpi
cpi
ctB
@@ -108490,7 +108183,7 @@ crF
aaa
aaa
aaa
-csZ
+aTa
aaa
aaa
aaa
@@ -108971,8 +108664,8 @@ cbf
cbf
cbf
cbf
-cbf
bYr
+cbf
clr
cad
cbi
@@ -109229,7 +108922,7 @@ cNW
cNW
cNW
cNW
-cNW
+clR
clt
cac
cbh
@@ -109495,7 +109188,7 @@ cbf
cbf
ceT
cNW
-cOe
+clT
chH
cNW
aaf
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index e500c85640..821672a9b4 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -1800,7 +1800,7 @@
pixel_y = -32
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/twohanded/required/kirbyplants/random,
@@ -15186,7 +15186,7 @@
/area/crew_quarters/bar)
"aGc" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = 32
},
@@ -15457,7 +15457,7 @@
pixel_y = 32
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light_switch{
@@ -16541,16 +16541,10 @@
/area/security/prison)
"aId" = (
/obj/machinery/seed_extractor,
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel,
/area/security/prison)
"aIe" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -16568,9 +16562,6 @@
/obj/structure/cable/white{
icon_state = "2-4"
},
-/obj/structure/cable/white{
- icon_state = "2-8"
- },
/obj/structure/cable/white{
icon_state = "1-2"
},
@@ -16837,7 +16828,7 @@
/area/maintenance/disposal/incinerator)
"aIy" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light_switch{
@@ -17800,7 +17791,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -18952,25 +18943,11 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel,
/area/security/prison)
-"aMd" = (
-/obj/structure/table,
-/obj/item/storage/crayons,
-/obj/item/storage/crayons,
-/obj/structure/sign/warning/electricshock{
- pixel_y = 32
- },
-/obj/effect/decal/cleanable/cobweb,
-/turf/open/floor/plating{
- icon_state = "platingdmg2"
- },
-/area/security/prison)
"aMe" = (
-/obj/structure/table,
-/obj/machinery/computer/libraryconsole/bookmanagement,
/obj/structure/cable/white{
icon_state = "1-4"
},
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
/area/security/prison)
"aMf" = (
/obj/structure/easel,
@@ -21509,7 +21486,7 @@
"aQl" = (
/obj/structure/table/wood,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/camera,
@@ -23625,7 +23602,7 @@
/area/crew_quarters/theatre)
"aTy" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light_switch{
@@ -26892,6 +26869,7 @@
/area/engine/atmos)
"aXW" = (
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"aXX" = (
@@ -27360,7 +27338,7 @@
/area/crew_quarters/bar/atrium)
"aYF" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light{
@@ -27536,7 +27514,7 @@
"aYR" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = -32
},
@@ -27662,7 +27640,7 @@
"aZb" = (
/obj/machinery/photocopier,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = -32
},
@@ -29280,6 +29258,7 @@
/area/engine/atmos)
"bbO" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engine/atmos)
"bbP" = (
@@ -29359,7 +29338,7 @@
pixel_y = 22
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/chem_master/condimaster{
@@ -29626,7 +29605,7 @@
/obj/item/clipboard,
/obj/item/toy/figure/miner,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light{
@@ -30776,6 +30755,7 @@
/area/engine/atmos)
"bev" = (
/obj/machinery/portable_atmospherics/canister/toxins,
+/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"bew" = (
@@ -30842,7 +30822,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -31080,7 +31060,7 @@
"beY" = (
/obj/structure/kitchenspike,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -32517,6 +32497,7 @@
/area/engine/atmos)
"bhw" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/engine/atmos)
"bhx" = (
@@ -32650,7 +32631,7 @@
/area/crew_quarters/kitchen)
"bhL" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = 32
},
@@ -34629,6 +34610,7 @@
/obj/machinery/portable_atmospherics/canister/nitrous_oxide{
valve_open = 1
},
+/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"bkI" = (
@@ -37331,7 +37313,6 @@
/obj/item/clothing/accessory/armband/deputy,
/obj/item/clothing/accessory/armband/deputy,
/obj/item/clothing/accessory/armband/deputy,
-/obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly,
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -40118,7 +40099,7 @@
/area/crew_quarters/heads/hos)
"bty" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = -32
},
@@ -40805,7 +40786,7 @@
/area/security/main)
"buM" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = -32
},
@@ -41867,7 +41848,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light_switch{
@@ -43239,7 +43220,7 @@
"byI" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/red{
@@ -43253,7 +43234,7 @@
/area/security/execution/transfer)
"byJ" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -48778,7 +48759,7 @@
/area/engine/gravity_generator)
"bGg" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/twohanded/required/kirbyplants/random,
@@ -48817,7 +48798,7 @@
/area/engine/break_room)
"bGk" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/airalarm{
@@ -48958,7 +48939,7 @@
"bGt" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light_switch{
@@ -49913,7 +49894,7 @@
/area/engine/gravity_generator)
"bHS" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light_switch{
@@ -50429,7 +50410,7 @@
"bIG" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral,
@@ -51904,7 +51885,7 @@
"bKU" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -52468,7 +52449,7 @@
"bLK" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/button/door{
@@ -55397,7 +55378,7 @@
"bQh" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/yellow{
@@ -57032,7 +57013,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/red{
@@ -57176,7 +57157,7 @@
pixel_y = -3
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -57271,7 +57252,7 @@
layer = 2.9
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light/small{
@@ -60820,7 +60801,7 @@
"bXY" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -60922,7 +60903,7 @@
"bYh" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -60943,7 +60924,7 @@
"bYi" = (
/obj/structure/window/reinforced,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -62303,7 +62284,7 @@
/area/ai_monitored/turret_protected/aisat_interior)
"caj" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/porta_turret/ai,
@@ -64060,7 +64041,7 @@
"cdk" = (
/obj/machinery/vending/wardrobe/law_wardrobe,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/wood,
@@ -64099,7 +64080,7 @@
/area/security/brig)
"cdn" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light{
@@ -67053,7 +67034,7 @@
/area/engine/engineering)
"chF" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = -32
},
@@ -67384,7 +67365,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral,
@@ -69351,7 +69332,7 @@
pixel_x = -26
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = 32
},
@@ -70734,7 +70715,7 @@
},
/obj/item/camera_film,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/grimy,
@@ -76626,7 +76607,7 @@
},
/obj/item/crowbar,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/table/reinforced,
@@ -77625,7 +77606,7 @@
"czP" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -77911,7 +77892,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/cable/white{
@@ -78817,7 +78798,7 @@
"cBL" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/twohanded/required/kirbyplants/random,
@@ -80821,7 +80802,7 @@
/obj/item/radio,
/obj/item/radio,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/decal/cleanable/dirt,
@@ -81450,7 +81431,7 @@
/obj/item/clothing/head/welding,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = -32
},
@@ -82668,7 +82649,7 @@
/area/crew_quarters/dorms)
"cIk" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -87500,7 +87481,7 @@
"cQE" = (
/obj/structure/closet/secure_closet/security/science,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/status_display{
@@ -88861,7 +88842,7 @@
pixel_y = 32
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light_switch{
@@ -95641,7 +95622,7 @@
/obj/item/paper_bin,
/obj/item/pen,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/storage/bag/bio,
@@ -96577,7 +96558,7 @@
/obj/item/reagent_containers/glass/bottle/epinephrine,
/obj/item/reagent_containers/dropper,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light{
@@ -100282,7 +100263,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/door/firedoor,
@@ -100646,7 +100627,7 @@
/area/science/explab)
"dmJ" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/bot,
@@ -100657,7 +100638,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/bot,
@@ -103301,7 +103282,7 @@
pixel_x = 36
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/vending/assist,
@@ -103468,7 +103449,7 @@
pixel_y = 6
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -103817,10 +103798,10 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"dsI" = (
-/obj/structure/sign/warning/nosmoking,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/machinery/smartfridge/organ/preloaded,
/turf/closed/wall,
/area/medical/surgery)
"dsJ" = (
@@ -104078,7 +104059,7 @@
"dti" = (
/obj/structure/closet/bombcloset,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/stripes/line{
@@ -104412,7 +104393,7 @@
/area/medical/surgery)
"dtQ" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/blue{
@@ -105025,7 +105006,7 @@
"duZ" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24;
pixel_y = -26
},
@@ -105056,7 +105037,7 @@
"dvd" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/bot,
@@ -107208,7 +107189,7 @@
"dyD" = (
/obj/structure/table,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/status_display/ai{
@@ -108421,7 +108402,7 @@
/obj/item/clothing/glasses/welding,
/obj/structure/table/reinforced,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/bot,
@@ -111515,7 +111496,7 @@
dir = 5
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -111909,7 +111890,7 @@
pixel_y = 26
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24;
pixel_y = -26
},
@@ -112605,7 +112586,7 @@
/area/science/robotics/lab)
"dHC" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/disposalpipe/segment,
@@ -114006,7 +113987,7 @@
"dJO" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -114270,7 +114251,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral,
@@ -116769,7 +116750,7 @@
"dOC" = (
/obj/structure/filingcabinet/medical,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/blue{
@@ -117649,7 +117630,7 @@
name = "emergency shower"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -118848,7 +118829,7 @@
/area/medical/virology)
"dSd" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light{
@@ -119680,7 +119661,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/sign/poster/official/work_for_a_future{
@@ -119891,7 +119872,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -121645,7 +121626,7 @@
"dXI" = (
/obj/structure/chair/wood,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -122171,7 +122152,7 @@
/area/medical/virology)
"dYV" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/closet/secure_closet/medical1,
@@ -125178,7 +125159,7 @@
},
/obj/item/camera_film,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/status_display{
@@ -125274,7 +125255,7 @@
"eeH" = (
/obj/structure/filingcabinet/security,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light_switch{
@@ -125983,7 +125964,7 @@
"egb" = (
/obj/structure/table/wood,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/clipboard,
@@ -126743,6 +126724,10 @@
dir = 1
},
/area/science/circuit)
+"gUV" = (
+/obj/item/twohanded/required/kirbyplants/random,
+/turf/open/floor/plasteel,
+/area/security/prison)
"gVS" = (
/obj/item/clothing/head/kitty,
/obj/item/clothing/under/maid,
@@ -126780,6 +126765,9 @@
dir = 10
},
/area/science/circuit)
+"hlc" = (
+/turf/open/floor/plasteel,
+/area/security/prison)
"hrP" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -127397,6 +127385,17 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
+"mvf" = (
+/obj/structure/table,
+/obj/machinery/computer/libraryconsole/bookmanagement,
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating,
+/area/security/prison)
"mvm" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable/white{
@@ -127418,11 +127417,25 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/circuit/green,
/area/science/research/abandoned)
+"mEy" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/cobweb,
+/obj/item/storage/crayons,
+/obj/item/storage/crayons,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"mIi" = (
/obj/item/electropack/shockcollar,
/obj/item/assembly/signaler,
/turf/open/floor/plating,
/area/crew_quarters/abandoned_gambling_den)
+"mMC" = (
+/obj/structure/sign/warning/nosmoking,
+/turf/closed/wall,
+/area/medical/surgery)
"mQE" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -127607,6 +127620,13 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
+"oNW" = (
+/obj/machinery/vr_sleeper,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"oOb" = (
/obj/structure/window/reinforced{
dir = 8
@@ -127710,6 +127730,18 @@
},
/turf/open/floor/plating,
/area/science/research/abandoned)
+"pEq" = (
+/obj/structure/sign/warning/electricshock{
+ pixel_y = 32
+ },
+/obj/machinery/vr_sleeper,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating{
+ icon_state = "platingdmg2"
+ },
+/area/security/prison)
"pHf" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -127852,6 +127884,10 @@
},
/turf/open/floor/plasteel,
/area/science/circuit)
+"tmZ" = (
+/obj/machinery/light/small,
+/turf/open/floor/plasteel,
+/area/security/prison)
"twt" = (
/obj/machinery/vr_sleeper,
/obj/effect/turf_decal/tile/neutral{
@@ -174891,7 +174927,7 @@ dkv
dma
dma
dma
-dma
+mMC
dsI
dro
dvz
@@ -179430,10 +179466,10 @@ aaa
aaa
aaa
aaa
-aaa
-ajr
-aad
-aad
+aeH
+aFm
+aIc
+aFm
aFm
aFm
aFm
@@ -179687,10 +179723,10 @@ aaa
aaa
aaa
aaa
-aaa
-ajr
-aaa
-aad
+aeH
+aFm
+mEy
+bbt
aFm
aMc
aNx
@@ -179944,10 +179980,10 @@ aaa
aaa
aaa
aaa
-aaa
-aad
-aaa
-aad
+aeH
+aFm
+oNW
+tmZ
aFm
aKV
aNy
@@ -180202,11 +180238,11 @@ aaa
ajr
ajr
aad
-aad
-aaa
-aad
aFm
-aMd
+pEq
+hlc
+gUV
+hlc
aNz
aPh
aQZ
@@ -180459,10 +180495,10 @@ aaa
ajr
aad
aad
-aad
-aad
-aad
aFn
+mvf
+aJA
+aJA
aMe
aNA
aPi
@@ -180717,7 +180753,7 @@ ajr
aad
aFm
aFm
-aIc
+aFm
aFm
aFm
aMf
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 522d9801ca..8e1a3b618d 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -213,18 +213,12 @@
"aaG" = (
/obj/machinery/hydroponics/constructable,
/obj/item/seeds/ambrosia,
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
/turf/open/floor/plasteel,
/area/security/prison)
"aaH" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/structure/cable/yellow{
- icon_state = "2-8"
- },
/obj/structure/cable/yellow{
icon_state = "2-4"
},
@@ -394,30 +388,16 @@
/obj/item/canvas/twentythreeXtwentythree,
/turf/open/floor/plasteel,
/area/security/prison)
-"abk" = (
-/obj/structure/table,
-/obj/item/folder,
-/obj/item/paper/guides/jobs/hydroponics,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/item/pen,
-/obj/item/storage/crayons,
-/obj/structure/cable/yellow{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
"abl" = (
/obj/structure/table,
/obj/machinery/computer/libraryconsole/bookmanagement,
/turf/open/floor/plasteel,
/area/security/prison)
"abm" = (
-/obj/machinery/computer/arcade,
/obj/machinery/computer/security/telescreen/entertainment{
pixel_y = 32
},
+/obj/machinery/vr_sleeper,
/turf/open/floor/plasteel,
/area/security/prison)
"abn" = (
@@ -1465,7 +1445,7 @@
icon_state = "1-2"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/light{
@@ -3902,7 +3882,7 @@
/obj/item/clothing/head/helmet/riot,
/obj/item/clothing/head/helmet/riot,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/neutral{
@@ -4040,7 +4020,7 @@
"ahJ" = (
/obj/machinery/disposal/bin,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light_switch{
@@ -4178,7 +4158,7 @@
icon_state = "1-2"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -4923,7 +4903,7 @@
name = "Evidence Closet 5"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/neutral{
@@ -7212,7 +7192,7 @@
/obj/item/reagent_containers/glass/bottle/morphine,
/obj/machinery/light/small,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/effect/turf_decal/bot,
@@ -7268,7 +7248,7 @@
"anu" = (
/obj/machinery/vending/security,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/plasteel/showroomfloor,
@@ -7753,7 +7733,7 @@
"aot" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/red{
@@ -7800,7 +7780,7 @@
/area/maintenance/port/fore)
"aoy" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/structure/closet/secure_closet/warden,
@@ -9318,7 +9298,7 @@
},
/obj/structure/table/wood,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/plasteel/grimy,
@@ -9476,7 +9456,7 @@
/area/engine/gravity_generator)
"arS" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/structure/cable{
@@ -11212,7 +11192,7 @@
dir = 5
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/effect/turf_decal/tile/neutral{
@@ -13489,7 +13469,7 @@
/area/security/brig)
"azQ" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/filingcabinet,
@@ -14083,7 +14063,7 @@
/area/hallway/primary/fore)
"aAX" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/light/small{
@@ -14132,7 +14112,7 @@
"aBc" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/effect/turf_decal/tile/red{
@@ -14629,7 +14609,7 @@
maxcharge = 2000
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/spawner/lootdrop/maintenance,
@@ -15144,7 +15124,7 @@
/area/maintenance/port/fore)
"aDh" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light{
@@ -16147,7 +16127,7 @@
"aFc" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/camera{
@@ -16245,7 +16225,7 @@
"aFo" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/neutral{
@@ -16256,7 +16236,7 @@
"aFp" = (
/obj/structure/reagent_dispensers/watertank,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light_switch{
@@ -16604,7 +16584,7 @@
icon_state = "2-4"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/machinery/camera{
@@ -16878,7 +16858,7 @@
},
/obj/item/pen,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/reagent_dispensers/peppertank{
@@ -17636,7 +17616,7 @@
/area/maintenance/starboard/fore)
"aHX" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/stripes/line{
@@ -18730,7 +18710,7 @@
icon_state = "1-8"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/wood,
@@ -19742,7 +19722,7 @@
/area/storage/primary)
"aMF" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -19814,7 +19794,7 @@
/area/hallway/primary/fore)
"aMK" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -20643,7 +20623,7 @@
/area/lawoffice)
"aOs" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/table,
@@ -21227,7 +21207,7 @@
"aPA" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -21416,7 +21396,7 @@
pixel_y = 32
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/effect/turf_decal/tile/neutral{
@@ -23493,7 +23473,7 @@
icon_state = "1-2"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/line{
@@ -23883,7 +23863,7 @@
/area/crew_quarters/locker)
"aUL" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -25976,7 +25956,7 @@
pixel_x = -38
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/loading_area{
@@ -28099,7 +28079,7 @@
"bcn" = (
/obj/structure/rack,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/item/clothing/gloves/color/fyellow,
@@ -28297,7 +28277,7 @@
/area/storage/tech)
"bcE" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/structure/disposalpipe/segment{
@@ -28466,7 +28446,7 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/cable/yellow{
@@ -28586,7 +28566,7 @@
},
/obj/structure/closet/secure_closet/security,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/red{
@@ -28803,7 +28783,7 @@
dir = 9
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -29296,7 +29276,7 @@
"beo" = (
/obj/structure/closet/secure_closet/security/engine,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/cable/yellow{
@@ -30134,7 +30114,7 @@
pixel_y = 7
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/turf/open/floor/plasteel/dark,
@@ -30633,7 +30613,7 @@
/obj/item/mop,
/obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -31963,7 +31943,7 @@
/area/hallway/primary/starboard)
"bjE" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -32373,7 +32353,7 @@
"bkn" = (
/obj/structure/table,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/effect/turf_decal/tile/brown{
@@ -33044,7 +33024,7 @@
/obj/machinery/computer/teleporter,
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/effect/turf_decal/tile/neutral{
@@ -34227,7 +34207,7 @@
/area/ai_monitored/storage/satellite)
"bnK" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -34657,7 +34637,7 @@
/area/bridge)
"boC" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/item/storage/fancy/donut_box,
@@ -36478,7 +36458,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/blue{
@@ -37263,7 +37243,7 @@
/obj/structure/table,
/obj/item/camera_film,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/plasteel,
@@ -38262,7 +38242,7 @@
pixel_x = 4
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/turf/open/floor/plasteel/dark,
@@ -38749,7 +38729,7 @@
"bwr" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -38841,7 +38821,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/blue{
@@ -38963,7 +38943,7 @@
"bwK" = (
/obj/structure/table,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/machinery/chem_dispenser/drinks,
@@ -39827,7 +39807,7 @@
"byv" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -39993,7 +39973,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/blue,
@@ -40691,7 +40671,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/carpet,
@@ -41123,7 +41103,7 @@
pixel_y = -30
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/item/paper_bin{
@@ -41634,7 +41614,7 @@
/area/crew_quarters/theatre)
"bCd" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/table/wood,
@@ -41969,7 +41949,7 @@
/area/crew_quarters/toilet/auxiliary)
"bCS" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -44210,7 +44190,7 @@
dir = 5
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/yellow{
@@ -45243,7 +45223,7 @@
/area/security/vacantoffice)
"bJx" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/wood,
@@ -45253,7 +45233,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/decal/cleanable/cobweb,
@@ -45339,7 +45319,7 @@
"bJH" = (
/obj/machinery/suit_storage_unit/standard_unit,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -45875,6 +45855,7 @@
/obj/machinery/portable_atmospherics/canister/nitrous_oxide{
valve_open = 1
},
+/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"bKJ" = (
@@ -45987,7 +45968,7 @@
icon_state = "1-2"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -47005,7 +46986,7 @@
"bMW" = (
/obj/machinery/teleport/station,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plating,
@@ -47372,7 +47353,7 @@
/area/crew_quarters/kitchen)
"bNC" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/vending/dinnerware,
@@ -47467,7 +47448,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/dark,
@@ -48919,6 +48900,7 @@
/area/engine/atmos)
"bQY" = (
/obj/machinery/portable_atmospherics/canister/toxins,
+/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"bQZ" = (
@@ -49218,7 +49200,7 @@
name = "novelty HoS hat"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light/small{
@@ -49314,7 +49296,7 @@
"bRO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -49749,7 +49731,7 @@
"bSD" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -51362,6 +51344,7 @@
/area/engine/atmos)
"bVO" = (
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"bVP" = (
@@ -52428,7 +52411,7 @@
/area/hallway/primary/central)
"bXZ" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/item/twohanded/required/kirbyplants{
@@ -53753,7 +53736,7 @@
dir = 1
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -53837,7 +53820,7 @@
},
/obj/item/pen,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/red{
@@ -53851,7 +53834,7 @@
/area/security/checkpoint/science/research)
"caG" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/sink{
@@ -55925,7 +55908,7 @@
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26;
pixel_y = 28
},
@@ -57111,7 +57094,7 @@
icon_state = "2-8"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/structure/reagent_dispensers/cooking_oil,
@@ -57285,7 +57268,7 @@
/area/medical/sleeper)
"cgT" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -57912,7 +57895,7 @@
/area/maintenance/port/aft)
"cie" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -58474,6 +58457,7 @@
/area/engine/atmos)
"cjd" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/engine/atmos)
"cje" = (
@@ -58488,6 +58472,7 @@
/area/engine/atmos)
"cjg" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engine/atmos)
"cjh" = (
@@ -59051,7 +59036,7 @@
/area/maintenance/starboard/aft)
"ckm" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/sink{
@@ -59646,7 +59631,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -59750,7 +59735,7 @@
/area/science/research)
"clI" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/closet/firecloset,
@@ -61065,7 +61050,7 @@
/area/science/research)
"cok" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/structure/disposalpipe/segment,
@@ -62786,7 +62771,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/white/side{
@@ -62796,6 +62781,9 @@
"cro" = (
/obj/structure/bed/roller,
/obj/machinery/iv_drip,
+/obj/structure/sign/warning/nosmoking{
+ pixel_x = -28
+ },
/turf/open/floor/plasteel/white,
/area/medical/surgery)
"crq" = (
@@ -63316,9 +63304,6 @@
dir = 1;
pixel_y = -22
},
-/obj/structure/sign/warning/nosmoking{
- pixel_x = -28
- },
/obj/machinery/iv_drip,
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -63339,7 +63324,7 @@
"csq" = (
/obj/structure/bed,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/item/bedsheet/medical,
@@ -63369,7 +63354,7 @@
/area/medical/cryo)
"cst" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/camera{
@@ -64576,7 +64561,7 @@
pixel_y = 2
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/sign/warning/nosmoking{
@@ -64798,7 +64783,7 @@
},
/obj/item/storage/secure/briefcase,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/cafeteria{
@@ -65150,7 +65135,7 @@
/area/medical/genetics)
"cvC" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/storage/box/syringes,
@@ -65725,7 +65710,7 @@
"cwF" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/blue{
@@ -65805,7 +65790,7 @@
"cwO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/blue{
@@ -66801,7 +66786,7 @@
/area/science/circuit)
"cyN" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/airalarm{
@@ -67450,7 +67435,7 @@
},
/obj/item/paper,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/table/glass,
@@ -68125,7 +68110,7 @@
"cBi" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/delivery,
@@ -68541,7 +68526,7 @@
/area/medical/medbay/aft)
"cCb" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/closet/secure_closet/personal/patient,
@@ -69616,7 +69601,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -70156,7 +70141,7 @@
/area/science/robotics/lab)
"cFj" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28;
pixel_y = 5
},
@@ -70669,7 +70654,7 @@
"cGi" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/white/side{
@@ -72066,7 +72051,7 @@
dir = 9
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/machinery/vending/wardrobe/viro_wardrobe,
@@ -73287,7 +73272,7 @@
dir = 9
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/line{
@@ -73922,7 +73907,7 @@
"cLS" = (
/obj/structure/chair/stool,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/green,
@@ -73951,7 +73936,7 @@
pixel_y = 25
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/structure/table/wood,
@@ -77889,7 +77874,7 @@
/area/hallway/primary/central)
"cVi" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/wood,
@@ -79703,7 +79688,7 @@
network = list("ss13","engine")
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/turf/open/floor/plasteel/dark,
@@ -81315,7 +81300,7 @@
/area/crew_quarters/theatre)
"dis" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/disposal/bin,
@@ -83303,6 +83288,13 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
+"ghT" = (
+/obj/machinery/computer/arcade{
+ icon_state = "arcade";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"gnZ" = (
/obj/item/radio/intercom{
pixel_y = -30
@@ -83417,6 +83409,15 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"hYs" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"ioI" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -83528,6 +83529,10 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"jVj" = (
+/obj/machinery/vr_sleeper,
+/turf/open/floor/plasteel,
+/area/security/prison)
"kfu" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/white,
@@ -83819,6 +83824,17 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"odR" = (
+/obj/structure/table,
+/obj/item/folder,
+/obj/item/paper/guides/jobs/hydroponics,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/item/pen,
+/obj/item/storage/crayons,
+/turf/open/floor/plasteel,
+/area/security/prison)
"ohj" = (
/obj/item/integrated_electronics/analyzer,
/obj/item/integrated_electronics/debugger,
@@ -83924,6 +83940,13 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"pzu" = (
+/obj/structure/chair/stool,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"pCV" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -83979,6 +84002,10 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
+"qnB" = (
+/obj/machinery/smartfridge/organ/preloaded,
+/turf/closed/wall,
+/area/medical/surgery)
"qqg" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
@@ -84046,7 +84073,7 @@
/area/library)
"qXt" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel/dark,
@@ -84241,6 +84268,16 @@
/obj/machinery/vending/assist,
/turf/open/floor/plasteel,
/area/science/mixing)
+"uEa" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/airlock/public/glass{
+ id_tag = "permahydro";
+ name = "Recreation Module"
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"uGW" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -104201,7 +104238,7 @@ cia
cia
cpX
cia
-cia
+qnB
cia
ceu
dyg
@@ -106416,10 +106453,10 @@ aaa
aaa
aaf
aaa
-aaa
-aaa
-aaf
-aaa
+aax
+aax
+aaF
+aax
aax
abj
aaR
@@ -106673,12 +106710,12 @@ aaa
aaa
aaf
aaf
-aaf
-aaf
-aaf
-aaf
aay
-abk
+odR
+hYs
+abC
+uEa
+hYs
abC
abC
acr
@@ -106930,13 +106967,13 @@ aaa
aaa
aaf
aaa
-aaa
-aaf
-aaa
-aaa
aax
abl
-abD
+pzu
+ghT
+aax
+jVj
+aaR
aaR
aaI
acF
@@ -107189,7 +107226,7 @@ aaa
aaa
aax
aax
-aaF
+aax
aax
aax
abm
diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm
index a7ab212bd6..175edcede4 100644
--- a/_maps/map_files/OmegaStation/OmegaStation.dmm
+++ b/_maps/map_files/OmegaStation/OmegaStation.dmm
@@ -1094,7 +1094,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/purple{
@@ -3052,7 +3052,7 @@
"afp" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -3138,7 +3138,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/camera{
@@ -4288,7 +4288,7 @@
/area/maintenance/starboard/fore)
"ahk" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light_switch{
@@ -4440,7 +4440,7 @@
"ahy" = (
/obj/machinery/suit_storage_unit/security,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
@@ -4475,7 +4475,7 @@
"ahB" = (
/obj/machinery/photocopier,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/cable/white{
@@ -7740,7 +7740,7 @@
/obj/item/stack/packageWrap,
/obj/item/hand_labeler,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/camera{
@@ -7886,7 +7886,7 @@
"anj" = (
/obj/machinery/suit_storage_unit/standard_unit,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/end{
@@ -8367,7 +8367,7 @@
"anZ" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -8554,7 +8554,7 @@
},
/obj/structure/table/reinforced,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/red{
@@ -9965,7 +9965,7 @@
icon_state = "plant-21"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light{
@@ -10216,7 +10216,7 @@
pixel_y = -22
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/paper_bin,
@@ -11445,7 +11445,7 @@
"atj" = (
/obj/machinery/vending/coffee,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light{
@@ -12887,7 +12887,7 @@
/area/hallway/primary/port)
"avX" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/item/twohanded/required/kirbyplants{
@@ -12902,7 +12902,7 @@
/obj/item/stock_parts/cell/high,
/obj/machinery/cell_charger,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light_switch{
@@ -14105,7 +14105,7 @@
/area/engine/atmos)
"ayl" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/line{
@@ -14116,7 +14116,7 @@
"aym" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/delivery,
@@ -16093,7 +16093,7 @@
"aCh" = (
/obj/machinery/vending/snack/random,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/bot,
@@ -16186,11 +16186,13 @@
"aCs" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/obj/machinery/light/small,
+/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engine/atmos)
"aCw" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
/obj/machinery/light/small,
+/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/engine/atmos)
"aCz" = (
@@ -16503,7 +16505,7 @@
/obj/item/clipboard,
/obj/item/toy/figure/chef,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/camera{
@@ -16714,7 +16716,7 @@
/area/engine/break_room)
"aDw" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
@@ -17444,7 +17446,7 @@
"aEK" = (
/obj/machinery/vending/clothing,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/bot,
@@ -17977,7 +17979,7 @@
dir = 1
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/cable{
@@ -18209,7 +18211,7 @@
/area/hallway/primary/port)
"aFL" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -20148,7 +20150,7 @@
/obj/structure/table,
/obj/item/storage/pill_bottle/dice,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light{
@@ -21489,7 +21491,7 @@
"aLg" = (
/obj/machinery/vending/snack/random,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -22597,7 +22599,7 @@
/area/maintenance/starboard/central)
"aNF" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -23062,7 +23064,7 @@
/area/engine/engineering)
"aOG" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/line{
@@ -23834,7 +23836,7 @@
"aPW" = (
/obj/machinery/vending/snack/random,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -25049,7 +25051,7 @@
name = "emergency shower"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -26916,7 +26918,7 @@
/obj/item/storage/box/bodybags,
/obj/item/pen,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -28252,7 +28254,7 @@
dir = 1
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -29794,7 +29796,7 @@
/area/hallway/primary/aft)
"baN" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -30100,7 +30102,7 @@
/area/medical/medbay/zone3)
"bbu" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light{
@@ -31241,7 +31243,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -32128,7 +32130,7 @@
/area/security/checkpoint)
"beK" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -34456,7 +34458,7 @@
pixel_y = -22
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light/small{
@@ -37099,7 +37101,7 @@
"dai" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/blue{
@@ -37669,6 +37671,7 @@
/obj/machinery/light/small{
dir = 1
},
+/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"gcw" = (
@@ -37974,6 +37977,7 @@
/obj/machinery/light/small{
dir = 1
},
+/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"hTn" = (
@@ -38421,6 +38425,7 @@
/obj/machinery/light/small{
dir = 1
},
+/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"kiw" = (
@@ -40387,7 +40392,7 @@
/area/maintenance/starboard)
"sHf" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel,
@@ -42215,6 +42220,7 @@
},
/obj/structure/table,
/obj/machinery/firealarm{
+ dir = 1;
pixel_y = -26
},
/obj/effect/turf_decal/tile/neutral,
@@ -42280,6 +42286,7 @@
},
/obj/effect/turf_decal/delivery,
/obj/machinery/firealarm{
+ dir = 1;
pixel_y = -26
},
/obj/effect/turf_decal/tile/neutral,
@@ -42880,6 +42887,12 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
+"uvp" = (
+/obj/machinery/smartfridge/organ/preloaded{
+ pixel_y = 2
+ },
+/turf/closed/wall,
+/area/medical/medbay/zone3)
"uxJ" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -81595,7 +81608,7 @@ aSh
bcf
bcW
blt
-aSh
+uvp
aOL
bfA
bfX
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 9ae92b26d4..97befd1551 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -174,7 +174,6 @@
pixel_x = -27
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 26
},
/turf/open/floor/circuit,
@@ -672,7 +671,7 @@
/obj/item/pen,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/item/paper_bin,
@@ -1181,19 +1180,6 @@
},
/turf/open/floor/plasteel/dark,
/area/security/prison)
-"aeI" = (
-/obj/machinery/seed_extractor,
-/obj/machinery/light{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/security/prison)
"aeJ" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
@@ -1508,24 +1494,13 @@
/turf/open/floor/plasteel/dark,
/area/security/prison)
"afr" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
/obj/machinery/light/small,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/security/prison)
-"afs" = (
-/obj/structure/table,
-/obj/structure/bedsheetbin,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
/turf/open/floor/plasteel/cafeteria,
/area/security/prison)
"aft" = (
@@ -2477,7 +2452,7 @@
dir = 6
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -27
},
/turf/open/floor/plasteel/showroomfloor,
@@ -3411,7 +3386,7 @@
/obj/item/gun/energy/e_gun,
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -27
},
/turf/open/floor/plasteel/dark,
@@ -4272,7 +4247,7 @@
},
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -27
},
/obj/effect/turf_decal/tile/red{
@@ -4988,7 +4963,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/plasteel/showroomfloor,
@@ -8252,7 +8227,7 @@
dir = 10
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/dark,
@@ -8739,7 +8714,7 @@
/area/crew_quarters/dorms)
"avl" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/computer/cryopod{
@@ -9698,7 +9673,7 @@
light_color = "#e8eaff"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/computer/rdconsole{
@@ -11455,7 +11430,6 @@
"aBB" = (
/obj/machinery/computer/cargo/request,
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/turf/open/floor/wood,
@@ -12403,7 +12377,7 @@
/area/storage/primary)
"aDB" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/neutral,
@@ -14380,7 +14354,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/tile/blue{
@@ -17532,7 +17505,7 @@
dir = 10
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/plasteel,
@@ -18580,7 +18553,7 @@
/area/maintenance/department/crew_quarters/bar)
"aSA" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/machinery/hydroponics/constructable,
@@ -18799,7 +18772,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/tile/brown{
@@ -19132,7 +19104,7 @@
"aTP" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/neutral,
@@ -21352,7 +21324,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/brown,
@@ -21749,7 +21721,7 @@
dir = 1
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/plasteel/dark,
@@ -22101,7 +22073,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/effect/turf_decal/tile/green{
@@ -24457,7 +24429,6 @@
"bfx" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 24
},
/obj/effect/turf_decal/delivery,
@@ -24843,7 +24814,6 @@
/area/hallway/primary/central)
"bgx" = (
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 27
},
/obj/structure/chair,
@@ -26707,7 +26677,7 @@
"bly" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26;
pixel_y = 28
},
@@ -28018,7 +27988,6 @@
"boz" = (
/obj/machinery/vending/clothing,
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 27
},
/obj/effect/turf_decal/tile/blue{
@@ -30048,7 +30017,7 @@
"bsB" = (
/obj/machinery/atmospherics/components/unary/thermomachine/freezer,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/structure/sign/poster/official/random{
@@ -30255,7 +30224,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/green,
@@ -30384,7 +30353,7 @@
/obj/item/crowbar,
/obj/item/wrench,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/item/multitool,
@@ -30834,7 +30803,7 @@
/area/medical/chemistry)
"bun" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/yellow{
@@ -30872,7 +30841,7 @@
network = list("ss13","rd")
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/light{
@@ -31493,7 +31462,7 @@
dir = 1
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/effect/turf_decal/tile/purple{
@@ -34294,7 +34263,7 @@
/area/science/storage)
"bBH" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/effect/turf_decal/tile/purple{
@@ -34323,7 +34292,7 @@
"bBK" = (
/obj/structure/closet/bombcloset,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/sign/poster/official/random{
@@ -35623,7 +35592,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/light{
@@ -35985,8 +35954,7 @@
dir = 1
},
/obj/machinery/vending/wallmed{
- pixel_y = 28;
- products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/medspray/sterilizine = 1)
+ pixel_y = 28
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/landmark/blobstart,
@@ -36668,7 +36636,7 @@
"bGe" = (
/obj/machinery/portable_atmospherics/scrubber,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/neutral{
@@ -36714,7 +36682,7 @@
network = list("ss13","rd")
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/engine,
@@ -37147,7 +37115,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -37773,6 +37741,9 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/light_switch{
+ pixel_x = -22
+ },
/turf/open/floor/plasteel/white,
/area/medical/surgery)
"bIp" = (
@@ -37819,8 +37790,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/vending/wallmed{
- pixel_y = 28;
- products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/medspray/sterilizine = 1)
+ pixel_y = 28
},
/obj/effect/turf_decal/tile/blue{
dir = 1
@@ -38781,8 +38751,7 @@
/area/medical/medbay/central)
"bKw" = (
/obj/machinery/vending/wallmed{
- pixel_y = 28;
- products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/medspray/sterilizine = 1)
+ pixel_y = 28
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -38852,10 +38821,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -26
- },
/obj/effect/turf_decal/tile/blue{
dir = 1
},
@@ -39329,15 +39294,16 @@
/obj/item/clothing/gloves/color/latex,
/obj/item/clothing/mask/surgical,
/obj/item/clothing/suit/apron/surgical,
-/obj/machinery/light_switch{
- pixel_x = -22
- },
/obj/effect/turf_decal/tile/blue{
dir = 1
},
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = -26
+ },
/turf/open/floor/plasteel/white,
/area/medical/surgery)
"bLN" = (
@@ -41001,7 +40967,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/yellow{
@@ -41139,6 +41105,7 @@
/area/engine/atmos)
"bQa" = (
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"bQb" = (
@@ -41224,7 +41191,6 @@
},
/obj/effect/turf_decal/stripes/line,
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/turf/open/floor/plasteel/dark,
@@ -41276,7 +41242,6 @@
},
/obj/item/stock_parts/cell/high/plus,
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/tile/green{
@@ -42547,6 +42512,7 @@
/area/engine/atmos)
"bSX" = (
/obj/machinery/portable_atmospherics/canister/toxins,
+/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"bSY" = (
@@ -42947,7 +42913,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/tile/yellow{
@@ -44053,6 +44018,7 @@
/area/engine/atmos)
"bWf" = (
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"bWg" = (
@@ -45349,7 +45315,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/stripes/corner{
@@ -46167,6 +46132,7 @@
/area/engine/atmos)
"cbt" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/engine/atmos)
"cbu" = (
@@ -46174,6 +46140,7 @@
/area/engine/atmos)
"cbv" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engine/atmos)
"cbw" = (
@@ -47544,7 +47511,7 @@
/area/engine/engineering)
"cgV" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/stripes/line{
@@ -48363,7 +48330,7 @@
"ckD" = (
/obj/structure/chair/wood/normal,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/turf/open/floor/plasteel/dark,
@@ -52189,7 +52156,6 @@
network = list("ss13","monastery")
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/turf/open/floor/plasteel/dark,
@@ -52882,6 +52848,19 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/security/brig)
+"cJd" = (
+/obj/machinery/seed_extractor,
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/prison)
"cJo" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -53223,6 +53202,21 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/office)
+"dqi" = (
+/obj/structure/table,
+/obj/structure/bedsheetbin,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/security/prison)
"dqw" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "0";
@@ -53835,7 +53829,7 @@
/area/maintenance/department/security/brig)
"ePS" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/machinery/light{
@@ -54220,7 +54214,7 @@
"fFv" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel/dark,
@@ -54358,7 +54352,7 @@
"gdL" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/effect/turf_decal/tile/purple{
@@ -55028,6 +55022,15 @@
/obj/item/clothing/glasses/regular,
/turf/open/floor/plating,
/area/maintenance/department/science)
+"hyl" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/security/prison)
"hzc" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -55661,6 +55664,10 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"jdA" = (
+/obj/machinery/smartfridge/organ/preloaded,
+/turf/closed/wall,
+/area/medical/surgery)
"jeq" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -56346,7 +56353,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -27
},
/obj/effect/turf_decal/tile/green{
@@ -58617,6 +58624,12 @@
},
/turf/open/floor/plasteel/dark,
/area/science/explab)
+"pED" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/prison)
"pEL" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
@@ -59427,7 +59440,6 @@
pixel_y = 6
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 27
},
/turf/open/floor/plasteel/cafeteria,
@@ -59828,7 +59840,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/tile/red{
@@ -60070,7 +60081,7 @@
},
/obj/item/hand_labeler,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/light{
@@ -60956,6 +60967,12 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
+"vtz" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/prison)
"vtT" = (
/turf/open/floor/plating,
/area/maintenance/solars/port)
@@ -61727,7 +61744,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/tile/neutral{
@@ -62168,6 +62184,19 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"yff" = (
+/obj/machinery/vr_sleeper{
+ icon_state = "sleeper";
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/security/prison)
"yfO" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/yellow,
@@ -62184,6 +62213,15 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"yhs" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/security/prison)
"yjy" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/light{
@@ -81546,8 +81584,8 @@ aaa
aaa
adR
aaa
-abI
-aaa
+aem
+aem
aem
aem
aem
@@ -81804,8 +81842,8 @@ aaa
adR
aaa
aem
-aem
-aem
+aeo
+aeC
aeT
afn
agy
@@ -82060,9 +82098,9 @@ aaa
aaa
adR
abI
-aem
-aeo
-aeC
+aen
+aep
+aeD
aeU
aeU
afC
@@ -82317,9 +82355,9 @@ aaa
aaa
adR
aaa
-aen
-aep
-aeD
+aem
+aeq
+aeE
aeU
afo
afD
@@ -82574,9 +82612,9 @@ aaa
aaa
adR
abI
-aem
-aeq
-aeE
+aen
+aer
+aeF
aeU
afp
afE
@@ -82831,9 +82869,9 @@ aaa
aaa
adR
aaa
-aen
-aer
-aeF
+aem
+aes
+aeG
aeV
afq
afF
@@ -83088,10 +83126,10 @@ aaa
aaa
adR
abI
-aem
-aes
-aeG
-aeU
+aen
+aet
+aeH
+vtz
afo
afG
aeU
@@ -83345,10 +83383,10 @@ aaa
aaa
adR
aaa
-aen
-aet
-aeH
-aeH
+aem
+aeu
+cJd
+pED
aeH
afH
aeH
@@ -83603,8 +83641,8 @@ aaa
adR
abI
aem
-aeu
-aeI
+agy
+agy
lGp
aeU
aae
@@ -83860,9 +83898,9 @@ aaa
adR
aaa
aem
-aem
-aem
aeW
+yhs
+hyl
afr
agy
agc
@@ -84116,11 +84154,11 @@ aaa
aaa
adR
aaa
-abI
-aaa
aem
aeX
-afs
+dqi
+yff
+yff
agy
agd
agp
@@ -84372,8 +84410,6 @@ aaa
aaa
aaa
aaa
-aed
-adR
abI
aem
aem
@@ -84385,6 +84421,8 @@ aem
aem
aem
aem
+aem
+aem
ahL
ahL
ahL
@@ -84630,9 +84668,9 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
+aed
+adR
+abI
aaa
aaa
aaa
@@ -92174,7 +92212,7 @@ bFU
bFU
bIn
bJt
-bFU
+jdA
bFU
bFU
bFU
diff --git a/_maps/map_files/debug/multiz.dmm b/_maps/map_files/debug/multiz.dmm
new file mode 100644
index 0000000000..085a64bf97
--- /dev/null
+++ b/_maps/map_files/debug/multiz.dmm
@@ -0,0 +1,10403 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/open/space/basic,
+/area/space)
+"ab" = (
+/obj/structure/lattice,
+/turf/open/space,
+/area/space)
+"ac" = (
+/turf/open/space,
+/area/space/nearstation)
+"ad" = (
+/turf/closed/wall/r_wall,
+/area/maintenance/department/bridge)
+"ae" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/open/space,
+/area/space/nearstation)
+"af" = (
+/turf/open/floor/plating,
+/area/maintenance/department/bridge)
+"ag" = (
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"ah" = (
+/turf/closed/wall/r_wall,
+/area/engine/atmos)
+"ai" = (
+/obj/machinery/power/rtg/advanced,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"aj" = (
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"ak" = (
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
+"al" = (
+/obj/machinery/airalarm{
+ frequency = 1439;
+ locked = 0;
+ pixel_y = 23
+ },
+/obj/structure/closet/secure_closet/atmospherics,
+/turf/open/floor/plating,
+/area/engine/atmos)
+"am" = (
+/obj/machinery/atmospherics/components/unary/tank/air,
+/turf/open/floor/plating,
+/area/engine/atmos)
+"an" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space,
+/area/space/nearstation)
+"ao" = (
+/obj/machinery/power/rtg/advanced,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"ap" = (
+/obj/machinery/airalarm{
+ frequency = 1439;
+ locked = 0;
+ pixel_y = 23
+ },
+/obj/structure/closet/secure_closet/engineering_electrical,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"aq" = (
+/obj/machinery/computer/monitor,
+/obj/structure/cable,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ar" = (
+/obj/structure/closet/secure_closet/engineering_welding,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"as" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space,
+/area/space/nearstation)
+"at" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"au" = (
+/turf/open/openspace,
+/area/space)
+"av" = (
+/obj/structure/stairs{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"aw" = (
+/turf/open/floor/plating,
+/area/engine/atmos)
+"ax" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/turf/open/floor/plating,
+/area/engine/atmos)
+"ay" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/plating,
+/area/engine/atmos)
+"az" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/meter,
+/turf/open/floor/plating,
+/area/engine/atmos)
+"aA" = (
+/obj/machinery/power/smes{
+ charge = 5e+006
+ },
+/obj/machinery/airalarm{
+ frequency = 1439;
+ locked = 0;
+ pixel_y = 23
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"aB" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space,
+/area/space/nearstation)
+"aC" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space,
+/area/space/nearstation)
+"aD" = (
+/obj/machinery/door/airlock/external/glass,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"aE" = (
+/obj/structure/fans/tiny,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"aF" = (
+/obj/machinery/door/airlock/external/glass,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"aG" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"aH" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"aI" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/engine/gravity_generator)
+"aJ" = (
+/turf/open/floor/plasteel{
+ dir = 1
+ },
+/area/engine/gravity_generator)
+"aK" = (
+/turf/open/floor/plasteel{
+ dir = 8
+ },
+/area/engine/gravity_generator)
+"aL" = (
+/turf/open/floor/plasteel{
+ dir = 4
+ },
+/area/engine/gravity_generator)
+"aM" = (
+/obj/machinery/suit_storage_unit/ce,
+/turf/open/floor/plating,
+/area/engine/atmos)
+"aN" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+/obj/effect/turf_decal/bot{
+ dir = 2
+ },
+/turf/open/floor/plasteel{
+ dir = 2
+ },
+/area/engine/atmos)
+"aO" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 4;
+ on = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"aP" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/atmos)
+"aQ" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"aR" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"aS" = (
+/obj/structure/table,
+/obj/item/flashlight{
+ pixel_y = 5
+ },
+/obj/item/airlock_painter,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"aT" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"aU" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"aV" = (
+/obj/machinery/power/rtg/advanced,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"aW" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"aX" = (
+/obj/machinery/power/apc{
+ dir = 8;
+ pixel_x = -25
+ },
+/obj/machinery/light,
+/obj/structure/table,
+/obj/item/analyzer,
+/obj/item/wrench,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/engine/atmos)
+"aY" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"aZ" = (
+/obj/structure/tank_dispenser{
+ pixel_x = -1
+ },
+/turf/open/floor/plating,
+/area/engine/atmos)
+"ba" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plating,
+/area/engine/atmos)
+"bb" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/obj/machinery/portable_atmospherics/canister,
+/obj/effect/turf_decal/bot{
+ dir = 2
+ },
+/turf/open/floor/plasteel{
+ dir = 2
+ },
+/area/engine/atmos)
+"bc" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ on = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bd" = (
+/obj/structure/table,
+/obj/item/weldingtool/experimental,
+/obj/machinery/power/apc{
+ dir = 8;
+ pixel_x = -25
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"be" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating,
+/area/engine/atmos)
+"bf" = (
+/obj/structure/closet/secure_closet/engineering_chief,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"bg" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "Gravity Generator APC";
+ pixel_x = -25
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"bh" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"bi" = (
+/obj/machinery/gravity_generator/main/station,
+/turf/open/floor/plasteel{
+ dir = 8
+ },
+/area/engine/gravity_generator)
+"bj" = (
+/obj/machinery/door/airlock,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bk" = (
+/obj/machinery/door/airlock,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"bl" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/meter,
+/turf/open/floor/plating,
+/area/engine/atmos)
+"bm" = (
+/obj/machinery/atmospherics/components/binary/valve/on{
+ icon_state = "mvalve_map-2";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/atmos)
+"bn" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/obj/machinery/light,
+/turf/open/floor/plating,
+/area/engine/atmos)
+"bo" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/structure/table,
+/obj/item/screwdriver/power,
+/obj/item/crowbar/power,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"bp" = (
+/obj/machinery/light,
+/obj/item/storage/box/lights/mixed,
+/obj/item/lightreplacer,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"bq" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"br" = (
+/obj/structure/closet/radiation,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"bs" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
+"bt" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bu" = (
+/turf/closed/wall/r_wall,
+/area/bridge)
+"bv" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/bridge)
+"bw" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"bx" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"by" = (
+/turf/closed/wall/r_wall,
+/area/hallway/secondary/entry)
+"bz" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/department/bridge)
+"bA" = (
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"bB" = (
+/obj/machinery/power/apc{
+ dir = 8;
+ pixel_x = -25
+ },
+/obj/machinery/airalarm{
+ frequency = 1439;
+ locked = 0;
+ pixel_y = 23
+ },
+/obj/structure/closet/jcloset,
+/obj/structure/cable,
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bC" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bD" = (
+/obj/machinery/airalarm{
+ frequency = 1439;
+ locked = 0;
+ pixel_y = 23
+ },
+/obj/machinery/power/apc{
+ dir = 8;
+ pixel_x = -25
+ },
+/obj/structure/closet/secure_closet/captains,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plasteel{
+ dir = 8
+ },
+/area/bridge)
+"bE" = (
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bF" = (
+/obj/structure/closet/secure_closet/CMO,
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bG" = (
+/obj/structure/table,
+/obj/item/ammo_box/c10mm,
+/obj/item/gun/ballistic/automatic/pistol,
+/turf/open/floor/plasteel,
+/area/bridge)
+"bH" = (
+/obj/structure/table,
+/obj/item/rcd_ammo/large,
+/obj/item/rcd_ammo/large,
+/obj/item/rcd_ammo/large,
+/obj/item/construction/rcd,
+/turf/open/floor/plasteel,
+/area/bridge)
+"bI" = (
+/obj/structure/table,
+/turf/open/floor/plasteel,
+/area/bridge)
+"bJ" = (
+/obj/structure/table,
+/obj/item/card/id/captains_spare,
+/turf/open/floor/plasteel,
+/area/bridge)
+"bK" = (
+/obj/structure/table,
+/obj/item/storage/backpack/holding,
+/turf/open/floor/plasteel,
+/area/bridge)
+"bL" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bM" = (
+/obj/structure/closet/secure_closet/hop,
+/turf/open/floor/plasteel{
+ dir = 4
+ },
+/area/bridge)
+"bN" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bO" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel{
+ dir = 8
+ },
+/area/bridge)
+"bP" = (
+/obj/machinery/vending/cigarette,
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bQ" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/bridge)
+"bR" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/bridge)
+"bS" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/bridge)
+"bT" = (
+/obj/machinery/computer/arcade,
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"bU" = (
+/obj/machinery/airalarm{
+ frequency = 1439;
+ locked = 0;
+ pixel_y = 23
+ },
+/obj/machinery/power/apc{
+ dir = 8;
+ pixel_x = -25
+ },
+/obj/structure/closet/firecloset/full,
+/obj/structure/cable,
+/turf/open/floor/plasteel{
+ dir = 9
+ },
+/area/hallway/secondary/entry)
+"bV" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/closet/emcloset,
+/turf/open/floor/plasteel{
+ dir = 1
+ },
+/area/hallway/secondary/entry)
+"bW" = (
+/obj/structure/closet/secure_closet/hos,
+/turf/open/floor/plasteel{
+ dir = 1
+ },
+/area/hallway/secondary/entry)
+"bX" = (
+/obj/structure/closet/emcloset,
+/turf/open/floor/plasteel{
+ dir = 1
+ },
+/area/hallway/secondary/entry)
+"bY" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/maintenance/department/bridge)
+"bZ" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ca" = (
+/obj/machinery/door/airlock,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/bridge)
+"cb" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"cc" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"cd" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"ce" = (
+/obj/machinery/door/airlock/glass,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
+"cf" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel{
+ dir = 8
+ },
+/area/hallway/secondary/entry)
+"cg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"ch" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"ci" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plasteel{
+ dir = 4
+ },
+/area/hallway/primary/central)
+"cj" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel{
+ dir = 1
+ },
+/area/hallway/primary/central)
+"ck" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel{
+ dir = 1
+ },
+/area/hallway/primary/central)
+"cl" = (
+/obj/structure/cable,
+/turf/open/floor/plasteel{
+ dir = 8
+ },
+/area/hallway/secondary/entry)
+"cm" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel{
+ dir = 1
+ },
+/area/hallway/primary/central)
+"cn" = (
+/obj/machinery/door/airlock,
+/turf/open/floor/plating,
+/area/hallway/secondary/entry)
+"co" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"cp" = (
+/obj/machinery/light,
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plasteel{
+ dir = 10
+ },
+/area/bridge)
+"cq" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel{
+ dir = 1
+ },
+/area/hallway/primary/central)
+"cr" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel{
+ dir = 6
+ },
+/area/bridge)
+"cs" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel{
+ dir = 1
+ },
+/area/hallway/primary/central)
+"ct" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"cu" = (
+/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"cv" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall/r_wall,
+/area/bridge)
+"cw" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"cx" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"cy" = (
+/turf/open/floor/plasteel{
+ dir = 8
+ },
+/area/hallway/secondary/entry)
+"cz" = (
+/obj/machinery/door/airlock/glass,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/construction)
+"cA" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"cB" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/construction)
+"cC" = (
+/obj/machinery/door/airlock/glass,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"cD" = (
+/obj/effect/turf_decal/stripes/corner,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plasteel,
+/area/construction)
+"cE" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/construction)
+"cF" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
+/area/construction)
+"cG" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/hallway/secondary/entry)
+"cH" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plasteel{
+ dir = 8
+ },
+/area/hallway/secondary/entry)
+"cI" = (
+/obj/structure/table,
+/obj/item/storage/fancy/donut_box,
+/turf/open/floor/plasteel{
+ dir = 8
+ },
+/area/hallway/secondary/entry)
+"cJ" = (
+/obj/structure/table,
+/obj/item/storage/fancy/donut_box,
+/turf/open/floor/plasteel{
+ dir = 10
+ },
+/area/hallway/secondary/entry)
+"cK" = (
+/obj/structure/table,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/rods/fifty,
+/obj/machinery/light,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
+"cL" = (
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_x = -3;
+ pixel_y = 7
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
+"cM" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/regular,
+/obj/item/storage/firstaid/regular,
+/obj/item/healthanalyzer,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
+"cN" = (
+/turf/closed/wall/r_wall,
+/area/construction)
+"cO" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/construction)
+"cP" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall/r_wall,
+/area/construction)
+"cQ" = (
+/obj/machinery/door/airlock/glass,
+/turf/open/floor/plasteel,
+/area/construction)
+"cR" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/construction)
+"cS" = (
+/turf/closed/wall/r_wall,
+/area/storage/primary)
+"cT" = (
+/obj/machinery/airalarm{
+ frequency = 1439;
+ locked = 0;
+ pixel_y = 23
+ },
+/obj/machinery/power/apc{
+ dir = 8;
+ pixel_x = -25
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"cU" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall/r_wall,
+/area/storage/primary)
+"cV" = (
+/obj/machinery/door/airlock/glass,
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"cW" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"cX" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"cY" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/construction)
+"cZ" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/structure/ladder,
+/turf/open/floor/plasteel,
+/area/construction)
+"da" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"db" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dc" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dd" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/construction)
+"de" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"df" = (
+/obj/machinery/power/apc/auto_name/north,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/construction)
+"dg" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/construction)
+"dh" = (
+/obj/machinery/power/deck_relay,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/construction)
+"di" = (
+/obj/machinery/power/apc/auto_name/north,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"dj" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"dk" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dl" = (
+/turf/open/floor/plating,
+/area/storage/primary)
+"dm" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/construction)
+"dn" = (
+/obj/machinery/power/deck_relay,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"do" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/construction)
+"dp" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/storage/primary)
+"dq" = (
+/obj/machinery/power/apc/auto_name/north,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"dr" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"ds" = (
+/obj/machinery/power/deck_relay,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"dx" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/storage/primary)
+"dy" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/construction)
+"dz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/construction)
+"dA" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dB" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dC" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dD" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dE" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dF" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dG" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"dH" = (
+/obj/effect/landmark/start,
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dI" = (
+/obj/effect/landmark/latejoin,
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dJ" = (
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dL" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/construction)
+"dM" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/construction)
+"dN" = (
+/obj/structure/table,
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dO" = (
+/obj/structure/table,
+/obj/machinery/light,
+/obj/item/twohanded/fireaxe,
+/obj/item/extinguisher,
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dP" = (
+/obj/structure/table,
+/obj/item/lightreplacer,
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dQ" = (
+/obj/structure/table,
+/obj/item/storage/box/lights/mixed,
+/obj/item/storage/box/lights/tubes,
+/obj/machinery/light,
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dR" = (
+/obj/structure/table,
+/obj/item/flashlight{
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"dS" = (
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"dV" = (
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"dW" = (
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"dX" = (
+/turf/open/floor/plasteel{
+ dir = 2
+ },
+/area/hallway/secondary/service)
+"dY" = (
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"eb" = (
+/turf/open/floor/plasteel,
+/area/bridge)
+"ec" = (
+/turf/open/floor/plasteel{
+ dir = 4
+ },
+/area/bridge)
+"ed" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 4
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"ee" = (
+/turf/open/floor/plasteel{
+ dir = 9
+ },
+/area/hallway/secondary/service)
+"ej" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"em" = (
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/plasteel{
+ dir = 1
+ },
+/area/hallway/secondary/service)
+"en" = (
+/turf/open/floor/plasteel{
+ dir = 10
+ },
+/area/hallway/secondary/service)
+"eo" = (
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
+"es" = (
+/obj/effect/turf_decal/stripes/asteroid/corner,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"eu" = (
+/obj/effect/turf_decal/stripes/asteroid/line,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"ey" = (
+/obj/structure/ladder,
+/obj/effect/turf_decal/stripes/asteroid/corner{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"ez" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel{
+ dir = 8
+ },
+/area/hallway/secondary/service)
+"eC" = (
+/turf/open/openspace,
+/area/maintenance/department/bridge)
+"eD" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 8
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"eE" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"eF" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"eH" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"eI" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"eJ" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"eL" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"eM" = (
+/obj/effect/turf_decal/stripes/asteroid/corner{
+ dir = 4
+ },
+/obj/machinery/light,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"eN" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"eO" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 1
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"eV" = (
+/obj/structure/ladder,
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"fa" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"fo" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 4
+ },
+/obj/machinery/door/airlock/external/glass,
+/obj/structure/fans/tiny,
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"gK" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ icon_state = "connector_map-2";
+ dir = 8
+ },
+/obj/machinery/portable_atmospherics/canister/toxins,
+/turf/open/floor/plating,
+/area/construction)
+"gW" = (
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"hi" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/on{
+ icon_state = "inje_map-2";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/construction)
+"hm" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/construction)
+"ho" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"ij" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/suit_storage_unit/ce,
+/turf/open/floor/plasteel,
+/area/construction)
+"ip" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/space)
+"iu" = (
+/turf/open/openspace,
+/area/hallway/secondary/service)
+"iK" = (
+/turf/open/floor/plasteel{
+ dir = 8
+ },
+/area/hallway/secondary/service)
+"jb" = (
+/obj/machinery/atmospherics/pipe/simple/multiz,
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"jA" = (
+/obj/effect/turf_decal/stripes/white/line{
+ icon_state = "warningline_white";
+ dir = 8
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/engine/storage)
+"jT" = (
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/plating,
+/area/construction)
+"jV" = (
+/obj/effect/turf_decal/stripes/white/line{
+ icon_state = "warningline_white";
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"kg" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"lu" = (
+/obj/effect/turf_decal/stripes/asteroid/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"mZ" = (
+/turf/open/floor/plasteel{
+ dir = 4
+ },
+/area/hallway/secondary/service)
+"nx" = (
+/turf/open/openspace,
+/area/space/nearstation)
+"nz" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"od" = (
+/obj/effect/turf_decal/stripes/white/line,
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/engine/storage)
+"oh" = (
+/obj/machinery/door/airlock/external/glass,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/hallway/secondary/entry)
+"on" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"oA" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/department/bridge)
+"oJ" = (
+/obj/effect/turf_decal/stripes/asteroid/line,
+/turf/open/floor/plating,
+/area/maintenance/department/bridge)
+"qo" = (
+/turf/open/openspace,
+/area/engine/storage)
+"qR" = (
+/obj/effect/turf_decal/stripes/white/line{
+ icon_state = "warningline_white";
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"rd" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/openspace,
+/area/engine/storage)
+"sh" = (
+/turf/open/floor/plasteel{
+ dir = 1
+ },
+/area/hallway/secondary/service)
+"sm" = (
+/obj/structure/stairs,
+/turf/open/floor/plating,
+/area/construction)
+"sE" = (
+/obj/effect/turf_decal/stripes/white/line{
+ icon_state = "warningline_white";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"td" = (
+/obj/effect/turf_decal/stripes/white/line{
+ icon_state = "warningline_white";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"vt" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"vF" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/item/rcd_ammo/large,
+/obj/item/rcd_ammo/large,
+/obj/item/rcd_ammo/large,
+/obj/item/construction/rcd/combat/admin,
+/turf/open/floor/plasteel,
+/area/construction)
+"xr" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/item/pipe_dispenser,
+/turf/open/floor/plasteel,
+/area/construction)
+"xB" = (
+/obj/effect/turf_decal/stripes/white/line{
+ icon_state = "warningline_white";
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"xI" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"zC" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/construction)
+"zZ" = (
+/obj/structure/disposalpipe/trunk{
+ icon_state = "pipe-t";
+ dir = 1
+ },
+/obj/machinery/disposal/bin,
+/turf/open/floor/plating,
+/area/construction)
+"AG" = (
+/turf/closed/wall/r_wall,
+/area/engine/storage)
+"AI" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/item/tank/jetpack/oxygen/captain,
+/obj/item/storage/belt/utility/chief/full,
+/obj/item/clothing/gloves/color/yellow{
+ pixel_y = 10
+ },
+/turf/open/floor/plasteel,
+/area/construction)
+"Bk" = (
+/obj/structure/grille,
+/turf/open/openspace,
+/area/space/nearstation)
+"Bm" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/storage/primary)
+"CK" = (
+/obj/structure/disposalpipe/trunk,
+/obj/machinery/disposal/bin,
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"Dm" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/maintenance/department/bridge)
+"DG" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"DK" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/engine/storage)
+"Eb" = (
+/obj/effect/turf_decal/stripes/white/line,
+/turf/open/floor/plating,
+/area/engine/storage)
+"EF" = (
+/obj/machinery/atmospherics/components/binary/valve,
+/turf/open/floor/plating,
+/area/construction)
+"EH" = (
+/obj/effect/turf_decal/stripes/white/line{
+ icon_state = "warningline_white";
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/white/line{
+ icon_state = "warningline_white";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"Fd" = (
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"FL" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/green/hidden{
+ icon_state = "pipe11-2";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/construction)
+"FY" = (
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/construction)
+"Hk" = (
+/obj/machinery/atmospherics/pipe/simple/multiz,
+/turf/open/floor/plating,
+/area/construction)
+"IC" = (
+/obj/machinery/atmospherics/components/binary/valve,
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"IN" = (
+/obj/effect/turf_decal/stripes/asteroid/line,
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"Jt" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"JH" = (
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"Kd" = (
+/obj/machinery/door/airlock/external/glass,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/hallway/secondary/entry)
+"Kw" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 1
+ },
+/obj/machinery/light,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"KM" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/department/bridge)
+"LE" = (
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"LW" = (
+/obj/structure/fans/tiny,
+/turf/open/floor/plating,
+/area/hallway/secondary/entry)
+"ME" = (
+/obj/machinery/light,
+/turf/open/floor/plating,
+/area/maintenance/department/bridge)
+"Ob" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/open/openspace,
+/area/space/nearstation)
+"Og" = (
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/plating,
+/area/engine/storage)
+"Pu" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"Pz" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/storage)
+"Qo" = (
+/obj/structure/disposalpipe/trunk/multiz/down{
+ icon_state = "pipe-down";
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"Qw" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"St" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/table,
+/turf/open/floor/plasteel,
+/area/construction)
+"Tf" = (
+/turf/open/floor/plating,
+/area/construction)
+"TH" = (
+/turf/open/floor/plating,
+/area/engine/storage)
+"TY" = (
+/turf/closed/wall/r_wall,
+/area/hallway/secondary/service)
+"Um" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"UH" = (
+/obj/machinery/atmospherics/pipe/simple/multiz,
+/turf/open/floor/plating,
+/area/engine/storage)
+"Vn" = (
+/obj/effect/turf_decal/stripes/asteroid/line,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/storage)
+"VB" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/meter,
+/turf/open/floor/plating,
+/area/construction)
+"WN" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"XN" = (
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"Zc" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
+"ZH" = (
+/obj/structure/disposalpipe/trunk/multiz,
+/turf/open/floor/plating,
+/area/construction)
+"ZQ" = (
+/obj/effect/turf_decal/stripes/white/line{
+ icon_state = "warningline_white";
+ dir = 5
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/engine/storage)
+
+(1,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(4,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(5,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(6,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(7,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(8,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(9,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(10,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(11,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+bY
+bY
+bY
+bY
+bY
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(12,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+af
+af
+af
+af
+af
+af
+af
+bz
+af
+af
+af
+af
+af
+bz
+af
+af
+af
+af
+af
+bz
+af
+af
+af
+af
+af
+af
+af
+bz
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(13,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ah
+ah
+ah
+ah
+ah
+ah
+ah
+bA
+bZ
+bZ
+bZ
+bZ
+bZ
+bA
+cN
+cN
+cN
+cN
+cN
+cN
+cN
+cN
+cN
+cN
+cN
+cN
+cN
+cN
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(14,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ah
+al
+aw
+aM
+aZ
+aX
+bA
+bB
+bE
+bE
+bE
+bE
+bE
+bE
+cN
+cD
+dm
+dy
+dy
+dy
+dy
+dy
+dy
+dy
+dy
+dm
+dM
+cN
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(15,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+Dm
+ah
+am
+ax
+aw
+ba
+be
+bj
+bt
+bN
+bN
+bN
+bC
+bN
+bN
+cP
+cE
+Tf
+Tf
+ZH
+FY
+zZ
+Tf
+Tf
+cR
+cR
+cR
+dL
+cN
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(16,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ah
+am
+ay
+aN
+bb
+bl
+ah
+bx
+bL
+bL
+bL
+cg
+bL
+bL
+cz
+cF
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+cR
+Tf
+cR
+dL
+cN
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(17,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ah
+am
+ay
+aO
+bc
+bm
+ah
+bE
+bE
+bE
+bE
+ch
+bE
+bE
+cQ
+cY
+Tf
+cN
+df
+Tf
+Tf
+Tf
+Tf
+cR
+hi
+cR
+dL
+cN
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(18,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ah
+am
+az
+aP
+aP
+bn
+ah
+bF
+bE
+co
+bE
+ch
+bE
+bE
+cN
+cY
+Tf
+Tf
+dg
+Tf
+Tf
+Tf
+Tf
+cR
+FL
+cR
+dL
+cN
+ME
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(19,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+ad
+ah
+ah
+ah
+ah
+ah
+ah
+bu
+bu
+bv
+bu
+bu
+ci
+bL
+bL
+cB
+cO
+dd
+dd
+dh
+Tf
+Tf
+Tf
+Tf
+Tf
+gK
+Tf
+dL
+cN
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(20,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ae
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+bu
+bD
+bO
+cp
+cv
+cj
+bE
+bE
+cR
+cY
+Tf
+cN
+jT
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+dL
+cN
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(21,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ae
+ag
+ai
+an
+ai
+an
+ai
+ag
+bv
+bG
+bQ
+eb
+bv
+ck
+bN
+bN
+zC
+hm
+EF
+VB
+Hk
+Tf
+Tf
+Tf
+Tf
+Tf
+sm
+Tf
+dL
+cN
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(22,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ae
+ag
+ao
+as
+aB
+as
+aV
+ag
+bv
+bI
+bQ
+eb
+bu
+cm
+bE
+bE
+cN
+cY
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+ij
+cN
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(23,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ae
+ag
+ag
+ag
+aC
+ag
+ag
+ag
+bv
+bJ
+bR
+bS
+ca
+cq
+bE
+bE
+cQ
+cY
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+St
+cN
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(24,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ae
+ac
+ac
+ag
+aC
+ag
+ac
+ac
+bv
+bK
+eb
+eb
+bu
+cm
+bE
+bE
+cQ
+cY
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+Tf
+xr
+cN
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(25,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ae
+ac
+ac
+aj
+aD
+aj
+ac
+ac
+bv
+bH
+eb
+eb
+bv
+cm
+bE
+bE
+cN
+cZ
+do
+dz
+dz
+dz
+dz
+dz
+dz
+dz
+dz
+AI
+vF
+cN
+ME
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(26,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ae
+ac
+ac
+aj
+aE
+aj
+ac
+ac
+bu
+bM
+ec
+cr
+bu
+cm
+bE
+bE
+cS
+cS
+cS
+dJ
+dJ
+dJ
+dJ
+dJ
+dJ
+dJ
+dJ
+cS
+cS
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(27,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+ad
+aj
+aj
+aF
+aj
+aj
+aj
+bu
+bu
+bv
+bu
+bu
+cs
+bE
+bE
+cS
+cT
+on
+dA
+dl
+dl
+dl
+dl
+dl
+dl
+dl
+dp
+dl
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(28,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+aj
+ap
+aG
+aS
+bd
+bo
+bw
+bN
+bN
+ct
+bN
+cu
+bN
+bN
+cU
+cW
+dJ
+dB
+dl
+dl
+dl
+dl
+dl
+dl
+dl
+dl
+dl
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(29,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+aj
+aq
+aH
+aR
+aW
+aW
+bk
+bL
+bL
+bL
+cb
+cw
+bE
+bE
+cS
+cX
+dJ
+dB
+dl
+dD
+dc
+dc
+dA
+dl
+dD
+dc
+dc
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(30,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+aj
+ar
+dW
+aG
+bf
+bp
+aj
+bP
+bE
+bE
+cc
+cA
+bE
+bE
+cS
+cX
+dJ
+dB
+dl
+dE
+dH
+dI
+dB
+dl
+dE
+dJ
+dN
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(31,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+Dm
+ak
+ak
+ak
+aT
+ak
+ak
+bs
+bL
+bE
+bE
+cc
+cA
+bE
+bE
+cS
+da
+dJ
+dB
+dl
+dE
+dH
+dI
+dB
+dl
+dE
+dJ
+dO
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(32,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ak
+aA
+aQ
+aU
+bg
+bq
+ak
+bL
+bE
+bE
+cd
+cx
+bL
+bL
+cC
+db
+dJ
+dB
+dl
+dE
+dH
+dI
+dB
+dl
+dE
+dJ
+dN
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(33,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ak
+at
+bh
+bh
+bh
+br
+ak
+bL
+bE
+bE
+cc
+cA
+bE
+bE
+cV
+dJ
+dJ
+dB
+dl
+dE
+dH
+dI
+dB
+dl
+dE
+dJ
+dN
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(34,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ak
+aI
+aI
+dV
+aI
+aI
+ak
+bT
+bE
+co
+cc
+cA
+bE
+bE
+cV
+dJ
+dJ
+dB
+dl
+dE
+dH
+dI
+dB
+dl
+dE
+dJ
+dP
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(35,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ak
+dV
+dV
+dV
+dV
+dV
+by
+by
+by
+by
+ce
+cG
+by
+by
+by
+de
+dJ
+dB
+dl
+dE
+dH
+dI
+dB
+dl
+dE
+dJ
+dQ
+cS
+ME
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(36,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ak
+dV
+aJ
+aK
+aL
+dV
+by
+bU
+cl
+cl
+cf
+cH
+cI
+cJ
+by
+dJ
+dJ
+dB
+dl
+dE
+dH
+dI
+dB
+dl
+dE
+dJ
+dR
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(37,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+Dm
+ak
+dV
+aK
+dV
+bi
+dV
+by
+bV
+eo
+eo
+eo
+eo
+eo
+cK
+by
+dJ
+dJ
+dB
+dl
+dF
+dk
+dk
+dC
+dl
+dF
+dk
+dk
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(38,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ak
+dV
+aL
+aK
+aJ
+dV
+by
+bW
+eo
+eo
+eo
+eo
+eo
+cL
+by
+dJ
+dJ
+dB
+dl
+dl
+dl
+dl
+dl
+dl
+dl
+dl
+dl
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(39,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ak
+dV
+dV
+aY
+dV
+dV
+by
+bX
+eo
+eo
+cy
+eo
+eo
+cM
+by
+dk
+Bm
+dC
+dl
+dl
+dl
+dl
+dl
+dl
+dl
+dx
+dl
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(40,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+ak
+ak
+ak
+ak
+ak
+ak
+by
+by
+cn
+by
+oh
+by
+cn
+by
+by
+cS
+cS
+cS
+cS
+cS
+cS
+cS
+cS
+cS
+cS
+cS
+cS
+cS
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(41,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+af
+oA
+af
+af
+af
+af
+oA
+af
+af
+af
+by
+LW
+by
+af
+af
+af
+oA
+af
+af
+af
+af
+oA
+af
+af
+af
+af
+oA
+af
+af
+af
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(42,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+by
+Kd
+by
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(43,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(44,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(45,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(46,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(47,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(48,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(49,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(50,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(51,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(52,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+
+(1,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(4,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(5,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(6,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(7,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(8,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(9,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(10,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(11,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+bY
+bY
+bY
+bY
+bY
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(12,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+af
+af
+af
+af
+af
+af
+af
+bz
+af
+af
+af
+af
+af
+bz
+af
+af
+af
+af
+bz
+af
+af
+af
+af
+bz
+af
+af
+af
+af
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(13,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+XN
+XN
+XN
+XN
+XN
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(14,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+Dm
+TY
+XN
+XN
+eE
+XN
+dY
+dY
+WN
+dY
+dY
+dY
+dY
+dY
+WN
+dY
+es
+eI
+eI
+kg
+eI
+eI
+eI
+eI
+kg
+eI
+eI
+eM
+TY
+ME
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(15,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+XN
+XN
+XN
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+eu
+CK
+gW
+Qo
+XN
+XN
+XN
+XN
+eF
+eF
+eF
+eL
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(16,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+XN
+XN
+dX
+dX
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+eu
+XN
+XN
+XN
+XN
+XN
+XN
+XN
+eF
+iu
+eF
+eL
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(17,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+XN
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+eu
+XN
+TY
+di
+XN
+XN
+XN
+XN
+eF
+iu
+eF
+eL
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(18,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+eN
+dY
+dY
+dY
+dY
+dY
+eu
+XN
+XN
+dj
+XN
+XN
+XN
+XN
+eF
+eF
+eF
+eL
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(19,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+ad
+TY
+eF
+ed
+ed
+eF
+TY
+TY
+TY
+eF
+TY
+TY
+mZ
+dY
+dY
+dY
+eu
+XN
+XN
+dn
+XN
+XN
+XN
+XN
+XN
+XN
+XN
+Kw
+TY
+ME
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(20,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+Ob
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+TY
+dY
+dY
+WN
+TY
+em
+dY
+dY
+dY
+eu
+XN
+TY
+Fd
+XN
+XN
+XN
+XN
+XN
+XN
+XN
+eL
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(21,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+Bk
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+eF
+dY
+dY
+dY
+eF
+sh
+dY
+dY
+dY
+eu
+XN
+XN
+jb
+LE
+IC
+jb
+XN
+XN
+iu
+XN
+eL
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(22,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+Bk
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+eO
+dY
+dY
+dY
+dY
+sh
+dY
+dY
+dY
+eu
+XN
+XN
+XN
+Zc
+XN
+XN
+XN
+XN
+XN
+XN
+eL
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(23,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+Bk
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+eO
+dY
+dY
+dY
+dY
+sh
+dY
+dY
+dY
+eu
+XN
+XN
+XN
+XN
+XN
+XN
+XN
+XN
+av
+XN
+eL
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(24,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+Bk
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+eO
+dY
+dY
+dY
+dY
+sh
+dY
+dY
+dY
+eu
+XN
+XN
+XN
+XN
+XN
+XN
+XN
+XN
+XN
+XN
+Kw
+TY
+ME
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(25,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+Bk
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+eF
+dY
+dY
+dY
+eF
+sh
+dY
+dY
+eN
+ey
+eJ
+eJ
+eJ
+eJ
+eJ
+eJ
+eJ
+eJ
+eJ
+eH
+lu
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(26,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+Bk
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+TY
+dY
+dY
+eN
+TY
+sh
+dY
+dY
+TY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+TY
+TY
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(27,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+ad
+TY
+eF
+eD
+eD
+eF
+TY
+TY
+TY
+eF
+TY
+TY
+sh
+dY
+dY
+WN
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+WN
+dY
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(28,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+WN
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+TY
+af
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(29,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+TY
+ME
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(30,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+dY
+eN
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+eF
+eF
+eF
+eF
+eF
+eF
+eF
+eF
+eF
+TY
+KM
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(31,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+dY
+TY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+eF
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+eC
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(32,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+Dm
+TY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+eF
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+eC
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(33,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+dY
+dY
+dY
+dY
+dY
+TY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+dY
+eF
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+eC
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(34,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+dY
+dY
+dY
+dY
+dY
+TY
+dY
+dY
+eN
+dY
+dY
+dY
+dY
+eN
+dY
+dY
+dY
+eF
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+eC
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(35,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+dY
+dY
+dY
+dY
+dY
+TY
+TY
+TY
+TY
+dY
+TY
+TY
+TY
+TY
+dY
+dY
+dY
+eF
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+eC
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(36,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+dY
+sh
+iK
+mZ
+xI
+TY
+ee
+iK
+ez
+iK
+iK
+iK
+en
+TY
+dY
+dY
+dY
+eF
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+eC
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(37,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+dY
+iK
+dY
+iK
+dY
+TY
+sh
+dY
+dY
+dY
+dY
+dY
+dY
+TY
+dY
+dY
+dY
+eF
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+eC
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(38,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+Dm
+TY
+dY
+mZ
+iK
+sh
+dY
+TY
+sh
+dY
+dY
+dY
+dY
+dY
+dY
+TY
+dY
+dY
+dY
+eF
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+eC
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(39,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+dY
+dY
+eN
+dY
+dY
+TY
+sh
+dY
+dY
+iK
+dY
+dY
+dY
+TY
+dY
+eN
+dY
+eF
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+eC
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(40,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+TY
+XN
+XN
+XN
+XN
+XN
+TY
+TY
+TY
+TY
+TY
+TY
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+iu
+eC
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(41,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+af
+oA
+af
+af
+af
+af
+oA
+af
+af
+af
+af
+af
+af
+oA
+af
+af
+af
+oA
+af
+oJ
+eC
+eC
+eC
+eC
+eC
+eC
+eC
+eC
+eC
+eC
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(42,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(43,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(44,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(45,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(46,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(47,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(48,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(49,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(50,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(51,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(52,1,2) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+
+(1,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(4,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(5,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(6,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(7,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(8,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(9,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(10,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(11,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(12,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+rd
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(13,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(14,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(15,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+jV
+td
+td
+td
+td
+td
+td
+jA
+jA
+ZQ
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(16,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+xB
+DG
+TH
+TH
+TH
+TH
+TH
+DK
+qo
+od
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(17,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+xB
+AG
+dq
+TH
+TH
+TH
+TH
+DK
+qo
+od
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(18,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+xB
+TH
+dr
+TH
+TH
+TH
+TH
+DK
+DK
+od
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(19,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+vt
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+xB
+TH
+ds
+TH
+TH
+TH
+TH
+TH
+Pz
+Eb
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(20,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+ip
+Jt
+dS
+dS
+dS
+dS
+dS
+dS
+dS
+dS
+xB
+AG
+Og
+TH
+TH
+TH
+TH
+TH
+TH
+Eb
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(21,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+ip
+Jt
+dS
+dS
+dS
+dS
+dS
+dS
+dS
+dS
+xB
+Pz
+TH
+TH
+TH
+UH
+JH
+ho
+TH
+Eb
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(22,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+ip
+Jt
+dS
+dS
+dS
+dS
+dS
+dS
+dS
+dS
+xB
+TH
+TH
+TH
+TH
+TH
+Pu
+TH
+TH
+Eb
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(23,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+ip
+Jt
+dS
+dS
+dS
+dS
+dS
+dS
+dS
+dS
+xB
+TH
+TH
+TH
+TH
+TH
+TH
+TH
+qo
+Eb
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(24,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+ip
+Jt
+dS
+dS
+dS
+dS
+dS
+dS
+dS
+dS
+EH
+sE
+sE
+sE
+sE
+sE
+sE
+sE
+sE
+qR
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(25,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+nx
+nx
+nx
+nx
+nx
+nx
+nx
+ip
+Jt
+dS
+dS
+dS
+dS
+dS
+dS
+nz
+eV
+dS
+IN
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(26,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+nx
+nx
+nx
+nx
+nx
+nx
+dG
+fo
+dS
+dS
+dS
+dS
+dS
+dS
+dS
+AG
+dS
+dS
+IN
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(27,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+fa
+Qw
+Qw
+Qw
+Qw
+Qw
+Qw
+ej
+Qw
+Qw
+Vn
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(28,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(29,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(30,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(31,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(32,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(33,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(34,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(35,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(36,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(37,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(38,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(39,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(40,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(41,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+qo
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(42,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+AG
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(43,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(44,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(45,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(46,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(47,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+au
+aa
+aa
+aa
+aa
+aa
+"}
+(48,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(49,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(50,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(51,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(52,1,3) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 80e80cd6a9..6a323ee86f 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -3398,7 +3398,7 @@
/area/centcom/supply)
"iS" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/brown{
@@ -3883,7 +3883,7 @@
/area/centcom/control)
"jV" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/line{
@@ -4231,7 +4231,7 @@
icon_state = "plant-22"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -5775,7 +5775,7 @@
req_access_txt = "109"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -5799,7 +5799,7 @@
req_access_txt = "109"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -6866,7 +6866,7 @@
/area/centcom/ferry)
"pM" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -6893,7 +6893,7 @@
/obj/item/clothing/gloves/color/black,
/obj/item/clothing/glasses/eyepatch,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel/grimy,
@@ -9214,7 +9214,7 @@
pixel_y = -32
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -11017,7 +11017,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/blue{
@@ -12323,7 +12323,7 @@
/obj/item/book/manual/wiki/security_space_law,
/obj/item/taperecorder,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -12390,7 +12390,7 @@
"CM" = (
/obj/structure/filingcabinet/medical,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -14511,7 +14511,7 @@
/area/tdome/tdomeobserve)
"Hq" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/white,
@@ -14554,7 +14554,7 @@
/area/tdome/tdomeobserve)
"Hu" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/bar,
@@ -15835,7 +15835,7 @@
icon_state = "plant-21"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
diff --git a/_maps/map_files/generic/City_of_Cogs.dmm b/_maps/map_files/generic/City_of_Cogs.dmm
index e1e7659ce3..1195ad62c5 100644
--- a/_maps/map_files/generic/City_of_Cogs.dmm
+++ b/_maps/map_files/generic/City_of_Cogs.dmm
@@ -379,15 +379,6 @@
/obj/item/camera,
/turf/open/indestructible/clock_spawn_room,
/area/reebe/city_of_cogs)
-"Nz" = (
-/obj/structure/table/bronze,
-/obj/item/implantcase,
-/obj/item/implantcase,
-/obj/item/implantcase,
-/obj/item/implanter,
-/obj/item/storage/backpack/duffelbag/sec/surgery,
-/turf/open/floor/clockwork/reebe,
-/area/reebe/city_of_cogs)
"NH" = (
/obj/structure/table/bronze,
/obj/item/taperecorder,
@@ -409,10 +400,6 @@
"WT" = (
/turf/closed/wall/clockwork,
/area/reebe)
-"Yy" = (
-/obj/structure/table/optable,
-/turf/open/floor/clockwork/reebe,
-/area/reebe/city_of_cogs)
(1,1,1) = {"
zb
@@ -33918,7 +33905,7 @@ ab
ai
bE
aj
-Yy
+aj
aj
aj
aA
@@ -34175,7 +34162,7 @@ ab
ah
al
aj
-Nz
+aj
aj
aC
ah
diff --git a/_maps/multiz_debug.dm b/_maps/multiz_debug.dm
new file mode 100644
index 0000000000..0521fef59d
--- /dev/null
+++ b/_maps/multiz_debug.dm
@@ -0,0 +1 @@
+#define FORCE_MAP "_maps/multiz_debug.json"
\ No newline at end of file
diff --git a/_maps/multiz_debug.json b/_maps/multiz_debug.json
new file mode 100644
index 0000000000..7e39981e23
--- /dev/null
+++ b/_maps/multiz_debug.json
@@ -0,0 +1,6 @@
+{
+ "map_name": "MultiZ Debug",
+ "map_path": "map_files/debug",
+ "map_file": "multiz.dmm",
+ "traits": [{"Up": 1}, {"Up": 1, "Down": -1}, {"Down": -1}]
+ }
diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm
index 2c04837c79..05446968e7 100644
--- a/_maps/shuttles/emergency_raven.dmm
+++ b/_maps/shuttles/emergency_raven.dmm
@@ -56,7 +56,7 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/escape)
"ah" = (
-/obj/machinery/computer/shuttle,
+/obj/machinery/computer/emergency_shuttle,
/turf/open/floor/plasteel/dark,
/area/shuttle/escape)
"ai" = (
diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm
index 263d692764..f7ec35c667 100644
--- a/_maps/shuttles/infiltrator_basic.dmm
+++ b/_maps/shuttles/infiltrator_basic.dmm
@@ -2,15 +2,21 @@
"aa" = (
/turf/template_noop,
/area/template_noop)
-"ac" = (
-/obj/machinery/porta_turret/syndicate{
+"ab" = (
+/obj/machinery/porta_turret/syndicate/shuttle{
dir = 9
},
-/turf/closed/wall/mineral/plastitanium,
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/bridge)
+"ac" = (
+/turf/closed/wall/r_wall/syndicate,
/area/shuttle/syndicate/bridge)
"ad" = (
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/bridge)
+/obj/machinery/porta_turret/syndicate/shuttle{
+ dir = 10
+ },
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/hallway)
"ae" = (
/obj/structure/window/plastitanium,
/obj/machinery/door/poddoor/shutters{
@@ -21,11 +27,8 @@
/turf/open/floor/plating,
/area/shuttle/syndicate/bridge)
"af" = (
-/obj/machinery/porta_turret/syndicate{
- dir = 5
- },
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/bridge)
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/hallway)
"ag" = (
/obj/machinery/computer/med_data/syndie,
/obj/effect/turf_decal/bot_white,
@@ -144,7 +147,7 @@
/area/shuttle/syndicate/bridge)
"au" = (
/obj/machinery/status_display/evac,
-/turf/closed/wall/mineral/plastitanium,
+/turf/closed/wall/r_wall/syndicate,
/area/shuttle/syndicate/bridge)
"av" = (
/obj/machinery/door/airlock/hatch{
@@ -164,14 +167,14 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/syndicate/bridge)
"aw" = (
-/obj/machinery/porta_turret/syndicate{
- dir = 10
+/obj/machinery/porta_turret/syndicate/shuttle{
+ dir = 9
},
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/hallway)
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/eva)
"ax" = (
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/hallway)
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/eva)
"ay" = (
/obj/structure/table/reinforced,
/obj/item/stack/cable_coil/white,
@@ -222,11 +225,8 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/syndicate/hallway)
"aB" = (
-/obj/machinery/porta_turret/syndicate{
- dir = 6
- },
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/hallway)
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/airlock)
"aC" = (
/obj/structure/chair/comfy/shuttle{
dir = 4;
@@ -265,14 +265,17 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/syndicate/hallway)
"aF" = (
-/obj/machinery/porta_turret/syndicate{
+/obj/machinery/porta_turret/syndicate/shuttle{
+ dir = 5
+ },
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/armory)
+"aG" = (
+/obj/machinery/porta_turret/syndicate/shuttle{
dir = 9
},
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/eva)
-"aG" = (
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/eva)
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/medical)
"aH" = (
/obj/structure/chair/comfy/shuttle{
dir = 4;
@@ -314,14 +317,11 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/syndicate/hallway)
"aJ" = (
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/airlock)
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/medical)
"aK" = (
-/obj/machinery/porta_turret/syndicate{
- dir = 5
- },
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/armory)
+/turf/closed/wall/r_wall/syndicate/nodiagonal,
+/area/shuttle/syndicate/medical)
"aL" = (
/obj/machinery/suit_storage_unit/syndicate,
/obj/effect/turf_decal/stripes/line{
@@ -508,7 +508,7 @@
/obj/structure/sign/warning/vacuum/external{
layer = 4
},
-/turf/closed/wall/mineral/plastitanium,
+/turf/closed/wall/r_wall/syndicate,
/area/shuttle/syndicate/airlock)
"be" = (
/obj/machinery/suit_storage_unit/syndicate,
@@ -517,11 +517,6 @@
},
/turf/open/floor/mineral/plastitanium,
/area/shuttle/syndicate/eva)
-"bf" = (
-/obj/structure/reagent_dispensers/fueltank,
-/obj/effect/turf_decal/bot_white,
-/turf/open/floor/plasteel/dark,
-/area/shuttle/syndicate/eva)
"bg" = (
/obj/structure/grille,
/obj/structure/window/plastitanium,
@@ -543,31 +538,28 @@
/turf/open/floor/mineral/plastitanium/red,
/area/shuttle/syndicate/airlock)
"bj" = (
-/obj/machinery/porta_turret/syndicate{
- dir = 9
- },
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/medical)
+/turf/closed/wall/r_wall/syndicate/nodiagonal,
+/area/shuttle/syndicate/armory)
"bk" = (
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/medical)
-"bl" = (
/obj/machinery/status_display/ai,
-/turf/closed/wall/mineral/plastitanium,
+/turf/closed/wall/r_wall/syndicate,
/area/shuttle/syndicate/medical)
"bm" = (
-/turf/closed/wall/mineral/plastitanium/nodiagonal,
-/area/shuttle/syndicate/medical)
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/armory)
"bn" = (
-/turf/closed/wall/mineral/plastitanium/nodiagonal,
+/obj/machinery/status_display/evac,
+/turf/closed/wall/r_wall/syndicate,
/area/shuttle/syndicate/armory)
"bo" = (
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/armory)
-"bp" = (
-/obj/machinery/status_display/evac,
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/armory)
+/obj/machinery/nuclearbomb/syndicate{
+ anchored = 1
+ },
+/obj/machinery/door/window{
+ dir = 1
+ },
+/turf/open/floor/circuit/red,
+/area/shuttle/syndicate/hallway)
"bq" = (
/obj/machinery/sleeper/syndie{
dir = 4
@@ -1043,14 +1035,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/shuttle/syndicate/hallway)
-"cm" = (
-/obj/machinery/nuclearbomb/syndicate,
-/obj/machinery/door/window{
- dir = 1;
- name = "Theatre Stage"
- },
-/turf/open/floor/circuit/red,
-/area/shuttle/syndicate/hallway)
"cn" = (
/obj/machinery/light{
dir = 4
@@ -1169,18 +1153,6 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating/airless,
/area/shuttle/syndicate/medical)
-"cC" = (
-/obj/machinery/porta_turret/syndicate{
- dir = 6
- },
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/medical)
-"cD" = (
-/obj/machinery/porta_turret/syndicate{
- dir = 10
- },
-/turf/closed/wall/mineral/plastitanium,
-/area/shuttle/syndicate/armory)
"cE" = (
/obj/structure/shuttle/engine/propulsion/left,
/obj/effect/turf_decal/stripes/line,
@@ -1196,6 +1168,35 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating/airless,
/area/shuttle/syndicate/armory)
+"dp" = (
+/obj/machinery/porta_turret/syndicate/shuttle{
+ dir = 10
+ },
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/armory)
+"pd" = (
+/obj/machinery/porta_turret/syndicate/shuttle{
+ dir = 5
+ },
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/bridge)
+"vv" = (
+/obj/structure/reagent_dispensers/fueltank,
+/obj/effect/turf_decal/bot_white,
+/turf/open/floor/plasteel/dark,
+/area/shuttle/syndicate/eva)
+"In" = (
+/obj/machinery/porta_turret/syndicate/shuttle{
+ dir = 6
+ },
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/hallway)
+"MJ" = (
+/obj/machinery/porta_turret/syndicate/shuttle{
+ dir = 6
+ },
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/syndicate/medical)
(1,1,1) = {"
aa
@@ -1211,16 +1212,16 @@ aa
aa
aa
aa
-bj
-bk
-bk
-bk
-bk
-bk
-bk
-bk
-bk
-bk
+aG
+aJ
+aJ
+aJ
+aJ
+aJ
+aJ
+aJ
+aJ
+aJ
"}
(2,1,1) = {"
aa
@@ -1230,13 +1231,13 @@ aa
aa
aa
aa
-aF
-aG
-aG
-aG
-aG
-aG
-bk
+aw
+ax
+ax
+ax
+ax
+ax
+aJ
bq
bC
bq
@@ -1255,13 +1256,13 @@ aa
aa
aa
aa
-aG
+ax
aL
aR
aR
aR
be
-bk
+aJ
br
bD
bH
@@ -1280,13 +1281,13 @@ aa
aa
aa
aa
-aG
+ax
aM
aM
aM
aM
aM
-bl
+bk
bs
bD
bI
@@ -1298,51 +1299,51 @@ cu
cB
"}
(5,1,1) = {"
+ab
+ac
+ac
+ac
ac
-ad
-ad
-ad
-ad
aa
aa
-aG
+ax
aM
aM
aM
aM
aM
-bk
+aJ
bt
bD
bJ
bT
cb
-bm
-bk
-bk
-cC
+aK
+aJ
+aJ
+MJ
"}
(6,1,1) = {"
-ad
+ac
ag
an
at
+ac
ad
-aw
aa
-aG
+ax
aN
aS
aU
aZ
-bf
-bk
+vv
+aJ
bu
bD
bJ
bT
cc
-bk
+aJ
aa
aa
aa
@@ -1352,24 +1353,24 @@ ae
ah
ao
at
-ad
+ac
+af
+af
+ax
+ax
ax
ax
-aG
-aG
-aG
-aG
ba
bg
-bm
+aK
bv
bv
bK
bv
-bk
-bk
-ax
-ax
+aJ
+aJ
+af
+af
aa
"}
(8,1,1) = {"
@@ -1417,7 +1418,7 @@ aD
bL
bU
az
-cm
+bo
cr
cw
aa
@@ -1427,7 +1428,7 @@ ae
ak
ap
at
-ad
+ac
aA
aE
aI
@@ -1452,75 +1453,75 @@ ae
al
ar
at
-ad
-ax
-ax
-ax
-ax
-aJ
-aJ
+ac
+af
+af
+af
+af
+aB
+aB
bb
bh
-bn
+bj
bw
bw
bM
bw
-bo
-bo
-ax
-ax
+bm
+bm
+af
+af
aa
"}
(12,1,1) = {"
-ad
+ac
am
as
at
-ad
-aB
+ac
+In
aa
-aJ
+aB
aO
aO
aX
bc
aO
-bo
+bm
bx
bG
bN
bV
ce
-bo
+bm
aa
aa
aa
"}
(13,1,1) = {"
-af
-ad
-ad
-ad
-ad
+pd
+ac
+ac
+ac
+ac
aa
aa
-aJ
+aB
aP
aP
aP
aP
aP
-bo
+bm
by
bG
bN
bV
cf
-bn
-bo
-bo
-cD
+bj
+bm
+bm
+dp
"}
(14,1,1) = {"
aa
@@ -1530,13 +1531,13 @@ aa
aa
aa
aa
-aJ
+aB
aP
aP
aP
aP
aP
-bp
+bn
bz
bG
bO
@@ -1555,13 +1556,13 @@ aa
aa
aa
aa
-aJ
+aB
aQ
aT
aT
aT
bi
-bo
+bm
bA
bG
bP
@@ -1580,13 +1581,13 @@ aa
aa
aa
aa
-aK
-aJ
-aJ
+aF
+aB
+aB
aY
bd
-aJ
-bo
+aB
+bm
bB
bG
bQ
@@ -1611,14 +1612,14 @@ aa
aa
aa
aa
-aK
-bo
-bo
-bo
-bo
-bo
-bo
-bo
-bo
-bo
+aF
+bm
+bm
+bm
+bm
+bm
+bm
+bm
+bm
+bm
"}
diff --git a/code/__DEFINES/MC.dm b/code/__DEFINES/MC.dm
index 97ce6ef6fd..fe48edd266 100644
--- a/code/__DEFINES/MC.dm
+++ b/code/__DEFINES/MC.dm
@@ -2,12 +2,12 @@
#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = Master.current_ticklimit; var/split_tick_phases = ##phase_count
#define MC_SPLIT_TICK \
- if(split_tick_phases > 1){\
- Master.current_ticklimit = ((original_tick_limit - TICK_USAGE) / split_tick_phases) + TICK_USAGE;\
- --split_tick_phases;\
- } else {\
- Master.current_ticklimit = original_tick_limit;\
- }
+ if(split_tick_phases > 1){\
+ Master.current_ticklimit = ((original_tick_limit - TICK_USAGE) / split_tick_phases) + TICK_USAGE;\
+ --split_tick_phases;\
+ } else {\
+ Master.current_ticklimit = original_tick_limit;\
+ }
// Used to smooth out costs to try and avoid oscillation.
#define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current))
@@ -65,14 +65,14 @@
#define SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/##X);\
/datum/controller/subsystem/##X/New(){\
- NEW_SS_GLOBAL(SS##X);\
- PreInit();\
+ NEW_SS_GLOBAL(SS##X);\
+ PreInit();\
}\
/datum/controller/subsystem/##X
#define PROCESSING_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/processing/##X);\
/datum/controller/subsystem/processing/##X/New(){\
- NEW_SS_GLOBAL(SS##X);\
- PreInit();\
+ NEW_SS_GLOBAL(SS##X);\
+ PreInit();\
}\
/datum/controller/subsystem/processing/##X
diff --git a/code/__DEFINES/_globals.dm b/code/__DEFINES/_globals.dm
index e5f5929a95..cc3e385f9f 100644
--- a/code/__DEFINES/_globals.dm
+++ b/code/__DEFINES/_globals.dm
@@ -3,8 +3,8 @@
//Creates a global initializer with a given InitValue expression, do not use
#define GLOBAL_MANAGED(X, InitValue)\
/datum/controller/global_vars/proc/InitGlobal##X(){\
- ##X = ##InitValue;\
- gvars_datum_init_order += #X;\
+ ##X = ##InitValue;\
+ gvars_datum_init_order += #X;\
}
//Creates an empty global initializer, do not use
#define GLOBAL_UNMANAGED(X) /datum/controller/global_vars/proc/InitGlobal##X() { return; }
@@ -13,8 +13,8 @@
#ifndef TESTING
#define GLOBAL_PROTECT(X)\
/datum/controller/global_vars/InitGlobal##X(){\
- ..();\
- gvars_datum_protected_varlist[#X] = TRUE;\
+ ..();\
+ gvars_datum_protected_varlist[#X] = TRUE;\
}
#else
#define GLOBAL_PROTECT(X)
@@ -41,6 +41,12 @@
//Create a list global that is initialized as an empty list
#define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list())
+// Create a typed list global with an initializer expression
+#define GLOBAL_LIST_INIT_TYPED(X, Typepath, InitValue) GLOBAL_RAW(/list##Typepath/X); GLOBAL_MANAGED(X, InitValue)
+
+// Create a typed list global that is initialized as an empty list
+#define GLOBAL_LIST_EMPTY_TYPED(X, Typepath) GLOBAL_LIST_INIT_TYPED(X, Typepath, list())
+
//Create a typed global with an initializer expression
#define GLOBAL_DATUM_INIT(X, Typepath, InitValue) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, InitValue)
diff --git a/code/__DEFINES/_protect.dm b/code/__DEFINES/_protect.dm
index 2bfb984153..fd27d2fbe9 100644
--- a/code/__DEFINES/_protect.dm
+++ b/code/__DEFINES/_protect.dm
@@ -1,10 +1,10 @@
#define GENERAL_PROTECT_DATUM(Path)\
##Path/can_vv_get(var_name){\
- return FALSE;\
+ return FALSE;\
}\
##Path/vv_edit_var(var_name, var_value){\
- return FALSE;\
+ return FALSE;\
}\
##Path/CanProcCall(procname){\
- return FALSE;\
+ return FALSE;\
}
\ No newline at end of file
diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm
index b875998f0a..bded562a3c 100644
--- a/code/__DEFINES/admin.dm
+++ b/code/__DEFINES/admin.dm
@@ -69,6 +69,7 @@
#define ADMIN_PUNISHMENT_BSA "Bluespace Artillery Device"
#define ADMIN_PUNISHMENT_FIREBALL "Fireball"
#define ADMIN_PUNISHMENT_ROD "Immovable Rod"
+#define ADMIN_PUNISHMENT_SUPPLYPOD_QUICK "Supply Pod (Quick)"
#define ADMIN_PUNISHMENT_SUPPLYPOD "Supply Pod"
#define ADMIN_PUNISHMENT_MAZING "Puzzle"
#define ADMIN_PUNISHMENT_PIE "Cream Pie"
diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm
index b2f05fd5f8..cabcc0a17d 100644
--- a/code/__DEFINES/antagonists.dm
+++ b/code/__DEFINES/antagonists.dm
@@ -12,6 +12,7 @@
#define APPRENTICE_BLUESPACE "bluespace"
#define APPRENTICE_ROBELESS "robeless"
#define APPRENTICE_HEALING "healing"
+#define APPRENTICE_MARTIAL "martial"
//ERT Types
@@ -40,3 +41,19 @@
#define NOT_DOMINATING -1
#define MAX_LEADERS_GANG 4
#define INITIAL_DOM_ATTEMPTS 3
+
+//Bloodsucker defines
+// Bloodsucker related antag datums
+#define ANTAG_DATUM_BLOODSUCKER /datum/antagonist/bloodsucker
+#define ANTAG_DATUM_VASSAL /datum/antagonist/vassal
+//#define ANTAG_DATUM_HUNTER /datum/antagonist/vamphunter Disabled for now
+
+// BLOODSUCKER
+#define BLOODSUCKER_LEVEL_TO_EMBRACE 3
+#define BLOODSUCKER_FRENZY_TIME 25 // How long the vamp stays in frenzy.
+#define BLOODSUCKER_FRENZY_OUT_TIME 300 // How long the vamp goes back into frenzy.
+#define BLOODSUCKER_STARVE_VOLUME 5 // Amount of blood, below which a Vamp is at risk of frenzy.
+
+#define CAT_STRUCTURE "Structures"
+
+#define MARTIALART_HUNTER "hunter-fu"
diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm
index 928837979c..74a6796bd2 100644
--- a/code/__DEFINES/atmospherics.dm
+++ b/code/__DEFINES/atmospherics.dm
@@ -9,12 +9,13 @@
#define META_GAS_FUSION_POWER 7
//ATMOS
//stuff you should probably leave well alone!
-#define R_IDEAL_GAS_EQUATION 8.31 //kPa*L/(K*mol)
-#define ONE_ATMOSPHERE 101.325 //kPa
-#define TCMB 2.7 // -270.3degC
-#define TCRYO 225 // -48.15degC
-#define T0C 273.15 // 0degC
-#define T20C 293.15 // 20degC
+#define R_IDEAL_GAS_EQUATION 8.31446261815324 //kPa*L/(K*mol)
+#define ONE_ATMOSPHERE 101.325 //kPa
+#define TCMB 2.7 // -270.3degC
+#define TCRYO 225 // -48.15degC
+#define T0C 273.15 // 0degC
+#define T20C 293.15 // 20degC
+#define STEFANBOLTZMANN (5.670373*10e-8) // W/(m^2*K^4)
#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) //moles in a 2.5 m^3 cell at 101.325 Pa and 20 degC
#define M_CELL_WITH_RATIO (MOLES_CELLSTANDARD * 0.005) //compared against for superconductivity
@@ -143,8 +144,24 @@
#define ATMOS_PASS_NO 0
#define ATMOS_PASS_PROC -1 //ask CanAtmosPass()
#define ATMOS_PASS_DENSITY -2 //just check density
-#define CANATMOSPASS(A, O) ( A.CanAtmosPass == ATMOS_PASS_PROC ? A.CanAtmosPass(O) : ( A.CanAtmosPass == ATMOS_PASS_DENSITY ? !A.density : A.CanAtmosPass ) )
+#define CANATMOSPASS(A, O) ( A.CanAtmosPass == ATMOS_PASS_PROC ? A.CanAtmosPass(O) : ( A.CanAtmosPass == ATMOS_PASS_DENSITY ? !A.density : A.CanAtmosPass ) )
+#define CANVERTICALATMOSPASS(A, O) ( A.CanAtmosPassVertical == ATMOS_PASS_PROC ? A.CanAtmosPass(O, TRUE) : ( A.CanAtmosPassVertical == ATMOS_PASS_DENSITY ? !A.density : A.CanAtmosPassVertical ) )
+
+//OPEN TURF ATMOS
+#define OPENTURF_DEFAULT_ATMOS "o2=22;n2=82;TEMP=293.15" //the default air mix that open turfs spawn
+#define TCOMMS_ATMOS "n2=100;TEMP=80" //-193,15°C telecommunications. also used for xenobiology slime killrooms
+#define AIRLESS_ATMOS "TEMP=2.7" //space
+#define FROZEN_ATMOS "o2=22;n2=82;TEMP=180" //-93.15°C snow and ice turfs
+#define BURNMIX_ATMOS "o2=2500;plasma=5000;TEMP=370" //used in the holodeck burn test program
+
+//ATMOSPHERICS DEPARTMENT GAS TANK TURFS
+#define ATMOS_TANK_N2O "n2o=6000;TEMP=293.15"
+#define ATMOS_TANK_CO2 "co2=50000;TEMP=293.15"
+#define ATMOS_TANK_PLASMA "plasma=70000;TEMP=293.15"
+#define ATMOS_TANK_O2 "o2=100000;TEMP=293.15"
+#define ATMOS_TANK_N2 "n2=100000;TEMP=293.15"
+#define ATMOS_TANK_AIRMIX "o2=2644;n2=10580;TEMP=293.15"
//LAVALAND
#define LAVALAND_EQUIPMENT_EFFECT_PRESSURE 50 //what pressure you have to be under to increase the effect of equipment meant for lavaland
#define LAVALAND_DEFAULT_ATMOS "o2=14;n2=23;TEMP=300"
@@ -249,6 +266,13 @@
out_var += cached_gases[total_moles_id];\
}
+#ifdef TESTING
+GLOBAL_LIST_INIT(atmos_adjacent_savings, list(0,0))
+#define CALCULATE_ADJACENT_TURFS(T) if (SSadjacent_air.queue[T]) { GLOB.atmos_adjacent_savings[1] += 1 } else { GLOB.atmos_adjacent_savings[2] += 1; SSadjacent_air.queue[T] = 1 }
+#else
+#define CALCULATE_ADJACENT_TURFS(T) SSadjacent_air.queue[T] = 1
+#endif
+
//Unomos - So for whatever reason, garbage collection actually drastically decreases the cost of atmos later in the round. Turning this into a define yields massively improved performance.
#define GAS_GARBAGE_COLLECT(GASGASGAS)\
var/list/CACHE_GAS = GASGASGAS;\
diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm
index 0e4f0f3a6e..322a150617 100644
--- a/code/__DEFINES/atom_hud.dm
+++ b/code/__DEFINES/atom_hud.dm
@@ -58,6 +58,7 @@
#define ANTAG_HUD_SOULLESS 21
#define ANTAG_HUD_CLOCKWORK 22
#define ANTAG_HUD_BROTHER 23
+#define ANTAG_HUD_BLOODSUCKER 24
// Notification action types
#define NOTIFY_JUMP "jump"
diff --git a/code/__DEFINES/cargo.dm b/code/__DEFINES/cargo.dm
index 242889e3f8..52a2d56697 100644
--- a/code/__DEFINES/cargo.dm
+++ b/code/__DEFINES/cargo.dm
@@ -11,23 +11,25 @@
#define STYLE_FRUIT 11
#define STYLE_INVISIBLE 12
#define STYLE_GONDOLA 13
+#define STYLE_SEETHROUGH 14
#define POD_ICON_STATE 1
#define POD_NAME 2
#define POD_DESC 3
#define POD_STYLES list(\
- list("supplypod", "supply pod", "A Nanotrasen supply drop pod."),\
- list("bluespacepod", "bluespace supply pod" , "A Nanotrasen Bluespace supply pod. Teleports back to CentCom after delivery."),\
- list("centcompod", "\improper Centcom supply pod", "A Nanotrasen supply pod, this one has been marked with Central Command's designations. Teleports back to Centcom after delivery."),\
- list("syndiepod", "blood-red supply pod", "A dark, intimidating supply pod, covered in the blood-red markings of the Syndicate. It's probably best to stand back from this."),\
- list("squadpod", "\improper MK. II supply pod", "A Nanotrasen supply pod. This one has been marked the markings of some sort of elite strike team."),\
- list("cultpod", "bloody supply pod", "A Nanotrasen supply pod covered in scratch-marks, blood, and strange runes."),\
- list("missilepod", "cruise missile", "A big ass missile that didn't seem to fully detonate. It was likely launched from some far-off deep space missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."),\
- list("smissilepod", "\improper Syndicate cruise missile", "A big ass, blood-red missile that didn't seem to fully detonate. It was likely launched from some deep space Syndicate missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."),\
- list("boxpod", "\improper Aussec supply crate", "An incredibly sturdy supply crate, designed to withstand orbital re-entry. Has 'Aussec Armory - 2532' engraved on the side."),\
- list("honkpod", "\improper HONK pod", "A brightly-colored supply pod. It likely originated from the Clown Federation."),\
- list("fruitpod", "\improper Orange", "An angry orange."),\
- list("", "\improper S.T.E.A.L.T.H. pod MKVII", "A supply pod that, under normal circumstances, is completely invisible to conventional methods of detection. How are you even seeing this?"),\
- list("gondolapod", "gondola", "The silent walker. This one seems to be part of a delivery agency.")\
+ list("supplypod", "supply pod", "A Nanotrasen supply drop pod."),\
+ list("bluespacepod", "bluespace supply pod" , "A Nanotrasen Bluespace supply pod. Teleports back to CentCom after delivery."),\
+ list("centcompod", "\improper Centcom supply pod", "A Nanotrasen supply pod, this one has been marked with Central Command's designations. Teleports back to Centcom after delivery."),\
+ list("syndiepod", "blood-red supply pod", "A dark, intimidating supply pod, covered in the blood-red markings of the Syndicate. It's probably best to stand back from this."),\
+ list("squadpod", "\improper MK. II supply pod", "A Nanotrasen supply pod. This one has been marked the markings of some sort of elite strike team."),\
+ list("cultpod", "bloody supply pod", "A Nanotrasen supply pod covered in scratch-marks, blood, and strange runes."),\
+ list("missilepod", "cruise missile", "A big ass missile that didn't seem to fully detonate. It was likely launched from some far-off deep space missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."),\
+ list("smissilepod", "\improper Syndicate cruise missile", "A big ass, blood-red missile that didn't seem to fully detonate. It was likely launched from some deep space Syndicate missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."),\
+ list("boxpod", "\improper Aussec supply crate", "An incredibly sturdy supply crate, designed to withstand orbital re-entry. Has 'Aussec Armory - 2532' engraved on the side."),\
+ list("honkpod", "\improper HONK pod", "A brightly-colored supply pod. It likely originated from the Clown Federation."),\
+ list("fruitpod", "\improper Orange", "An angry orange."),\
+ list("", "\improper S.T.E.A.L.T.H. pod MKVII", "A supply pod that, under normal circumstances, is completely invisible to conventional methods of detection. How are you even seeing this?"),\
+ list("gondolapod", "gondola", "The silent walker. This one seems to be part of a delivery agency."),\
+ list("", "", "")\
)
\ No newline at end of file
diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm
index e3cafd4613..47b5c2f602 100644
--- a/code/__DEFINES/citadel_defines.dm
+++ b/code/__DEFINES/citadel_defines.dm
@@ -57,9 +57,9 @@
#define BALLS_SACK_SIZE_DEF 8
#define BALLS_SACK_SIZE_MAX 40
-#define CUM_RATE 0.035
+#define CUM_RATE 2 // holy shit what a really shitty define name - relates to units per arbitrary measure of time?
#define CUM_RATE_MULT 1
-#define CUM_EFFICIENCY 1//amount of nutrition required per life()
+#define CUM_EFFICIENCY 1 //amount of nutrition required per life()
#define EGG_GIRTH_MIN 1//inches
#define EGG_GIRTH_DEF 6
diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm
index 3664da4a5d..2d40d91023 100644
--- a/code/__DEFINES/combat.dm
+++ b/code/__DEFINES/combat.dm
@@ -98,6 +98,7 @@
//the define for visible message range in combat
#define COMBAT_MESSAGE_RANGE 3
+#define DEFAULT_MESSAGE_RANGE 7
//Shove knockdown lengths (deciseconds)
#define SHOVE_KNOCKDOWN_SOLID 30
diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm
index 3a680d1c90..f95ff93ac3 100644
--- a/code/__DEFINES/components.dm
+++ b/code/__DEFINES/components.dm
@@ -5,6 +5,17 @@
#define COMPONENT_INCOMPATIBLE 1
#define COMPONENT_NOTRANSFER 2
+#define ELEMENT_INCOMPATIBLE 1 // Return value to cancel attaching
+
+// /datum/element flags
+/// Causes the detach proc to be called when the host object is being deleted
+#define ELEMENT_DETACH (1 << 0)
+/**
+ * Only elements created with the same arguments given after `id_arg_index` share an element instance
+ * The arguments are the same when the text and number values are the same and all other values have the same ref
+ */
+#define ELEMENT_BESPOKE (1 << 1)
+
// How multiple components of the exact same type are handled in the same datum
#define COMPONENT_DUPE_HIGHLANDER 0 //old component is deleted (default)
@@ -25,10 +36,12 @@
//////////////////////////////////////////////////////////////////
// /datum signals
-#define COMSIG_COMPONENT_ADDED "component_added" //when a component is added to a datum: (/datum/component)
-#define COMSIG_COMPONENT_REMOVING "component_removing" //before a component is removed from a datum because of RemoveComponent: (/datum/component)
+#define COMSIG_COMPONENT_ADDED "component_added" //sent to the new datum parent when a component is added to them: (/datum/component)
+#define COMSIG_COMPONENT_REMOVING "component_removing" //sent to the datum parent before a component is removed from them because of RemoveComponent: (/datum/component)
+#define COMSIG_COMPONENT_UNREGISTER_PARENT "component_unregister_parent" //sent to the component itself when unregistered from a parent
+#define COMSIG_COMPONENT_REGISTER_PARENT "component_register_parent" //sent to the component itself when registered to a parent
#define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" //before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
-#define COMSIG_PARENT_QDELETED "parent_qdeleted" //after a datum's Destroy() is called: (force, qdel_hint), at this point none of the other components chose to interrupt qdel and Destroy has been called
+#define COMSIG_PARENT_QDELETING "parent_qdeleting" //just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called
// /atom signals
#define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params)
@@ -70,13 +83,18 @@
#define COMSIG_ATOM_CANREACH "atom_can_reach" //from internal loop in atom/movable/proc/CanReach(): (list/next)
#define COMPONENT_BLOCK_REACH 1
#define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act" //from base of atom/screwdriver_act(): (mob/living/user, obj/item/I)
-#define COMSIG_ATOM_INTERCEPT_TELEPORT "intercept_teleport" //called when teleporting into a protected turf: (channel, turf/origin)
+#define COMSIG_ATOM_INTERCEPT_TELEPORT "intercept_teleport" //called when teleporting into a protected turf: (channel, turf/origin, turf/destination)
#define COMPONENT_BLOCK_TELEPORT 1
+#define COMSIG_ATOM_HEARER_IN_VIEW "atom_hearer_in_view" //called when an atom with HEAR_1 is added to the hearers on /proc/get_hearers_in_view(): (list/processing_list, list/hearers)
/////////////////
#define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost" //from base of atom/attack_ghost(): (mob/dead/observer/ghost)
#define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand" //from base of atom/attack_hand(): (mob/user)
#define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw" //from base of atom/attack_paw(): (mob/user)
#define COMPONENT_NO_ATTACK_HAND 1 //works on all 3.
+//This signal return value bitflags can be found in __DEFINES/misc.dm
+#define COMSIG_ATOM_INTERCEPT_Z_FALL "movable_intercept_z_impact" //called for each movable in a turf contents on /turf/zImpact(): (atom/movable/A, levels)
+
+
/////////////////
#define COMSIG_ENTER_AREA "enter_area" //from base of area/Entered(): (/area)
@@ -98,6 +116,7 @@
// /turf signals
#define COMSIG_TURF_CHANGE "turf_change" //from base of turf/ChangeTurf(): (path, list/new_baseturfs, flags, list/transferring_comps)
#define COMSIG_TURF_HAS_GRAVITY "turf_has_gravity" //from base of atom/has_gravity(): (atom/asker, list/forced_gravities)
+#define COMSIG_TURF_MULTIZ_NEW "turf_multiz_new" //from base of turf/New(): (turf/source, direction)
// /atom/movable signals
#define COMSIG_MOVABLE_MOVED "movable_moved" //from base of atom/movable/Moved(): (/atom, dir)
@@ -115,15 +134,30 @@
#define COMPONENT_CANCEL_THROW 1
#define COMSIG_MOVABLE_POST_THROW "movable_post_throw" //from base of atom/movable/throw_at(): (datum/thrownthing, spin)
#define COMSIG_MOVABLE_Z_CHANGED "movable_ztransit" //from base of atom/movable/onTransitZ(): (old_z, new_z)
-#define COMSIG_MOVABLE_HEAR "movable_hear" //from base of atom/movable/Hear(): (message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
+#define COMSIG_MOVABLE_SECLUDED_LOCATION "movable_secluded" //called when the movable is placed in an unaccessible area, used for stationloving: ()
+#define COMSIG_MOVABLE_HEAR "movable_hear" //from base of atom/movable/Hear(): (message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
+ #define HEARING_MESSAGE 1
+ #define HEARING_SPEAKER 2
+// #define HEARING_LANGUAGE 3
+ #define HEARING_RAW_MESSAGE 4
+ /* #define HEARING_RADIO_FREQ 5
+ #define HEARING_SPANS 6
+ #define HEARING_MESSAGE_MODE 7
+ #define HEARING_SOURCE 8*/
#define COMSIG_MOVABLE_DISPOSING "movable_disposing" //called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source)
+#define COMSIG_MOVABLE_TELEPORTED "movable_teleported" //from base of do_teleport(): (channel, turf/origin, turf/destination)
// /mind signals
-#define COMSIG_MIND_TRANSFER "mind_transfer" //from base of mind/transfer_to(): (new_character, old_character)
+#define COMSIG_PRE_MIND_TRANSFER "pre_mind_transfer" //from base of mind/transfer_to() before it's done: (new_character, old_character)
+ #define COMPONENT_STOP_MIND_TRANSFER 1 //stops the mind transfer from happening.
+#define COMSIG_MIND_TRANSFER "mind_transfer" //from base of mind/transfer_to() when it's done: (new_character, old_character)
// /mob signals
+#define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A)
+ #define COMPONENT_ALLOW_EXAMINE 1
#define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed)
-#define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize() (can_reenter_corpse)
+ #define COMPONENT_BLOCK_DEATH_BROADCAST 1 //stops the death from being broadcasted in deadchat.
+#define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse, special, penalize)
#define COMPONENT_BLOCK_GHOSTING 1
#define COMSIG_MOB_ALLOWED "mob_allowed" //from base of obj/allowed(mob/M): (/obj) returns bool, if TRUE the mob has id access to the obj
#define COMSIG_MOB_RECEIVE_MAGIC "mob_receive_magic" //from base of mob/anti_magic_check(): (mob/user, magic, holy, tinfoil, chargecost, self, protection_sources)
@@ -131,10 +165,13 @@
#define COMSIG_MOB_HUD_CREATED "mob_hud_created" //from base of mob/create_mob_hud(): ()
#define COMSIG_MOB_ATTACK_HAND "mob_attack_hand" //from base of
#define COMSIG_MOB_ITEM_ATTACK "mob_item_attack" //from base of /obj/item/attack(): (mob/M, mob/user)
+ #define COMPONENT_ITEM_NO_ATTACK 1
#define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters)
#define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" //from base of mob/RangedAttack(): (atom/A, params)
#define COMSIG_MOB_THROW "mob_throw" //from base of /mob/throw_item(): (atom/target)
-#define COMSIG_MOB_KEY_CHANGE "mob_key_change" //from base of /mob/transfer_ckey()
+#define COMSIG_MOB_KEY_CHANGE "mob_key_change" //from base of /mob/transfer_ckey(): (new_character, old_character)
+#define COMSIG_MOB_PRE_PLAYER_CHANGE "mob_pre_player_change" //sent to the target mob from base of /mob/transfer_ckey() and /mind/transfer_to(): (our_character, their_character)
+// #define COMPONENT_STOP_MIND_TRANSFER 1
#define COMSIG_MOB_UPDATE_SIGHT "mob_update_sight" //from base of /mob/update_sight(): ()
#define COMSIG_MOB_SAY "mob_say" // from /mob/living/say(): (proc args list)
#define COMPONENT_UPPERCASE_SPEECH 1
@@ -148,11 +185,14 @@
#define SPEECH_FORCED 7 */
// /mob/living signals
+#define COMSIG_LIVING_FULLY_HEAL "living_fully_healed" //from base of /mob/living/fully_heal(): (admin_revive)
+#define COMSIG_LIVING_REGENERATE_LIMBS "living_regenerate_limbs" //from base of /mob/living/regenerate_limbs(): (noheal, excluded_limbs)
#define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living)
#define COMSIG_LIVING_IGNITED "living_ignite" //from base of mob/living/IgniteMob() (/mob/living)
#define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living)
#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" //from base of mob/living/electrocute_act(): (shock_damage)
#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" //sent by stuff like stunbatons and tasers: ()
+#define COMSIG_LIVING_GUN_PROCESS_FIRE "living_gun_process_fire" //from base of /obj/item/gun/proc/process_fire(): (atom/target, params, zone_override)
// /mob/living/carbon signals
#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity))
@@ -293,3 +333,11 @@
//Ouch my toes!
#define CALTROP_BYPASS_SHOES 1
#define CALTROP_IGNORE_WALKERS 2
+
+//Xenobio hotkeys
+#define COMSIG_XENO_SLIME_CLICK_CTRL "xeno_slime_click_ctrl" //from slime CtrlClickOn(): (/mob)
+#define COMSIG_XENO_SLIME_CLICK_ALT "xeno_slime_click_alt" //from slime AltClickOn(): (/mob)
+#define COMSIG_XENO_SLIME_CLICK_SHIFT "xeno_slime_click_shift" //from slime ShiftClickOn(): (/mob)
+#define COMSIG_XENO_TURF_CLICK_SHIFT "xeno_turf_click_shift" //from turf ShiftClickOn(): (/mob)
+#define COMSIG_XENO_TURF_CLICK_CTRL "xeno_turf_click_alt" //from turf AltClickOn(): (/mob)
+#define COMSIG_XENO_MONKEY_CLICK_CTRL "xeno_monkey_click_ctrl" //from monkey CtrlClickOn(): (/mob)
diff --git a/code/__DEFINES/donator_groupings.dm b/code/__DEFINES/donator_groupings.dm
index 4b210609f2..855b9927f5 100644
--- a/code/__DEFINES/donator_groupings.dm
+++ b/code/__DEFINES/donator_groupings.dm
@@ -1,10 +1,10 @@
-#define DONATOR_GROUP_TIER_1_CONFIG_PATH /datum/config_entry/keyed_list/donator_group/tier_1_donators
-#define DONATOR_GROUP_TIER_2_CONFIG_PATH /datum/config_entry/keyed_list/donator_group/tier_2_donators
-#define DONATOR_GROUP_TIER_3_CONFIG_PATH /datum/config_entry/keyed_list/donator_group/tier_3_donators
+#define DONATOR_GROUP_TIER_1_CONFIG_PATH /datum/config_entry/multi_keyed_flag/donator_group/tier_1_donators
+#define DONATOR_GROUP_TIER_2_CONFIG_PATH /datum/config_entry/multi_keyed_flag/donator_group/tier_2_donators
+#define DONATOR_GROUP_TIER_3_CONFIG_PATH /datum/config_entry/multi_keyed_flag/donator_group/tier_3_donators
-#define DONATOR_GROUP_TIER_1_CONFIG_SUBPATH keyed_list/donator_group/tier_1_donators
-#define DONATOR_GROUP_TIER_2_CONFIG_SUBPATH keyed_list/donator_group/tier_2_donators
-#define DONATOR_GROUP_TIER_3_CONFIG_SUBPATH keyed_list/donator_group/tier_3_donators
+#define DONATOR_GROUP_TIER_1_CONFIG_SUBPATH multi_keyed_flag/donator_group/tier_1_donators
+#define DONATOR_GROUP_TIER_2_CONFIG_SUBPATH multi_keyed_flag/donator_group/tier_2_donators
+#define DONATOR_GROUP_TIER_3_CONFIG_SUBPATH multi_keyed_flag/donator_group/tier_3_donators
#define TIER_1_DONATORS CONFIG_GET(DONATOR_GROUP_TIER_1_CONFIG_SUBPATH)
#define TIER_2_DONATORS CONFIG_GET(DONATOR_GROUP_TIER_2_CONFIG_SUBPATH)
diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index 9e8a4f71c2..55962bf78c 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -32,6 +32,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define TESLA_IGNORE_1 (1<<13) // TESLA_IGNORE grants immunity from being targeted by tesla-style electricity
#define INITIALIZED_1 (1<<14) //Whether /atom/Initialize() has already run for the object
#define ADMIN_SPAWNED_1 (1<<15) //was this spawned by an admin? used for stat tracking stuff.
+#define PREVENT_CONTENTS_EXPLOSION_1 (1<<16) /// should not get harmed if this gets caught by an explosion?
//turf-only flags
#define NOJAUNT_1 (1<<0)
diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm
index 15c7af5749..72e6a12f84 100644
--- a/code/__DEFINES/food.dm
+++ b/code/__DEFINES/food.dm
@@ -11,6 +11,7 @@
#define GROSS (1<<10)
#define TOXIC (1<<11)
#define PINEAPPLE (1<<12)
+#define BREAKFAST (1<<13)
#define DRINK_NICE 1
#define DRINK_GOOD 2
diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm
index 632e4adef9..f5ea8d835f 100644
--- a/code/__DEFINES/inventory.dm
+++ b/code/__DEFINES/inventory.dm
@@ -4,9 +4,9 @@
#define WEIGHT_CLASS_TINY 1 //Usually items smaller then a human hand, ex: Playing Cards, Lighter, Scalpel, Coins/Money
#define WEIGHT_CLASS_SMALL 2 //Pockets can hold small and tiny items, ex: Flashlight, Multitool, Grenades, GPS Device
#define WEIGHT_CLASS_NORMAL 3 //Standard backpacks can carry tiny, small & normal items, ex: Fire extinguisher, Stunbaton, Gas Mask, Metal Sheets
-#define WEIGHT_CLASS_BULKY 4 //Items that can be weilded or equipped but not stored in an inventory, ex: Defibrillator, Backpack, Space Suits
-#define WEIGHT_CLASS_HUGE 5 //Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons
-#define WEIGHT_CLASS_GIGANTIC 6 //Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe
+#define WEIGHT_CLASS_BULKY 4 //Items that can be weilded or equipped but not stored in a normal bag, ex: Defibrillator, Backpack, Space Suits
+#define WEIGHT_CLASS_HUGE 5 //Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons - Can not fit in Boh
+#define WEIGHT_CLASS_GIGANTIC 6 //Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe - Can not fit in Boh
//Inventory depth: limits how many nested storage items you can access directly.
//1: stuff in mob, 2: stuff in backpack, 3: stuff in box in backpack, etc
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 70010eeffc..09ef814f68 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -9,6 +9,16 @@
//Turfs
//#define isturf(A) (istype(A, /turf)) This is actually a byond built-in. Added here for completeness sake.
+GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
+ /turf/open/space,
+ /turf/open/chasm,
+ /turf/open/lava,
+ /turf/open/water,
+ /turf/open/openspace
+ )))
+
+#define isgroundlessturf(A) (is_type_in_typecache(A, GLOB.turfs_without_ground))
+
#define isopenturf(A) (istype(A, /turf/open))
#define isindestructiblefloor(A) (istype(A, /turf/open/indestructible))
@@ -56,6 +66,7 @@
#define ishumanbasic(A) (is_species(A, /datum/species/human))
#define iscatperson(A) (ishumanbasic(A) && istype(A.dna.species, /datum/species/human/felinid) )
#define isdwarf(A) (is_species(A, /datum/species/dwarf))
+#define isdullahan(A) (is_species(A, /datum/species/dullahan))
// Citadel specific species
#define isipcperson(A) (is_species(A, /datum/species/ipc))
@@ -107,6 +118,8 @@
#define ismouse(A) (istype(A, /mob/living/simple_animal/mouse))
+#define iscow(A) (istype(A, /mob/living/simple_animal/cow))
+
#define isslime(A) (istype(A, /mob/living/simple_animal/slime))
#define isdrone(A) (istype(A, /mob/living/simple_animal/drone))
@@ -199,6 +212,8 @@ GLOBAL_LIST_INIT(heavyfootmob, typecacheof(list(
#define isitem(A) (istype(A, /obj/item))
+#define isidcard(I) (istype(I, /obj/item/card/id))
+
#define isstructure(A) (istype(A, /obj/structure))
#define ismachinery(A) (istype(A, /obj/machinery))
diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm
index 5e903997e4..e0a22667ac 100644
--- a/code/__DEFINES/layers.dm
+++ b/code/__DEFINES/layers.dm
@@ -9,6 +9,7 @@
#define FLOOR_PLANE -2
#define GAME_PLANE -1
#define BLACKNESS_PLANE 0 //To keep from conflicts with SEE_BLACKNESS internals
+
#define SPACE_LAYER 1.8
//#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define
#define MID_TURF_LAYER 2.02
@@ -83,25 +84,28 @@
#define ABOVE_LIGHTING_PLANE 16
#define ABOVE_LIGHTING_LAYER 16
-#define BYOND_LIGHTING_PLANE 17
-#define BYOND_LIGHTING_LAYER 17
+#define FLOOR_OPENSPACE_PLANE 17
+#define OPENSPACE_LAYER 17
-#define CAMERA_STATIC_PLANE 18
-#define CAMERA_STATIC_LAYER 18
+#define BYOND_LIGHTING_PLANE 18
+#define BYOND_LIGHTING_LAYER 18
+
+#define CAMERA_STATIC_PLANE 19
+#define CAMERA_STATIC_LAYER 19
//HUD layer defines
-#define FULLSCREEN_PLANE 19
-#define FLASH_LAYER 19
-#define FULLSCREEN_LAYER 19.1
-#define UI_DAMAGE_LAYER 19.2
-#define BLIND_LAYER 19.3
-#define CRIT_LAYER 19.4
-#define CURSE_LAYER 19.5
+#define FULLSCREEN_PLANE 20
+#define FLASH_LAYER 20
+#define FULLSCREEN_LAYER 20.1
+#define UI_DAMAGE_LAYER 20.2
+#define BLIND_LAYER 20.3
+#define CRIT_LAYER 20.4
+#define CURSE_LAYER 20.5
-#define HUD_PLANE 20
-#define HUD_LAYER 20
-#define ABOVE_HUD_PLANE 21
-#define ABOVE_HUD_LAYER 21
+#define HUD_PLANE 21
+#define HUD_LAYER 21
+#define ABOVE_HUD_PLANE 22
+#define ABOVE_HUD_LAYER 22
-#define SPLASHSCREEN_LAYER 22
-#define SPLASHSCREEN_PLANE 22
+#define SPLASHSCREEN_LAYER 23
+#define SPLASHSCREEN_PLANE 23
diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm
index 13dccc74fe..89c702e605 100644
--- a/code/__DEFINES/lighting.dm
+++ b/code/__DEFINES/lighting.dm
@@ -59,11 +59,13 @@
#define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow.
#define LIGHTING_PLANE_ALPHA_VISIBLE 255
-#define LIGHTING_PLANE_ALPHA_NV_TRAIT 250
+#define LIGHTING_PLANE_ALPHA_NV_TRAIT 223
#define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192
#define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell.
#define LIGHTING_PLANE_ALPHA_INVISIBLE 0
+#define NIGHT_VISION_DARKSIGHT_RANGE 3
+
//lighting area defines
#define DYNAMIC_LIGHTING_DISABLED 0 //dynamic lighting disabled (area stays at full brightness)
#define DYNAMIC_LIGHTING_ENABLED 1 //dynamic lighting enabled
@@ -80,4 +82,4 @@
#define FLASH_LIGHT_DURATION 2
#define FLASH_LIGHT_POWER 3
-#define FLASH_LIGHT_RANGE 3.8
\ No newline at end of file
+#define FLASH_LIGHT_RANGE 3.8
diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm
index d0d6269c1e..db13c21c44 100644
--- a/code/__DEFINES/machines.dm
+++ b/code/__DEFINES/machines.dm
@@ -30,7 +30,8 @@
#define LIMBGROWER (1<<6) //Uses synthetic flesh
#define SMELTER (1<<7) //uses various minerals
#define AUTOYLATHE (1<<8) // CITADEL ADD
-#define NANITE_COMPILER (1<<9) //Prints nanite disks
+#define NANITE_COMPILER (1<<9) //Prints nanite disks
+#define AUTOBOTTLER (1<<10) //Uses booze, for printing
//Note: More then one of these can be added to a design but imprinter and lathe designs are incompatable.
//Modular computer/NTNet defines
@@ -99,3 +100,8 @@
#define NUKE_OFF_UNLOCKED 1
#define NUKE_ON_TIMING 2
#define NUKE_ON_EXPLODING 3
+
+
+//these flags are used to tell the DNA modifier if a plant gene cannot be extracted or modified.
+#define PLANT_GENE_REMOVABLE (1<<0)
+#define PLANT_GENE_EXTRACTABLE (1<<1)
\ No newline at end of file
diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm
index 3c0921fa01..1b42217fe1 100644
--- a/code/__DEFINES/maps.dm
+++ b/code/__DEFINES/maps.dm
@@ -37,6 +37,7 @@ require only minor tweaks.
#define ZTRAIT_AWAY "Away Mission"
#define ZTRAIT_SPACE_RUINS "Space Ruins"
#define ZTRAIT_LAVA_RUINS "Lava Ruins"
+#define ZTRAIT_ISOLATED_RUINS "Isolated Ruins" //Placing ruins on z levels with this trait will use turf reservation instead of usual placement.
// prevents certain turfs from being stripped by a singularity
#define ZTRAIT_PLANET "Planet"
@@ -52,12 +53,12 @@ require only minor tweaks.
// enum - how space transitions should affect this level
#define ZTRAIT_LINKAGE "Linkage"
- // UNAFFECTED if absent - no space transitions
- #define UNAFFECTED null
- // SELFLOOPING - space transitions always self-loop
- #define SELFLOOPING "Self"
- // CROSSLINKED - mixed in with the cross-linked space pool
- #define CROSSLINKED "Cross"
+ // UNAFFECTED if absent - no space transitions
+ #define UNAFFECTED null
+ // SELFLOOPING - space transitions always self-loop
+ #define SELFLOOPING "Self"
+ // CROSSLINKED - mixed in with the cross-linked space pool
+ #define CROSSLINKED "Cross"
// default trait definitions, used by SSmapping
#define ZTRAITS_CENTCOM list(ZTRAIT_CENTCOM = TRUE)
@@ -72,7 +73,7 @@ require only minor tweaks.
// must correspond to _basemap.dm for things to work correctly
#define DEFAULT_MAP_TRAITS list(\
- DECLARE_LEVEL("CentCom", ZTRAITS_CENTCOM),\
+ DECLARE_LEVEL("CentCom", ZTRAITS_CENTCOM),\
)
// Camera lock flags
@@ -89,10 +90,10 @@ require only minor tweaks.
#define PLACEMENT_TRIES 100 //How many times we try to fit the ruin somewhere until giving up (really should just swap to some packing algo)
#define PLACE_DEFAULT "random"
-#define PLACE_SAME_Z "same"
-#define PLACE_SPACE_RUIN "space"
-#define PLACE_LAVA_RUIN "lavaland"
-
-
+#define PLACE_SAME_Z "same" //On same z level as original ruin
+#define PLACE_SPACE_RUIN "space" //On space ruin z level(s)
+#define PLACE_LAVA_RUIN "lavaland" //On lavaland ruin z levels(s)
+#define PLACE_BELOW "below" //On z levl below - centered on same tile
+#define PLACE_ISOLATED "isolated" //On isolated ruin z level
//Map type stuff.
-#define MAP_TYPE_STATION "station"
+#define MAP_TYPE_STATION "station"
\ No newline at end of file
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 4b76f41c61..29ff0a8fae 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -203,11 +203,12 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache)
#define LOCKED_SENSORS 2
//Wet floor type flags. Stronger ones should be higher in number.
-#define TURF_DRY 0
-#define TURF_WET_WATER 1
-#define TURF_WET_PERMAFROST 2
-#define TURF_WET_ICE 4
-#define TURF_WET_LUBE 8
+#define TURF_DRY (0)
+#define TURF_WET_WATER (1<<0)
+#define TURF_WET_PERMAFROST (1<<1)
+#define TURF_WET_ICE (1<<2)
+#define TURF_WET_LUBE (1<<3)
+#define TURF_WET_SUPERLUBE (1<<4)
#define IS_WET_OPEN_TURF(O) O.GetComponent(/datum/component/wet_floor)
@@ -281,9 +282,11 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE))
#define PDA_SKIN_ALT "Holographic"
#define PDA_SKIN_RUGGED "Rugged"
#define PDA_SKIN_MODERN "Modern"
+#define PDA_SKIN_MINIMAL "Minimal"
GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_SKIN_ALT = 'icons/obj/pda_alt.dmi',
- PDA_SKIN_RUGGED = 'icons/obj/pda_rugged.dmi', PDA_SKIN_MODERN = 'icons/obj/pda_modern.dmi'))
+ PDA_SKIN_RUGGED = 'icons/obj/pda_rugged.dmi', PDA_SKIN_MODERN = 'icons/obj/pda_modern.dmi',
+ PDA_SKIN_MINIMAL = 'icons/obj/pda_minimal.dmi'))
/////////////////////////////////////
// atom.appearence_flags shortcuts //
@@ -506,10 +509,22 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
#define AREASELECT_CORNERA "corner A"
#define AREASELECT_CORNERB "corner B"
+#define VARSET_FROM_LIST(L, V) if(L && L[#V]) V = L[#V]
+#define VARSET_FROM_LIST_IF(L, V, C...) if(L && L[#V] && (C)) V = L[#V]
+#define VARSET_TO_LIST(L, V) if(L) L[#V] = V
+#define VARSET_TO_LIST_IF(L, V, C...) if(L && (C)) L[#V] = V
+
#define PREF_SAVELOAD_COOLDOWN 5
#define VOMIT_TOXIC 1
#define VOMIT_PURPLE 2
+// possible bitflag return values of intercept_zImpact(atom/movable/AM, levels = 1) calls
+#define FALL_INTERCEPTED (1<<0) //Stops the movable from falling further and crashing on the ground
+#define FALL_NO_MESSAGE (1<<1) //Used to suppress the "[A] falls through [old_turf]" messages where it'd make little sense at all, like going downstairs.
+#define FALL_STOP_INTERCEPTING (1<<2) //Used in situations where halting the whole "intercept" loop would be better, like supermatter dusting (and thus deleting) the atom.
+
//Misc text define. Does 4 spaces. Used as a makeshift tabulator.
#define FOURSPACES " "
+
+#define CRYOMOBS 'icons/obj/cryo_mobs.dmi'
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index 5bd0ee5b3b..8d2913629a 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -201,6 +201,8 @@
#define SLIDE (1<<1)
#define GALOSHES_DONT_HELP (1<<2)
#define SLIDE_ICE (1<<3)
+#define SLIP_WHEN_CRAWLING (1<<4) //clown planet ruin
+#define SLIP_WHEN_JOGGING (1<<5) //slips prevented by walking are also dodged if the mob is not sprinting or fatigued... unless this flag is on.
#define MAX_CHICKENS 50
diff --git a/code/__DEFINES/movespeed_modification.dm b/code/__DEFINES/movespeed_modification.dm
index 50e1a10fa1..1883df6e8e 100644
--- a/code/__DEFINES/movespeed_modification.dm
+++ b/code/__DEFINES/movespeed_modification.dm
@@ -57,6 +57,7 @@
#define MOVESPEED_ID_PRONE_DRAGGING "PRONE_DRAG"
#define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY"
+#define MOVESPEED_ID_SHRINK_RAY "SHRUNKEN_SPEED_MODIFIER"
#define MOVESPEED_ID_TASED_STATUS "TASED"
diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm
index 1885dd2621..94c2c372f0 100644
--- a/code/__DEFINES/obj_flags.dm
+++ b/code/__DEFINES/obj_flags.dm
@@ -11,6 +11,7 @@
#define USES_TGUI (1<<7) //put on things that use tgui on ui_interact instead of custom/old UI.
#define FROZEN (1<<8)
#define SHOVABLE_ONTO (1<<9) //called on turf.shove_act() to consider whether an object should have a niche effect (defined in their own shove_act()) when someone is pushed onto it, or do a sanity CanPass() check.
+#define BLOCK_Z_FALL (1<<10)
// If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support
@@ -24,23 +25,22 @@
#define NO_MAT_REDEMPTION (1<<5) //Stops you from putting things like an RCD or other items into an ORM or protolathe for materials.
#define DROPDEL (1<<6) //When dropped, it calls qdel on itself
#define NOBLUDGEON (1<<7) //when an item has this it produces no "X has been hit by Y with Z" message in the default attackby()
-#define ABSTRACT (1<<8) //for all things that are technically items but used for various different stuff
+#define ABSTRACT (1<<8) //for all things that are technically items but used for various different stuff
#define IMMUTABLE_SLOW (1<<9) //When players should not be able to change the slowdown of the item (Speed potions, ect)
#define SURGICAL_TOOL (1<<10) //Tool commonly used for surgery: won't attack targets in an active surgical operation on help intent (in case of mistakes)
-#define NO_UNIFORM_REQUIRED (1<<11) //Can be worn on certain slots (currently belt and id) that would otherwise require an uniform.
+#define NO_UNIFORM_REQUIRED (1<<11) //Can be worn on certain slots (currently belt and id) that would otherwise require an uniform.
// Flags for the clothing_flags var on /obj/item/clothing
#define LAVAPROTECT (1<<0)
#define STOPSPRESSUREDAMAGE (1<<1) //SUIT and HEAD items which stop pressure damage. To stop you taking all pressure damage you must have both a suit and head item with this flag.
#define BLOCK_GAS_SMOKE_EFFECT (1<<2) //blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY!
-#define ALLOWINTERNALS (1<<3) //mask allows internals
+#define ALLOWINTERNALS (1<<3) //mask allows internals
#define NOSLIP (1<<4) //prevents from slipping on wet floors, in space etc
#define THICKMATERIAL (1<<5) //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body.
#define VOICEBOX_TOGGLABLE (1<<6) //The voicebox in this clothing can be toggled.
#define VOICEBOX_DISABLED (1<<7) //The voicebox is currently turned off.
-#define SNUG_FIT (1<<8) //Prevents knock-off from things like hat-throwing.
-#define ANTI_TINFOIL_MANEUVER (1<<9) //Hats with negative effects when worn (i.e the tinfoil hat).
+#define IGNORE_HAT_TOSS (1<<8) //Hats with negative effects when worn (i.e the tinfoil hat).
// Flags for the organ_flags var on /obj/item/organ
@@ -49,4 +49,4 @@
#define ORGAN_FAILING (1<<2) //Failing organs perform damaging effects until replaced or fixed
#define ORGAN_EXTERNAL (1<<3) //Was this organ implanted/inserted/etc, if true will not be removed during species change.
#define ORGAN_VITAL (1<<4) //Currently only the brain
-#define ORGAN_NO_SPOIL (1<<5) //Do not spoil under any circumstances
\ No newline at end of file
+#define ORGAN_NO_SPOIL (1<<5) //Do not spoil under any circumstances
diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm
index 0992b2e586..7a284ff1a0 100644
--- a/code/__DEFINES/preferences.dm
+++ b/code/__DEFINES/preferences.dm
@@ -75,3 +75,10 @@
#define JP_LOW 1
#define JP_MEDIUM 2
#define JP_HIGH 3
+
+//Chaos levels for dynamic voting
+#define CHAOS_NONE "None (Extended)"
+#define CHAOS_LOW "Low"
+#define CHAOS_MED "Medium"
+#define CHAOS_HIGH "High"
+#define CHAOS_MAX "Maximum"
diff --git a/code/__DEFINES/procpath.dm b/code/__DEFINES/procpath.dm
new file mode 100644
index 0000000000..1180058358
--- /dev/null
+++ b/code/__DEFINES/procpath.dm
@@ -0,0 +1,24 @@
+/// Represents a proc or verb path.
+///
+/// Despite having no DM-defined static type, proc paths have some variables,
+/// listed below. These are not modifiable, but for a given procpath P,
+/// `new P(null, "Name", "Desc")` can be used to create a new procpath with the
+/// same code but new `name` and `desc` values. The other variables cannot be
+/// changed in this way.
+///
+/// This type exists only to act as an annotation, providing reasonable static
+/// typing for procpaths. Previously, types like `/atom/verb` were used, with
+/// the `name` and `desc` vars of `/atom` thus being accessible. Proc and verb
+/// paths will fail `istype` and `ispath` checks against `/procpath`.
+/procpath
+ // Although these variables are effectively const, if they are marked const
+ // below, their accesses are optimized away.
+
+ /// A text string of the verb's name.
+ var/name as text
+ /// The verb's help text or description.
+ var/desc as text
+ /// The category or tab the verb will appear in.
+ var/category as text
+ /// Only clients/mobs with `see_invisibility` higher can use the verb.
+ var/invisibility as num
diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm
index b316c003a9..d5e3f828b8 100644
--- a/code/__DEFINES/role_preferences.dm
+++ b/code/__DEFINES/role_preferences.dm
@@ -35,6 +35,8 @@
#define ROLE_LAVALAND "lavaland"
#define ROLE_INTERNAL_AFFAIRS "internal affairs agent"
#define ROLE_GANG "gangster"
+#define ROLE_BLOODSUCKER "bloodsucker"
+//#define ROLE_MONSTERHUNTER "monster hunter" Disabled for now
//Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR.
//The gamemode specific ones are just so the gamemodes can query whether a player is old enough
@@ -60,7 +62,9 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_OVERTHROW = /datum/game_mode/overthrow,
ROLE_INTERNAL_AFFAIRS = /datum/game_mode/traitor/internal_affairs,
ROLE_SENTIENCE,
- ROLE_GANG = /datum/game_mode/gang
+ ROLE_GANG = /datum/game_mode/gang,
+ ROLE_BLOODSUCKER = /datum/game_mode/bloodsucker
+ //ROLE_MONSTERHUNTER Disabled for now
))
//Job defines for what happens when you fail to qualify for any job during job selection
diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm
index af06a5a2d0..beeee22df9 100644
--- a/code/__DEFINES/say.dm
+++ b/code/__DEFINES/say.dm
@@ -75,8 +75,16 @@
#define LINGHIVE_LING 2
#define LINGHIVE_LINK 3
+//whether the emote is visible or audible.
+#define EMOTE_VISIBLE 1
+#define EMOTE_AUDIBLE 2
+
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
#define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen?
#define MAX_NAME_LEN 42
#define MAX_BROADCAST_LEN 512
#define MAX_CHARTER_LEN 80
+
+// Audio/Visual Flags. Used to determine what sense are required to notice a message.
+#define MSG_VISUAL (1<<0)
+#define MSG_AUDIBLE (1<<1)
\ No newline at end of file
diff --git a/code/__DEFINES/spaceman_dmm.dm b/code/__DEFINES/spaceman_dmm.dm
new file mode 100644
index 0000000000..e590a30ff9
--- /dev/null
+++ b/code/__DEFINES/spaceman_dmm.dm
@@ -0,0 +1,13 @@
+// Interfaces for the SpacemanDMM linter, define'd to nothing when the linter
+// is not in use.
+
+// The SPACEMAN_DMM define is set by the linter and other tooling when it runs.
+#ifdef SPACEMAN_DMM
+ #define RETURN_TYPE(X) set SpacemanDMM_return_type = X
+ #define SHOULD_CALL_PARENT(X) set SpacemanDMM_should_call_parent = X
+ #define UNLINT(X) SpacemanDMM_unlint(X)
+#else
+ #define RETURN_TYPE(X)
+ #define SHOULD_CALL_PARENT(X)
+ #define UNLINT(X) X
+#endif
diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm
index ff19976cff..6d52f4640c 100644
--- a/code/__DEFINES/status_effects.dm
+++ b/code/__DEFINES/status_effects.dm
@@ -7,6 +7,8 @@
#define STATUS_EFFECT_REPLACE 2 //if it allows only one, but new instances replace
+#define STATUS_EFFECT_REFRESH 3 // if it only allows one, and new instances just instead refresh the timer
+
///////////
// BUFFS //
///////////
@@ -44,7 +46,7 @@
#define STATUS_EFFECT_SLEEPING /datum/status_effect/incapacitating/sleeping //the affected is asleep
-#define STATUS_EFFECT_TASED /datum/status_effect/electrode //the affected has been tased, preventing fine muscle control
+#define STATUS_EFFECT_TASED /datum/status_effect/no_combat_mode/electrode/ //the affected has been tased, preventing fine muscle control
#define STATUS_EFFECT_PACIFY /datum/status_effect/pacify //the affected is pacified, preventing direct hostile actions
@@ -56,6 +58,8 @@
#define MAX_MANIA_SEVERITY 100 //how high the mania severity can go
#define MANIA_DAMAGE_TO_CONVERT 90 //how much damage is required before it'll convert affected targets
+#define STATUS_EFFECT_CHOKINGSTRAND /datum/status_effect/strandling //Choking Strand
+
#define STATUS_EFFECT_HISWRATH /datum/status_effect/his_wrath //His Wrath.
#define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes
@@ -64,6 +68,8 @@
#define STATUS_EFFECT_SAWBLEED /datum/status_effect/saw_bleed //if the bleed builds up enough, takes a ton of damage
+#define STATUS_EFFECT_NECKSLICE /datum/status_effect/neck_slice //Creates the flavor messages for the neck-slice
+
#define STATUS_EFFECT_NECROPOLIS_CURSE /datum/status_effect/necropolis_curse
#define CURSE_BLINDING 1 //makes the edges of the target's screen obscured
#define CURSE_SPAWNING 2 //spawns creatures that attack the target only
@@ -74,9 +80,14 @@
#define STATUS_EFFECT_ICHORIAL_STAIN /datum/status_effect/ichorial_stain //Prevents a servant from being revived by vitality matrices for one minute.
+#define STATUS_EFFECT_SPASMS /datum/status_effect/spasms //causes random muscle spasms
+
#define STATUS_EFFECT_BREASTS_ENLARGEMENT /datum/status_effect/chem/breast_enlarger //Applied slowdown due to the ominous bulk.
#define STATUS_EFFECT_PENIS_ENLARGEMENT /datum/status_effect/chem/penis_enlarger //More applied slowdown, just like the above.
+
+#define STATUS_EFFECT_NO_COMBAT_MODE /datum/status_effect/no_combat_mode //Wont allow combat mode and will disable it
+#define STATUS_EFFECT_MESMERIZE /datum/status_effect/no_combat_mode/mesmerize //Just reskinned no_combat_mode
/////////////
// NEUTRAL //
/////////////
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index 2fd929a07d..c194e578c9 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -26,10 +26,6 @@
#define TIMER_ID_NULL -1
-//For servers that can't do with any additional lag, set this to none in flightpacks.dm in subsystem/processing.
-#define FLIGHTSUIT_PROCESSING_NONE 0
-#define FLIGHTSUIT_PROCESSING_FULL 1
-
#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize
#define INITIALIZATION_INNEW_MAPLOAD 2 //New should call Initialize(TRUE)
#define INITIALIZATION_INNEW_REGULAR 1 //New should call Initialize(FALSE)
@@ -40,11 +36,11 @@
//type and all subtypes should always call Initialize in New()
#define INITIALIZE_IMMEDIATE(X) ##X/New(loc, ...){\
- ..();\
- if(!(flags_1 & INITIALIZED_1)) {\
- args[1] = TRUE;\
- SSatoms.InitAtom(src, args);\
- }\
+ ..();\
+ if(!(flags_1 & INITIALIZED_1)) {\
+ args[1] = TRUE;\
+ SSatoms.InitAtom(src, args);\
+ }\
}
// Subsystem init_order, from highest priority to lowest priority
@@ -112,10 +108,10 @@
#define FIRE_PRIORITY_DEFAULT 50
#define FIRE_PRIORITY_PARALLAX 65
#define FIRE_PRIORITY_NPC 80
-#define FIRE_PRIORITY_FLIGHTPACKS 80
#define FIRE_PRIORITY_MOBS 100
#define FIRE_PRIORITY_TGUI 110
#define FIRE_PRIORITY_TICKER 200
+#define FIRE_PRIORITY_ATMOS_ADJACENCY 300
#define FIRE_PRIORITY_CHAT 400
#define FIRE_PRIORITY_OVERLAYS 500
#define FIRE_PRIORITY_INPUT 1000 // This must always always be the max highest priority. Player input must never be lost.
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 1f37556d1d..428d569531 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -66,6 +66,7 @@
#define TRAIT_HUSK "husk"
#define TRAIT_NOCLONE "noclone"
#define TRAIT_CLUMSY "clumsy"
+#define TRAIT_CHUNKYFINGERS "chunkyfingers" //means that you can't use weapons with normal trigger guards.
#define TRAIT_DUMB "dumb"
#define TRAIT_MONKEYLIKE "monkeylike" //sets IsAdvancedToolUser to FALSE
#define TRAIT_PACIFISM "pacifism"
@@ -109,6 +110,7 @@
#define TRAIT_NOHARDCRIT "nohardcrit"
#define TRAIT_NOSOFTCRIT "nosoftcrit"
#define TRAIT_MINDSHIELD "mindshield"
+#define TRAIT_SIXTHSENSE "sixthsense"
#define TRAIT_DISSECTED "dissected"
#define TRAIT_FEARLESS "fearless"
#define TRAIT_UNSTABLE "unstable"
@@ -116,14 +118,23 @@
#define TRAIT_PARALYSIS_R_ARM "para-r-arm"
#define TRAIT_PARALYSIS_L_LEG "para-l-leg"
#define TRAIT_PARALYSIS_R_LEG "para-r-leg"
+#define TRAIT_DISK_VERIFIER "disk-verifier"
#define TRAIT_UNINTELLIGIBLE_SPEECH "unintelligible-speech"
+#define TRAIT_SOOTHED_THROAT "soothed-throat"
#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism"
-#define TRAIT_STRONG_GRABBER "strong_grabber"
-#define TRAIT_CALCIUM_HEALER "calcium_healer"
+#define TRAIT_STRONG_GRABBER "strong_grabber"
+#define TRAIT_CALCIUM_HEALER "calcium_healer"
+#define TRAIT_MAGIC_CHOKE "magic_choke"
#define TRAIT_CAPTAIN_METABOLISM "captain-metabolism"
#define TRAIT_ABDUCTOR_TRAINING "abductor-training"
#define TRAIT_ABDUCTOR_SCIENTIST_TRAINING "abductor-scientist-training"
#define TRAIT_SURGEON "surgeon"
+#define TRAIT_COLDBLOODED "coldblooded" // Your body is literal room temperature. Does not make you immune to the temp.
+#define TRAIT_NONATURALHEAL "nonaturalheal" // Only Admins can heal you. NOTHING else does it unless it's given the god tag.
+#define TRAIT_NORUNNING "norunning" // You walk!
+#define TRAIT_NOMARROW "nomarrow" // You don't make blood, with chemicals or nanites.
+#define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat.
+
//non-mob traits
#define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it
@@ -160,6 +171,7 @@
#define TRAIT_FRIENDLY "friendly"
#define TRAIT_ASSBLASTUSA "assblastusa"
#define TRAIT_CULT_EYES "cult_eyes"
+#define TRAIT_FREESPRINT "free_sprinting"
// common trait sources
@@ -179,6 +191,7 @@
#define CULT_TRAIT "cult"
#define CURSED_ITEM_TRAIT "cursed-item" // The item is magically cursed
#define ABSTRACT_ITEM_TRAIT "abstract-item"
+#define STATUS_EFFECT_TRAIT "status-effect"
#define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention
// unique trait sources, still defines
@@ -192,7 +205,6 @@
#define STASIS_MUTE "stasis"
#define GENETICS_SPELL "genetics_spell"
#define EYES_COVERED "eyes_covered"
-#define CULT_TRAIT "cult"
#define CLOWN_NUKE_TRAIT "clown-nuke"
#define STICKY_MOUSTACHE_TRAIT "sticky-moustache"
#define CHAINSAW_FRENZY_TRAIT "chainsaw-frenzy"
@@ -213,4 +225,8 @@
#define LOCKED_HELMET_TRAIT "locked-helmet"
#define NINJA_SUIT_TRAIT "ninja-suit"
#define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant"
-#define ABDUCTOR_ANTAGONIST "abductor-antagonist"
\ No newline at end of file
+#define SLEEPING_CARP_TRAIT "sleeping_carp"
+#define ABDUCTOR_ANTAGONIST "abductor-antagonist"
+#define MADE_UNCLONEABLE "made-uncloneable"
+#define NUKEOP_TRAIT "nuke-op"
+#define DEATHSQUAD_TRAIT "deathsquad"
diff --git a/code/__DEFINES/turf_flags.dm b/code/__DEFINES/turf_flags.dm
index 5ceb6f2e2e..8604a92c01 100644
--- a/code/__DEFINES/turf_flags.dm
+++ b/code/__DEFINES/turf_flags.dm
@@ -3,3 +3,4 @@
#define CHANGETURF_FORCEOP 4
#define CHANGETURF_SKIP 8 // A flag for PlaceOnTop to just instance the new turf instead of calling ChangeTurf. Used for uninitialized turfs NOTHING ELSE
#define CHANGETURF_INHERIT_AIR 16 // Inherit air from previous turf. Implies CHANGETURF_IGNORE_AIR
+#define CHANGETURF_RECALC_ADJACENT 32 //Immediately recalc adjacent atmos turfs instead of queuing.
\ No newline at end of file
diff --git a/code/__DEFINES/typeids.dm b/code/__DEFINES/typeids.dm
index ae5df258b4..8bfe6216e2 100644
--- a/code/__DEFINES/typeids.dm
+++ b/code/__DEFINES/typeids.dm
@@ -2,7 +2,7 @@
#define TYPEID_NULL "0"
#define TYPEID_NORMAL_LIST "f"
//helper macros
-#define GET_TYPEID(ref) ( ( (lentext(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, lentext(ref)-6) ) )
+#define GET_TYPEID(ref) ( ( (length(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, length(ref)-6) ) )
#define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST)
diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm
index 917615d095..3b8b3765ef 100644
--- a/code/__HELPERS/_lists.dm
+++ b/code/__HELPERS/_lists.dm
@@ -124,6 +124,7 @@
//returns a new list with only atoms that are in typecache L
/proc/typecache_filter_list(list/atoms, list/typecache)
+ RETURN_TYPE(/list)
. = list()
for(var/thing in atoms)
var/atom/A = thing
@@ -131,6 +132,7 @@
. += A
/proc/typecache_filter_list_reverse(list/atoms, list/typecache)
+ RETURN_TYPE(/list)
. = list()
for(var/thing in atoms)
var/atom/A = thing
@@ -257,6 +259,7 @@
//Pick a random element from the list and remove it from the list.
/proc/pick_n_take(list/L)
+ RETURN_TYPE(L[_].type)
if(L.len)
var/picked = rand(1,L.len)
. = L[picked]
@@ -570,4 +573,10 @@
if(key in L1)
L1[key] += other_value
else
- L1[key] = other_value
\ No newline at end of file
+ L1[key] = other_value
+
+/proc/assoc_list_strip_value(list/input)
+ var/list/ret = list()
+ for(var/key in input)
+ ret += key
+ return ret
\ No newline at end of file
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index c19a7a64b0..c259831f94 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -7,7 +7,7 @@
#define WRITE_LOG(log, text) rustg_log_write(log, text)
//print a warning message to world.log
-#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].")
+#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [UNLINT(src)] usr: [usr].")
/proc/warning(msg)
msg = "## WARNING: [msg]"
log_world(msg)
diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm
index 37f36a7e0d..4a86f57fcd 100644
--- a/code/__HELPERS/cmp.dm
+++ b/code/__HELPERS/cmp.dm
@@ -23,6 +23,9 @@ GLOBAL_VAR_INIT(cmp_field, "name")
/proc/cmp_records_dsc(datum/data/record/a, datum/data/record/b)
return sorttext(a.fields[GLOB.cmp_field], b.fields[GLOB.cmp_field])
+/proc/cmp_filter_data_priority(list/A, list/B)
+ return A["priority"] - B["priority"]
+
/proc/cmp_ckey_asc(client/a, client/b)
return sorttext(b.ckey, a.ckey)
@@ -84,3 +87,30 @@ GLOBAL_VAR_INIT(cmp_field, "name")
/proc/cmp_job_display_asc(datum/job/A, datum/job/B)
return A.display_order - B.display_order
+
+/proc/cmp_uplink_items_dsc(datum/uplink_item/A, datum/uplink_item/B)
+ return sorttext(initial(B.name), initial(A.name))
+
+/proc/cmp_numbered_displays_name_asc(datum/numbered_display/A, datum/numbered_display/B)
+ return sorttext(A.sample_object.name, B.sample_object.name)
+
+/proc/cmp_numbered_displays_name_dsc(datum/numbered_display/A, datum/numbered_display/B)
+ return sorttext(B.sample_object.name, A.sample_object.name)
+
+/proc/cmp_quirk_asc(datum/quirk/A, datum/quirk/B)
+ var/a_sign = num2sign(initial(A.value) * -1)
+ var/b_sign = num2sign(initial(B.value) * -1)
+
+ // Neutral traits go last.
+ if(a_sign == 0)
+ a_sign = 2
+ if(b_sign == 0)
+ b_sign = 2
+
+ var/a_name = initial(A.name)
+ var/b_name = initial(B.name)
+
+ if(a_sign != b_sign)
+ return a_sign - b_sign
+ else
+ return sorttext(b_name, a_name)
\ No newline at end of file
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 19d0755085..d76fc7731a 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -1,9 +1,9 @@
//supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a
#define RANGE_TURFS(RADIUS, CENTER) \
- block( \
- locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \
- locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \
- )
+ block( \
+ locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \
+ locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \
+ )
#define Z_TURFS(ZLEVEL) block(locate(1,1,ZLEVEL), locate(world.maxx, world.maxy, ZLEVEL))
#define CULT_POLL_WAIT 2400
@@ -264,6 +264,7 @@
var/atom/A = processing_list[1]
if(A.flags_1 & HEAR_1)
. += A
+ SEND_SIGNAL(A, COMSIG_ATOM_HEARER_IN_VIEW, processing_list, .)
processing_list.Cut(1, 2)
processing_list += A.contents
@@ -446,7 +447,7 @@
var/list/candidates = list()
for(var/mob/dead/observer/G in GLOB.player_list)
- if(G.can_reenter_round)
+ if(G.reenter_round_timeout < world.realtime)
candidates += G
return pollCandidates(Question, jobbanType, gametypeCheck, be_special_flag, poll_time, ignore_category, flashwindow, candidates)
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index 7852251230..a7bf5da17f 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -97,6 +97,16 @@
var/datum/emote/E = new path()
E.emote_list[E.key] = E
+ //Uplink Items
+ for(var/path in subtypesof(/datum/uplink_item))
+ var/datum/uplink_item/I = path
+ if(!initial(I.item)) //We add categories to a separate list.
+ GLOB.uplink_categories |= initial(I.category)
+ continue
+ GLOB.uplink_items += path
+ //(sub)typesof entries are listed by the order they are loaded in the code, so we'll have to rearrange them here.
+ GLOB.uplink_items = sortList(GLOB.uplink_items, /proc/cmp_uplink_items_dsc)
+
init_subtypes(/datum/crafting_recipe, GLOB.crafting_recipes)
//creates every subtype of prototype (excluding prototype) and adds it to list L.
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 8e7938a312..0d6345dae2 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -522,12 +522,14 @@ GLOBAL_LIST_EMPTY(species_list)
else
prefs = new
- var/adminoverride = 0
+ var/override = FALSE
if(M.client && M.client.holder && (prefs.chat_toggles & CHAT_DEAD))
- adminoverride = 1
- if(isnewplayer(M) && !adminoverride)
+ override = TRUE
+ if(HAS_TRAIT(M, TRAIT_SIXTHSENSE))
+ override = TRUE
+ if(isnewplayer(M) && !override)
continue
- if(M.stat != DEAD && !adminoverride)
+ if(M.stat != DEAD && !override)
continue
if(speaker_key && speaker_key in prefs.ignoring)
continue
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index 8e59106d98..27f1a81fef 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -314,7 +314,14 @@
parts += "[FOURSPACES]Threat left: [mode.threat]"
parts += "[FOURSPACES]Executed rules:"
for(var/datum/dynamic_ruleset/rule in mode.executed_rules)
- parts += "[FOURSPACES][FOURSPACES][rule.ruletype] - [rule.name]: -[rule.cost] threat"
+ parts += "[FOURSPACES][FOURSPACES][rule.ruletype] - [rule.name]: -[rule.cost + rule.scaled_times * rule.scaling_cost] threat"
+ parts += "[FOURSPACES]Other threat changes:"
+ for(var/str in mode.threat_log)
+ parts += "[FOURSPACES][FOURSPACES][str]"
+ for(var/entry in mode.threat_tallies)
+ parts += "[FOURSPACES][FOURSPACES][entry] added [mode.threat_tallies[entry]]"
+ SSblackbox.record_feedback("tally","dynamic_threat",mode.threat_level,"Final threat level")
+ SSblackbox.record_feedback("tally","dynamic_threat",mode.threat,"Threat left")
return parts.Join("
")
/client/proc/roundend_report_file()
@@ -534,10 +541,12 @@
return parts.Join()
-/proc/printobjectives(datum/mind/ply)
+/proc/printobjectives(list/objectives)
+ if(!objectives || !objectives.len)
+ return
var/list/objective_parts = list()
var/count = 1
- for(var/datum/objective/objective in ply.objectives)
+ for(var/datum/objective/objective in objectives)
if(objective.check_completion())
objective_parts += "Objective #[count]: [objective.explanation_text] Success!"
else
diff --git a/code/__HELPERS/sorts/__main.dm b/code/__HELPERS/sorts/__main.dm
index 768622818f..493f7b2096 100644
--- a/code/__HELPERS/sorts/__main.dm
+++ b/code/__HELPERS/sorts/__main.dm
@@ -31,58 +31,58 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new())
var/list/runLens = list()
- proc/timSort(start, end)
- runBases.Cut()
- runLens.Cut()
+/datum/sortInstance/proc/timSort(start, end)
+ runBases.Cut()
+ runLens.Cut()
- var/remaining = end - start
+ var/remaining = end - start
- //If array is small, do a 'mini-TimSort' with no merges
- if(remaining < MIN_MERGE)
- var/initRunLen = countRunAndMakeAscending(start, end)
- binarySort(start, end, start+initRunLen)
- return
+ //If array is small, do a 'mini-TimSort' with no merges
+ if(remaining < MIN_MERGE)
+ var/initRunLen = countRunAndMakeAscending(start, end)
+ binarySort(start, end, start+initRunLen)
+ return
- //March over the array finding natural runs
- //Extend any short natural runs to runs of length minRun
- var/minRun = minRunLength(remaining)
+ //March over the array finding natural runs
+ //Extend any short natural runs to runs of length minRun
+ var/minRun = minRunLength(remaining)
- do
- //identify next run
- var/runLen = countRunAndMakeAscending(start, end)
+ do
+ //identify next run
+ var/runLen = countRunAndMakeAscending(start, end)
- //if run is short, extend to min(minRun, remaining)
- if(runLen < minRun)
- var/force = (remaining <= minRun) ? remaining : minRun
+ //if run is short, extend to min(minRun, remaining)
+ if(runLen < minRun)
+ var/force = (remaining <= minRun) ? remaining : minRun
- binarySort(start, start+force, start+runLen)
- runLen = force
+ binarySort(start, start+force, start+runLen)
+ runLen = force
- //add data about run to queue
- runBases.Add(start)
- runLens.Add(runLen)
+ //add data about run to queue
+ runBases.Add(start)
+ runLens.Add(runLen)
- //maybe merge
- mergeCollapse()
+ //maybe merge
+ mergeCollapse()
- //Advance to find next run
- start += runLen
- remaining -= runLen
+ //Advance to find next run
+ start += runLen
+ remaining -= runLen
- while(remaining > 0)
+ while(remaining > 0)
- //Merge all remaining runs to complete sort
- //ASSERT(start == end)
- mergeForceCollapse();
- //ASSERT(runBases.len == 1)
+ //Merge all remaining runs to complete sort
+ //ASSERT(start == end)
+ mergeForceCollapse();
+ //ASSERT(runBases.len == 1)
- //reset minGallop, for successive calls
- minGallop = MIN_GALLOP
+ //reset minGallop, for successive calls
+ minGallop = MIN_GALLOP
- return L
+ return L
- /*
+/*
Sorts the specified portion of the specified array using a binary
insertion sort. This is the best method for sorting small numbers
of elements. It requires O(n log n) compares, but O(n^2) data
@@ -95,33 +95,33 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new())
lo the index of the first element in the range to be sorted
hi the index after the last element in the range to be sorted
start the index of the first element in the range that is not already known to be sorted
- */
- proc/binarySort(lo, hi, start)
- //ASSERT(lo <= start && start <= hi)
- if(start <= lo)
- start = lo + 1
+*/
+/datum/sortInstance/proc/binarySort(lo, hi, start)
+ //ASSERT(lo <= start && start <= hi)
+ if(start <= lo)
+ start = lo + 1
- for(,start < hi, ++start)
- var/pivot = fetchElement(L,start)
+ for(,start < hi, ++start)
+ var/pivot = fetchElement(L,start)
- //set left and right to the index where pivot belongs
- var/left = lo
- var/right = start
- //ASSERT(left <= right)
+ //set left and right to the index where pivot belongs
+ var/left = lo
+ var/right = start
+ //ASSERT(left <= right)
- //[lo, left) elements <= pivot < [right, start) elements
- //in other words, find where the pivot element should go using bisection search
- while(left < right)
- var/mid = (left + right) >> 1 //round((left+right)/2)
- if(call(cmp)(fetchElement(L,mid), pivot) > 0)
- right = mid
- else
- left = mid+1
+ //[lo, left) elements <= pivot < [right, start) elements
+ //in other words, find where the pivot element should go using bisection search
+ while(left < right)
+ var/mid = (left + right) >> 1 //round((left+right)/2)
+ if(call(cmp)(fetchElement(L,mid), pivot) > 0)
+ right = mid
+ else
+ left = mid+1
- //ASSERT(left == right)
- moveElement(L, start, left) //move pivot element to correct location in the sorted range
+ //ASSERT(left == right)
+ moveElement(L, start, left) //move pivot element to correct location in the sorted range
- /*
+/*
Returns the length of the run beginning at the specified position and reverses the run if it is back-to-front
A run is the longest ascending sequence with:
@@ -132,514 +132,514 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new())
For its intended use in a stable mergesort, the strictness of the
definition of "descending" is needed so that the call can safely
reverse a descending sequence without violating stability.
- */
- proc/countRunAndMakeAscending(lo, hi)
- //ASSERT(lo < hi)
+*/
+/datum/sortInstance/proc/countRunAndMakeAscending(lo, hi)
+ //ASSERT(lo < hi)
- var/runHi = lo + 1
- if(runHi >= hi)
- return 1
+ var/runHi = lo + 1
+ if(runHi >= hi)
+ return 1
- var/last = fetchElement(L,lo)
- var/current = fetchElement(L,runHi++)
+ var/last = fetchElement(L,lo)
+ var/current = fetchElement(L,runHi++)
- if(call(cmp)(current, last) < 0)
- while(runHi < hi)
- last = current
- current = fetchElement(L,runHi)
- if(call(cmp)(current, last) >= 0)
- break
- ++runHi
- reverseRange(L, lo, runHi)
- else
- while(runHi < hi)
- last = current
- current = fetchElement(L,runHi)
- if(call(cmp)(current, last) < 0)
- break
- ++runHi
+ if(call(cmp)(current, last) < 0)
+ while(runHi < hi)
+ last = current
+ current = fetchElement(L,runHi)
+ if(call(cmp)(current, last) >= 0)
+ break
+ ++runHi
+ reverseRange(L, lo, runHi)
+ else
+ while(runHi < hi)
+ last = current
+ current = fetchElement(L,runHi)
+ if(call(cmp)(current, last) < 0)
+ break
+ ++runHi
- return runHi - lo
+ return runHi - lo
- //Returns the minimum acceptable run length for an array of the specified length.
- //Natural runs shorter than this will be extended with binarySort
- proc/minRunLength(n)
- //ASSERT(n >= 0)
- var/r = 0 //becomes 1 if any bits are shifted off
- while(n >= MIN_MERGE)
- r |= (n & 1)
- n >>= 1
- return n + r
+//Returns the minimum acceptable run length for an array of the specified length.
+//Natural runs shorter than this will be extended with binarySort
+/datum/sortInstance/proc/minRunLength(n)
+ //ASSERT(n >= 0)
+ var/r = 0 //becomes 1 if any bits are shifted off
+ while(n >= MIN_MERGE)
+ r |= (n & 1)
+ n >>= 1
+ return n + r
- //Examines the stack of runs waiting to be merged and merges adjacent runs until the stack invariants are reestablished:
- // runLen[i-3] > runLen[i-2] + runLen[i-1]
- // runLen[i-2] > runLen[i-1]
- //This method is called each time a new run is pushed onto the stack.
- //So the invariants are guaranteed to hold for i= 2)
- var/n = runBases.len - 1
- if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1])
- if(runLens[n-1] < runLens[n+1])
- --n
- mergeAt(n)
- else if(runLens[n] <= runLens[n+1])
- mergeAt(n)
- else
- break //Invariant is established
-
-
- //Merges all runs on the stack until only one remains.
- //Called only once, to finalise the sort
- proc/mergeForceCollapse()
- while(runBases.len >= 2)
- var/n = runBases.len - 1
- if(n > 1 && runLens[n-1] < runLens[n+1])
+//Examines the stack of runs waiting to be merged and merges adjacent runs until the stack invariants are reestablished:
+// runLen[i-3] > runLen[i-2] + runLen[i-1]
+// runLen[i-2] > runLen[i-1]
+//This method is called each time a new run is pushed onto the stack.
+//So the invariants are guaranteed to hold for i= 2)
+ var/n = runBases.len - 1
+ if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1])
+ if(runLens[n-1] < runLens[n+1])
--n
mergeAt(n)
-
-
- //Merges the two consecutive runs at stack indices i and i+1
- //Run i must be the penultimate or antepenultimate run on the stack
- //In other words, i must be equal to stackSize-2 or stackSize-3
- proc/mergeAt(i)
- //ASSERT(runBases.len >= 2)
- //ASSERT(i >= 1)
- //ASSERT(i == runBases.len - 1 || i == runBases.len - 2)
-
- var/base1 = runBases[i]
- var/base2 = runBases[i+1]
- var/len1 = runLens[i]
- var/len2 = runLens[i+1]
-
- //ASSERT(len1 > 0 && len2 > 0)
- //ASSERT(base1 + len1 == base2)
-
- //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run
- //(which isn't involved in this merge). The current run (i+1) goes away in any case.
- runLens[i] += runLens[i+1]
- runLens.Cut(i+1, i+2)
- runBases.Cut(i+1, i+2)
-
-
- //Find where the first element of run2 goes in run1.
- //Prior elements in run1 can be ignored (because they're already in place)
- var/k = gallopRight(fetchElement(L,base2), base1, len1, 0)
- //ASSERT(k >= 0)
- base1 += k
- len1 -= k
- if(len1 == 0)
- return
-
- //Find where the last element of run1 goes in run2.
- //Subsequent elements in run2 can be ignored (because they're already in place)
- len2 = gallopLeft(fetchElement(L,base1 + len1 - 1), base2, len2, len2-1)
- //ASSERT(len2 >= 0)
- if(len2 == 0)
- return
-
- //Merge remaining runs, using tmp array with min(len1, len2) elements
- if(len1 <= len2)
- mergeLo(base1, len1, base2, len2)
+ else if(runLens[n] <= runLens[n+1])
+ mergeAt(n)
else
- mergeHi(base1, len1, base2, len2)
+ break //Invariant is established
- /*
- Locates the position to insert key within the specified sorted range
- If the range contains elements equal to key, this will return the index of the LEFTMOST of those elements
+//Merges all runs on the stack until only one remains.
+//Called only once, to finalise the sort
+/datum/sortInstance/proc/mergeForceCollapse()
+ while(runBases.len >= 2)
+ var/n = runBases.len - 1
+ if(n > 1 && runLens[n-1] < runLens[n+1])
+ --n
+ mergeAt(n)
- key the element to be inserted into the sorted range
- base the index of the first element of the sorted range
- len the length of the sorted range, must be greater than 0
- hint the offset from base at which to begin the search, such that 0 <= hint < len; i.e. base <= hint < base+hint
- Returns the index at which to insert element 'key'
- */
- proc/gallopLeft(key, base, len, hint)
- //ASSERT(len > 0 && hint >= 0 && hint < len)
+//Merges the two consecutive runs at stack indices i and i+1
+//Run i must be the penultimate or antepenultimate run on the stack
+//In other words, i must be equal to stackSize-2 or stackSize-3
+/datum/sortInstance/proc/mergeAt(i)
+ //ASSERT(runBases.len >= 2)
+ //ASSERT(i >= 1)
+ //ASSERT(i == runBases.len - 1 || i == runBases.len - 2)
- var/lastOffset = 0
- var/offset = 1
- if(call(cmp)(key, fetchElement(L,base+hint)) > 0)
- var/maxOffset = len - hint
- while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) > 0)
- lastOffset = offset
- offset = (offset << 1) + 1
+ var/base1 = runBases[i]
+ var/base2 = runBases[i+1]
+ var/len1 = runLens[i]
+ var/len2 = runLens[i+1]
- if(offset > maxOffset)
- offset = maxOffset
+ //ASSERT(len1 > 0 && len2 > 0)
+ //ASSERT(base1 + len1 == base2)
- lastOffset += hint
- offset += hint
+ //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run
+ //(which isn't involved in this merge). The current run (i+1) goes away in any case.
+ runLens[i] += runLens[i+1]
+ runLens.Cut(i+1, i+2)
+ runBases.Cut(i+1, i+2)
- else
- var/maxOffset = hint + 1
- while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) <= 0)
- lastOffset = offset
- offset = (offset << 1) + 1
- if(offset > maxOffset)
- offset = maxOffset
+ //Find where the first element of run2 goes in run1.
+ //Prior elements in run1 can be ignored (because they're already in place)
+ var/k = gallopRight(fetchElement(L,base2), base1, len1, 0)
+ //ASSERT(k >= 0)
+ base1 += k
+ len1 -= k
+ if(len1 == 0)
+ return
- var/temp = lastOffset
- lastOffset = hint - offset
- offset = hint - temp
+ //Find where the last element of run1 goes in run2.
+ //Subsequent elements in run2 can be ignored (because they're already in place)
+ len2 = gallopLeft(fetchElement(L,base1 + len1 - 1), base2, len2, len2-1)
+ //ASSERT(len2 >= 0)
+ if(len2 == 0)
+ return
- //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len)
+ //Merge remaining runs, using tmp array with min(len1, len2) elements
+ if(len1 <= len2)
+ mergeLo(base1, len1, base2, len2)
+ else
+ mergeHi(base1, len1, base2, len2)
- //Now L[base+lastOffset] < key <= L[base+offset], so key belongs somewhere to the right of lastOffset but no farther than
- //offset. Do a binary search with invariant L[base+lastOffset-1] < key <= L[base+offset]
- ++lastOffset
- while(lastOffset < offset)
- var/m = lastOffset + ((offset - lastOffset) >> 1)
- if(call(cmp)(key, fetchElement(L,base+m)) > 0)
- lastOffset = m + 1
- else
- offset = m
+/*
+ Locates the position to insert key within the specified sorted range
+ If the range contains elements equal to key, this will return the index of the LEFTMOST of those elements
- //ASSERT(lastOffset == offset)
- return offset
+ key the element to be inserted into the sorted range
+ base the index of the first element of the sorted range
+ len the length of the sorted range, must be greater than 0
+ hint the offset from base at which to begin the search, such that 0 <= hint < len; i.e. base <= hint < base+hint
- /**
- * Like gallopLeft, except that if the range contains an element equal to
- * key, gallopRight returns the index after the rightmost equal element.
- *
- * @param key the key whose insertion point to search for
- * @param a the array in which to search
- * @param base the index of the first element in the range
- * @param len the length of the range; must be > 0
- * @param hint the index at which to begin the search, 0 <= hint < n.
- * The closer hint is to the result, the faster this method will run.
- * @param c the comparator used to order the range, and to search
- * @return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k]
- */
- proc/gallopRight(key, base, len, hint)
- //ASSERT(len > 0 && hint >= 0 && hint < len)
+ Returns the index at which to insert element 'key'
+*/
+/datum/sortInstance/proc/gallopLeft(key, base, len, hint)
+ //ASSERT(len > 0 && hint >= 0 && hint < len)
- var/offset = 1
- var/lastOffset = 0
- if(call(cmp)(key, fetchElement(L,base+hint)) < 0) //key <= L[base+hint]
- var/maxOffset = hint + 1 //therefore we want to insert somewhere in the range [base,base+hint] = [base+,base+(hint+1))
- while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) < 0) //we are iterating backwards
- lastOffset = offset
- offset = (offset << 1) + 1 //1 3 7 15
+ var/lastOffset = 0
+ var/offset = 1
+ if(call(cmp)(key, fetchElement(L,base+hint)) > 0)
+ var/maxOffset = len - hint
+ while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) > 0)
+ lastOffset = offset
+ offset = (offset << 1) + 1
- if(offset > maxOffset)
- offset = maxOffset
+ if(offset > maxOffset)
+ offset = maxOffset
- var/temp = lastOffset
- lastOffset = hint - offset
- offset = hint - temp
+ lastOffset += hint
+ offset += hint
- else //key > L[base+hint]
- var/maxOffset = len - hint //therefore we want to insert somewhere in the range (base+hint,base+len) = [base+hint+1, base+hint+(len-hint))
- while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) >= 0)
- lastOffset = offset
- offset = (offset << 1) + 1
+ else
+ var/maxOffset = hint + 1
+ while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) <= 0)
+ lastOffset = offset
+ offset = (offset << 1) + 1
- if(offset > maxOffset)
- offset = maxOffset
+ if(offset > maxOffset)
+ offset = maxOffset
- lastOffset += hint
- offset += hint
+ var/temp = lastOffset
+ lastOffset = hint - offset
+ offset = hint - temp
//ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len)
- ++lastOffset
- while(lastOffset < offset)
- var/m = lastOffset + ((offset - lastOffset) >> 1)
+ //Now L[base+lastOffset] < key <= L[base+offset], so key belongs somewhere to the right of lastOffset but no farther than
+ //offset. Do a binary search with invariant L[base+lastOffset-1] < key <= L[base+offset]
+ ++lastOffset
+ while(lastOffset < offset)
+ var/m = lastOffset + ((offset - lastOffset) >> 1)
- if(call(cmp)(key, fetchElement(L,base+m)) < 0) //key <= L[base+m]
- offset = m
- else //key > L[base+m]
- lastOffset = m + 1
+ if(call(cmp)(key, fetchElement(L,base+m)) > 0)
+ lastOffset = m + 1
+ else
+ offset = m
- //ASSERT(lastOffset == offset)
+ //ASSERT(lastOffset == offset)
+ return offset
- return offset
+/**
+ * Like gallopLeft, except that if the range contains an element equal to
+ * key, gallopRight returns the index after the rightmost equal element.
+ *
+ * @param key the key whose insertion point to search for
+ * @param a the array in which to search
+ * @param base the index of the first element in the range
+ * @param len the length of the range; must be > 0
+ * @param hint the index at which to begin the search, 0 <= hint < n.
+ * The closer hint is to the result, the faster this method will run.
+ * @param c the comparator used to order the range, and to search
+ * @return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k]
+ */
+/datum/sortInstance/proc/gallopRight(key, base, len, hint)
+ //ASSERT(len > 0 && hint >= 0 && hint < len)
+
+ var/offset = 1
+ var/lastOffset = 0
+ if(call(cmp)(key, fetchElement(L,base+hint)) < 0) //key <= L[base+hint]
+ var/maxOffset = hint + 1 //therefore we want to insert somewhere in the range [base,base+hint] = [base+,base+(hint+1))
+ while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) < 0) //we are iterating backwards
+ lastOffset = offset
+ offset = (offset << 1) + 1 //1 3 7 15
+
+ if(offset > maxOffset)
+ offset = maxOffset
+
+ var/temp = lastOffset
+ lastOffset = hint - offset
+ offset = hint - temp
+
+ else //key > L[base+hint]
+ var/maxOffset = len - hint //therefore we want to insert somewhere in the range (base+hint,base+len) = [base+hint+1, base+hint+(len-hint))
+ while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) >= 0)
+ lastOffset = offset
+ offset = (offset << 1) + 1
+
+ if(offset > maxOffset)
+ offset = maxOffset
+
+ lastOffset += hint
+ offset += hint
+
+ //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len)
+
+ ++lastOffset
+ while(lastOffset < offset)
+ var/m = lastOffset + ((offset - lastOffset) >> 1)
+
+ if(call(cmp)(key, fetchElement(L,base+m)) < 0) //key <= L[base+m]
+ offset = m
+ else //key > L[base+m]
+ lastOffset = m + 1
+
+ //ASSERT(lastOffset == offset)
+
+ return offset
- //Merges two adjacent runs in-place in a stable fashion.
- //For performance this method should only be called when len1 <= len2!
- proc/mergeLo(base1, len1, base2, len2)
- //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2)
+//Merges two adjacent runs in-place in a stable fashion.
+//For performance this method should only be called when len1 <= len2!
+/datum/sortInstance/proc/mergeLo(base1, len1, base2, len2)
+ //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2)
- var/cursor1 = base1
- var/cursor2 = base2
+ var/cursor1 = base1
+ var/cursor2 = base2
- //degenerate cases
- if(len2 == 1)
- moveElement(L, cursor2, cursor1)
- return
+ //degenerate cases
+ if(len2 == 1)
+ moveElement(L, cursor2, cursor1)
+ return
- if(len1 == 1)
- moveElement(L, cursor1, cursor2+len2)
- return
+ if(len1 == 1)
+ moveElement(L, cursor1, cursor2+len2)
+ return
- //Move first element of second run
- moveElement(L, cursor2++, cursor1++)
- --len2
+ //Move first element of second run
+ moveElement(L, cursor2++, cursor1++)
+ --len2
- outer:
- while(1)
- var/count1 = 0 //# of times in a row that first run won
- var/count2 = 0 // " " " " " " second run won
+ outer:
+ while(1)
+ var/count1 = 0 //# of times in a row that first run won
+ var/count2 = 0 // " " " " " " second run won
- //do the straightfoward thin until one run starts winning consistently
+ //do the straightfoward thin until one run starts winning consistently
- do
- //ASSERT(len1 > 1 && len2 > 0)
- if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0)
- moveElement(L, cursor2++, cursor1++)
- --len2
+ do
+ //ASSERT(len1 > 1 && len2 > 0)
+ if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0)
+ moveElement(L, cursor2++, cursor1++)
+ --len2
- ++count2
- count1 = 0
+ ++count2
+ count1 = 0
- if(len2 == 0)
- break outer
- else
- ++cursor1
-
- ++count1
- count2 = 0
-
- if(--len1 == 1)
- break outer
-
- while((count1 | count2) < minGallop)
-
-
- //one run is winning consistently so galloping may provide huge benifits
- //so try galloping, until such time as the run is no longer consistently winning
- do
- //ASSERT(len1 > 1 && len2 > 0)
-
- count1 = gallopRight(fetchElement(L,cursor2), cursor1, len1, 0)
- if(count1)
- cursor1 += count1
- len1 -= count1
-
- if(len1 <= 1)
- break outer
-
- moveElement(L, cursor2, cursor1)
- ++cursor2
- ++cursor1
- if(--len2 == 0)
+ if(len2 == 0)
break outer
-
- count2 = gallopLeft(fetchElement(L,cursor1), cursor2, len2, 0)
- if(count2)
- moveRange(L, cursor2, cursor1, count2)
-
- cursor2 += count2
- cursor1 += count2
- len2 -= count2
-
- if(len2 == 0)
- break outer
-
+ else
++cursor1
+
+ ++count1
+ count2 = 0
+
if(--len1 == 1)
break outer
- --minGallop
-
- while((count1|count2) > MIN_GALLOP)
-
- if(minGallop < 0)
- minGallop = 0
- minGallop += 2; // Penalize for leaving gallop mode
+ while((count1 | count2) < minGallop)
- if(len1 == 1)
- //ASSERT(len2 > 0)
- moveElement(L, cursor1, cursor2+len2)
+ //one run is winning consistently so galloping may provide huge benifits
+ //so try galloping, until such time as the run is no longer consistently winning
+ do
+ //ASSERT(len1 > 1 && len2 > 0)
- //else
- //ASSERT(len2 == 0)
- //ASSERT(len1 > 1)
+ count1 = gallopRight(fetchElement(L,cursor2), cursor1, len1, 0)
+ if(count1)
+ cursor1 += count1
+ len1 -= count1
-
- proc/mergeHi(base1, len1, base2, len2)
- //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2)
-
- var/cursor1 = base1 + len1 - 1 //start at end of sublists
- var/cursor2 = base2 + len2 - 1
-
- //degenerate cases
- if(len2 == 1)
- moveElement(L, base2, base1)
- return
-
- if(len1 == 1)
- moveElement(L, base1, cursor2+1)
- return
-
- moveElement(L, cursor1--, cursor2-- + 1)
- --len1
-
- outer:
- while(1)
- var/count1 = 0 //# of times in a row that first run won
- var/count2 = 0 // " " " " " " second run won
-
- //do the straightfoward thing until one run starts winning consistently
- do
- //ASSERT(len1 > 0 && len2 > 1)
- if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0)
- moveElement(L, cursor1--, cursor2-- + 1)
- --len1
-
- ++count1
- count2 = 0
-
- if(len1 == 0)
- break outer
- else
- --cursor2
- --len2
-
- ++count2
- count1 = 0
-
- if(len2 == 1)
- break outer
- while((count1 | count2) < minGallop)
-
- //one run is winning consistently so galloping may provide huge benifits
- //so try galloping, until such time as the run is no longer consistently winning
- do
- //ASSERT(len1 > 0 && len2 > 1)
-
- count1 = len1 - gallopRight(fetchElement(L,cursor2), base1, len1, len1-1) //should cursor1 be base1?
- if(count1)
- cursor1 -= count1
-
- moveRange(L, cursor1+1, cursor2+1, count1) //cursor1+1 == cursor2 by definition
-
- cursor2 -= count1
- len1 -= count1
-
- if(len1 == 0)
- break outer
-
- --cursor2
-
- if(--len2 == 1)
+ if(len1 <= 1)
break outer
- count2 = len2 - gallopLeft(fetchElement(L,cursor1), cursor1+1, len2, len2-1)
- if(count2)
- cursor2 -= count2
- len2 -= count2
+ moveElement(L, cursor2, cursor1)
+ ++cursor2
+ ++cursor1
+ if(--len2 == 0)
+ break outer
- if(len2 <= 1)
- break outer
+ count2 = gallopLeft(fetchElement(L,cursor1), cursor2, len2, 0)
+ if(count2)
+ moveRange(L, cursor2, cursor1, count2)
+ cursor2 += count2
+ cursor1 += count2
+ len2 -= count2
+
+ if(len2 == 0)
+ break outer
+
+ ++cursor1
+ if(--len1 == 1)
+ break outer
+
+ --minGallop
+
+ while((count1|count2) > MIN_GALLOP)
+
+ if(minGallop < 0)
+ minGallop = 0
+ minGallop += 2; // Penalize for leaving gallop mode
+
+
+ if(len1 == 1)
+ //ASSERT(len2 > 0)
+ moveElement(L, cursor1, cursor2+len2)
+
+ //else
+ //ASSERT(len2 == 0)
+ //ASSERT(len1 > 1)
+
+
+/datum/sortInstance/proc/mergeHi(base1, len1, base2, len2)
+ //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2)
+
+ var/cursor1 = base1 + len1 - 1 //start at end of sublists
+ var/cursor2 = base2 + len2 - 1
+
+ //degenerate cases
+ if(len2 == 1)
+ moveElement(L, base2, base1)
+ return
+
+ if(len1 == 1)
+ moveElement(L, base1, cursor2+1)
+ return
+
+ moveElement(L, cursor1--, cursor2-- + 1)
+ --len1
+
+ outer:
+ while(1)
+ var/count1 = 0 //# of times in a row that first run won
+ var/count2 = 0 // " " " " " " second run won
+
+ //do the straightfoward thing until one run starts winning consistently
+ do
+ //ASSERT(len1 > 0 && len2 > 1)
+ if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0)
moveElement(L, cursor1--, cursor2-- + 1)
--len1
+ ++count1
+ count2 = 0
+
+ if(len1 == 0)
+ break outer
+ else
+ --cursor2
+ --len2
+
+ ++count2
+ count1 = 0
+
+ if(len2 == 1)
+ break outer
+ while((count1 | count2) < minGallop)
+
+ //one run is winning consistently so galloping may provide huge benifits
+ //so try galloping, until such time as the run is no longer consistently winning
+ do
+ //ASSERT(len1 > 0 && len2 > 1)
+
+ count1 = len1 - gallopRight(fetchElement(L,cursor2), base1, len1, len1-1) //should cursor1 be base1?
+ if(count1)
+ cursor1 -= count1
+
+ moveRange(L, cursor1+1, cursor2+1, count1) //cursor1+1 == cursor2 by definition
+
+ cursor2 -= count1
+ len1 -= count1
+
if(len1 == 0)
break outer
- --minGallop
- while((count1|count2) > MIN_GALLOP)
+ --cursor2
- if(minGallop < 0)
- minGallop = 0
- minGallop += 2 // Penalize for leaving gallop mode
+ if(--len2 == 1)
+ break outer
- if(len2 == 1)
- //ASSERT(len1 > 0)
+ count2 = len2 - gallopLeft(fetchElement(L,cursor1), cursor1+1, len2, len2-1)
+ if(count2)
+ cursor2 -= count2
+ len2 -= count2
- cursor1 -= len1
- moveRange(L, cursor1+1, cursor2+1, len1)
+ if(len2 <= 1)
+ break outer
- //else
- //ASSERT(len1 == 0)
- //ASSERT(len2 > 0)
+ moveElement(L, cursor1--, cursor2-- + 1)
+ --len1
+
+ if(len1 == 0)
+ break outer
+
+ --minGallop
+ while((count1|count2) > MIN_GALLOP)
+
+ if(minGallop < 0)
+ minGallop = 0
+ minGallop += 2 // Penalize for leaving gallop mode
+
+ if(len2 == 1)
+ //ASSERT(len1 > 0)
+
+ cursor1 -= len1
+ moveRange(L, cursor1+1, cursor2+1, len1)
+
+ //else
+ //ASSERT(len1 == 0)
+ //ASSERT(len2 > 0)
- proc/mergeSort(start, end)
- var/remaining = end - start
+/datum/sortInstance/proc/mergeSort(start, end)
+ var/remaining = end - start
- //If array is small, do an insertion sort
- if(remaining < MIN_MERGE)
- binarySort(start, end, start/*+initRunLen*/)
- return
+ //If array is small, do an insertion sort
+ if(remaining < MIN_MERGE)
+ binarySort(start, end, start/*+initRunLen*/)
+ return
- var/minRun = minRunLength(remaining)
+ var/minRun = minRunLength(remaining)
- do
- var/runLen = (remaining <= minRun) ? remaining : minRun
+ do
+ var/runLen = (remaining <= minRun) ? remaining : minRun
- binarySort(start, start+runLen, start)
+ binarySort(start, start+runLen, start)
- //add data about run to queue
- runBases.Add(start)
- runLens.Add(runLen)
+ //add data about run to queue
+ runBases.Add(start)
+ runLens.Add(runLen)
- //Advance to find next run
- start += runLen
- remaining -= runLen
+ //Advance to find next run
+ start += runLen
+ remaining -= runLen
- while(remaining > 0)
+ while(remaining > 0)
- while(runBases.len >= 2)
- var/n = runBases.len - 1
- if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1])
- if(runLens[n-1] < runLens[n+1])
- --n
- mergeAt2(n)
- else if(runLens[n] <= runLens[n+1])
- mergeAt2(n)
- else
- break //Invariant is established
-
- while(runBases.len >= 2)
- var/n = runBases.len - 1
- if(n > 1 && runLens[n-1] < runLens[n+1])
+ while(runBases.len >= 2)
+ var/n = runBases.len - 1
+ if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1])
+ if(runLens[n-1] < runLens[n+1])
--n
mergeAt2(n)
+ else if(runLens[n] <= runLens[n+1])
+ mergeAt2(n)
+ else
+ break //Invariant is established
- return L
+ while(runBases.len >= 2)
+ var/n = runBases.len - 1
+ if(n > 1 && runLens[n-1] < runLens[n+1])
+ --n
+ mergeAt2(n)
- proc/mergeAt2(i)
- var/cursor1 = runBases[i]
- var/cursor2 = runBases[i+1]
+ return L
- var/end1 = cursor1+runLens[i]
- var/end2 = cursor2+runLens[i+1]
+/datum/sortInstance/proc/mergeAt2(i)
+ var/cursor1 = runBases[i]
+ var/cursor2 = runBases[i+1]
- var/val1 = fetchElement(L,cursor1)
- var/val2 = fetchElement(L,cursor2)
+ var/end1 = cursor1+runLens[i]
+ var/end2 = cursor2+runLens[i+1]
- while(1)
- if(call(cmp)(val1,val2) <= 0)
- if(++cursor1 >= end1)
- break
- val1 = fetchElement(L,cursor1)
- else
- moveElement(L,cursor2,cursor1)
+ var/val1 = fetchElement(L,cursor1)
+ var/val2 = fetchElement(L,cursor2)
- if(++cursor2 >= end2)
- break
- ++end1
- ++cursor1
+ while(1)
+ if(call(cmp)(val1,val2) <= 0)
+ if(++cursor1 >= end1)
+ break
+ val1 = fetchElement(L,cursor1)
+ else
+ moveElement(L,cursor2,cursor1)
- val2 = fetchElement(L,cursor2)
+ if(++cursor2 >= end2)
+ break
+ ++end1
+ ++cursor1
+
+ val2 = fetchElement(L,cursor2)
- //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run
- //(which isn't involved in this merge). The current run (i+1) goes away in any case.
- runLens[i] += runLens[i+1]
- runLens.Cut(i+1, i+2)
- runBases.Cut(i+1, i+2)
+ //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run
+ //(which isn't involved in this merge). The current run (i+1) goes away in any case.
+ runLens[i] += runLens[i+1]
+ runLens.Cut(i+1, i+2)
+ runBases.Cut(i+1, i+2)
#undef MIN_GALLOP
#undef MIN_MERGE
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 6908a5057f..8494bbb7a9 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -304,9 +304,9 @@
//is in the other string at the same spot (assuming it is not a replace char).
//This is used for fingerprints
var/newtext = text
- if(lentext(text) != lentext(compare))
+ if(length(text) != length(compare))
return 0
- for(var/i = 1, i < lentext(text), i++)
+ for(var/i = 1, i < length(text), i++)
var/a = copytext(text,i,i+1)
var/b = copytext(compare,i,i+1)
//if it isn't both the same letter, or if they are both the replacement character
@@ -326,7 +326,7 @@
if(!text || !character)
return 0
var/count = 0
- for(var/i = 1, i <= lentext(text), i++)
+ for(var/i = 1, i <= length(text), i++)
var/a = copytext(text,i,i+1)
if(a == character)
count++
@@ -607,8 +607,8 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
continue
var/buffer = ""
var/early_culling = TRUE
- for(var/pos = 1, pos <= lentext(string), pos++)
- var/let = copytext(string, pos, (pos + 1) % lentext(string))
+ for(var/pos = 1, pos <= length(string), pos++)
+ var/let = copytext(string, pos, (pos + 1) % length(string))
if(early_culling && !findtext(let,GLOB.is_alphanumeric))
continue
early_culling = FALSE
@@ -616,9 +616,9 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
if(!findtext(buffer,GLOB.is_alphanumeric))
continue
var/punctbuffer = ""
- var/cutoff = lentext(buffer)
- for(var/pos = lentext(buffer), pos >= 0, pos--)
- var/let = copytext(buffer, pos, (pos + 1) % lentext(buffer))
+ var/cutoff = length(buffer)
+ for(var/pos = length(buffer), pos >= 0, pos--)
+ var/let = copytext(buffer, pos, (pos + 1) % length(buffer))
if(findtext(let,GLOB.is_alphanumeric))
break
if(findtext(let,GLOB.is_punctuation))
@@ -628,8 +628,8 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
var/exclaim = FALSE
var/question = FALSE
var/periods = 0
- for(var/pos = lentext(punctbuffer), pos >= 0, pos--)
- var/punct = copytext(punctbuffer, pos, (pos + 1) % lentext(punctbuffer))
+ for(var/pos = length(punctbuffer), pos >= 0, pos--)
+ var/punct = copytext(punctbuffer, pos, (pos + 1) % length(punctbuffer))
if(!exclaim && findtext(punct,"!"))
exclaim = TRUE
if(!question && findtext(punct,"?"))
@@ -651,7 +651,7 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
buffer = copytext(buffer, 1, cutoff) + punctbuffer
if(!findtext(buffer,GLOB.is_alphanumeric))
continue
- if(!buffer || lentext(buffer) > 280 || lentext(buffer) <= cullshort || buffer in accepted)
+ if(!buffer || length(buffer) > 280 || length(buffer) <= cullshort || buffer in accepted)
continue
accepted += buffer
diff --git a/code/__HELPERS/text_vr.dm b/code/__HELPERS/text_vr.dm
index 64e13ef65b..9be806fc54 100644
--- a/code/__HELPERS/text_vr.dm
+++ b/code/__HELPERS/text_vr.dm
@@ -9,8 +9,8 @@
return t
proc/TextPreview(var/string,var/len=40)
- if(lentext(string) <= len)
- if(!lentext(string))
+ if(length(string) <= len)
+ if(!length(string))
return "\[...\]"
else
return string
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 27b70d28c5..29f5331fd3 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -759,7 +759,7 @@ GLOBAL_LIST_INIT(can_embed_types, typecacheof(list(
/obj/item/pipe)))
/proc/can_embed(obj/item/W)
- if(W.is_sharp())
+ if(W.get_sharpness())
return 1
if(is_pointed(W))
return 1
@@ -1548,4 +1548,12 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
/proc/CallAsync(datum/source, proctype, list/arguments)
set waitfor = FALSE
- return call(source, proctype)(arglist(arguments))
\ No newline at end of file
+ return call(source, proctype)(arglist(arguments))
+
+/proc/num2sign(numeric)
+ if(numeric > 0)
+ return 1
+ else if(numeric < 0)
+ return -1
+ else
+ return 0
diff --git a/code/__HELPERS/unused.dm b/code/__HELPERS/unused.dm
index fce25720b7..6d41856fd1 100644
--- a/code/__HELPERS/unused.dm
+++ b/code/__HELPERS/unused.dm
@@ -11,7 +11,7 @@
var/dest_y
/datum/projectile_data/New(var/src_x, var/src_y, var/time, var/distance, \
- var/power_x, var/power_y, var/dest_x, var/dest_y)
+ var/power_x, var/power_y, var/dest_x, var/dest_y)
src.src_x = src_x
src.src_y = src_y
src.time = time
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index e49d458ceb..e0cf8ebdd5 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -142,8 +142,7 @@ GLOBAL_LIST_INIT(bitfields, list(
"THICKMATERIAL" = THICKMATERIAL,
"VOICEBOX_TOGGLABLE" = VOICEBOX_TOGGLABLE,
"VOICEBOX_DISABLED" = VOICEBOX_DISABLED,
- "SNUG_FIT" = SNUG_FIT,
- "ANTI_TINFOIL_MANEUVER" = ANTI_TINFOIL_MANEUVER,
+ "IGNORE_HAT_TOSS" = IGNORE_HAT_TOSS,
),
"tesla_flags" = list(
"TESLA_MOB_DAMAGE" = TESLA_MOB_DAMAGE,
@@ -193,7 +192,7 @@ GLOBAL_LIST_INIT(bitfields, list(
"clear_conversion" = list(
"REACTION_CLEAR_IMPURE" = REACTION_CLEAR_IMPURE,
"REACTION_CLEAR_INVERSE" = REACTION_CLEAR_INVERSE
- ),
+ ),
"organ_flags" = list(
"ORGAN_SYNTHETIC" = ORGAN_SYNTHETIC,
"ORGAN_FROZEN" = ORGAN_FROZEN,
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index a2135b93b2..e2705ad49f 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -7,15 +7,15 @@ GLOBAL_LIST_EMPTY(facial_hair_styles_list) //stores /datum/sprite_accessory/faci
GLOBAL_LIST_EMPTY(facial_hair_styles_male_list) //stores only hair names
GLOBAL_LIST_EMPTY(facial_hair_styles_female_list) //stores only hair names
//Underwear
-GLOBAL_LIST_EMPTY(underwear_list) //stores /datum/sprite_accessory/underwear/bottom indexed by name
+GLOBAL_LIST_EMPTY_TYPED(underwear_list, /datum/sprite_accessory/underwear/bottom) //stores bottoms indexed by name
GLOBAL_LIST_EMPTY(underwear_m) //stores only underwear name
GLOBAL_LIST_EMPTY(underwear_f) //stores only underwear name
//Undershirts
-GLOBAL_LIST_EMPTY(undershirt_list) //stores /datum/sprite_accessory/underwear/top indexed by name
+GLOBAL_LIST_EMPTY_TYPED(undershirt_list, /datum/sprite_accessory/underwear/top) //stores tops indexed by name
GLOBAL_LIST_EMPTY(undershirt_m) //stores only undershirt name
GLOBAL_LIST_EMPTY(undershirt_f) //stores only undershirt name
//Socks
-GLOBAL_LIST_EMPTY(socks_list) //stores /datum/sprite_accessory/underwear/socks indexed by name
+GLOBAL_LIST_EMPTY_TYPED(socks_list, /datum/sprite_accessory/underwear/socks) //stores socks indexed by name
//Lizard Bits (all datum lists indexed by name)
GLOBAL_LIST_EMPTY(body_markings_list)
GLOBAL_LIST_EMPTY(tails_list_lizard)
@@ -46,10 +46,15 @@ GLOBAL_LIST_INIT(ai_core_display_screens, list(
":thinking:",
"Alien",
"Angel",
+ "Angryface",
+ "AtlantisCZE",
"Banned",
"Bliss",
"Blue",
- "Clown",
+ "Boy",
+ "Boy-Malf",
+ "Girl",
+ "Girl-Malf",
"Database",
"Dorf",
"Firewall",
@@ -61,26 +66,44 @@ GLOBAL_LIST_INIT(ai_core_display_screens, list(
"Hades",
"Heartline",
"Helios",
+ "Hotdog",
+ "Hourglass",
"House",
"Inverted",
+ "Jack",
"Matrix",
"Monochrome",
+ "Mothman",
"Murica",
"Nanotrasen",
"Not Malf",
+ "Patriot",
+ "Pirate",
"President",
- "Random",
"Rainbow",
- "Red",
+ "Clown",
+ "Random",
+ "Ravensdale",
"Red October",
+ "Red",
+ "Royal",
+ "Searif",
+ "Serithi",
+ "SilveryFerret",
+ "Smiley",
"Static",
"Syndicat Meow",
"TechDemon",
+ "Terminal",
"Text",
"Too Deep",
"Triumvirate",
"Triumvirate-M",
- "Weird"))
+ "Wasp",
+ "Weird",
+ "Xerxes",
+ "Yes-Man"
+ ))
/proc/resolve_ai_icon(input)
if(!input || !(input in GLOB.ai_core_display_screens))
diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm
index 0cb61949a0..7340581d25 100644
--- a/code/_globalvars/lists/mapping.dm
+++ b/code/_globalvars/lists/mapping.dm
@@ -1,6 +1,16 @@
GLOBAL_LIST_INIT(cardinals, list(NORTH, SOUTH, EAST, WEST))
-GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
+GLOBAL_LIST_INIT(cardinals_multiz, list(NORTH, SOUTH, EAST, WEST, UP, DOWN))
GLOBAL_LIST_INIT(diagonals, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
+GLOBAL_LIST_INIT(corners_multiz, list(UP|NORTHEAST, UP|NORTHWEST, UP|SOUTHEAST, UP|SOUTHWEST, DOWN|NORTHEAST, DOWN|NORTHWEST, DOWN|SOUTHEAST, DOWN|SOUTHWEST))
+GLOBAL_LIST_INIT(diagonals_multiz, list(
+ NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST,
+ UP|NORTH, UP|SOUTH, UP|EAST, UP|WEST, UP|NORTHEAST, UP|NORTHWEST, UP|SOUTHEAST, UP|SOUTHWEST,
+ DOWN|NORTH, DOWN|SOUTH, DOWN|EAST, DOWN|WEST, DOWN|NORTHEAST, DOWN|NORTHWEST, DOWN|SOUTHEAST, DOWN|SOUTHWEST))
+GLOBAL_LIST_INIT(alldirs_multiz, list(
+ NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST,
+ UP, UP|NORTH, UP|SOUTH, UP|EAST, UP|WEST, UP|NORTHEAST, UP|NORTHWEST, UP|SOUTHEAST, UP|SOUTHWEST,
+ DOWN, DOWN|NORTH, DOWN|SOUTH, DOWN|EAST, DOWN|WEST, DOWN|NORTHEAST, DOWN|NORTHWEST, DOWN|SOUTHEAST, DOWN|SOUTHWEST))
+GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
GLOBAL_LIST_EMPTY(landmarks_list) //list of all landmarks created
GLOBAL_LIST_EMPTY(start_landmarks_list) //list of all spawn points created
@@ -35,6 +45,8 @@ GLOBAL_LIST_EMPTY(vr_spawnpoints)
//used by jump-to-area etc. Updated by area/updateName()
GLOBAL_LIST_EMPTY(sortedAreas)
/// An association from typepath to area instance. Only includes areas with `unique` set.
-GLOBAL_LIST_EMPTY(areas_by_type)
+GLOBAL_LIST_EMPTY_TYPED(areas_by_type, /area)
GLOBAL_LIST_EMPTY(all_abstract_markers)
+
+GLOBAL_LIST_EMPTY(stationroom_landmarks) //List of all spawns for stationrooms
diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm
index 8b5657a6f6..1707c3a536 100644
--- a/code/_globalvars/lists/mobs.dm
+++ b/code/_globalvars/lists/mobs.dm
@@ -1,6 +1,8 @@
GLOBAL_LIST_EMPTY(clients) //all clients
GLOBAL_LIST_EMPTY(admins) //all clients whom are admins
GLOBAL_PROTECT(admins)
+GLOBAL_LIST_EMPTY(mentors) //all clients whom are mentors
+GLOBAL_PROTECT(mentors)
GLOBAL_LIST_EMPTY(deadmins) //all ckeys who have used the de-admin verb.
GLOBAL_LIST_EMPTY(directory) //all ckeys with associated client
diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm
index 14c752613b..fa68fab85f 100644
--- a/code/_globalvars/lists/objects.dm
+++ b/code/_globalvars/lists/objects.dm
@@ -19,6 +19,8 @@ GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums index
GLOBAL_LIST_EMPTY(materials_list) //list of all /datum/material datums indexed by material id.
GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id.
GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path.
+GLOBAL_LIST_EMPTY(uplink_items) //list of all uplink item typepaths, ascendingly sorted by their initial name.
+GLOBAL_LIST_EMPTY(uplink_categories) //list of all uplink categories, listed by the order they are loaded in code. Be careful.
GLOBAL_LIST_EMPTY(crafting_recipes) //list of all table craft recipes
GLOBAL_LIST_EMPTY(rcd_list) //list of Rapid Construction Devices.
GLOBAL_LIST_EMPTY(apcs_list) //list of all Area Power Controller machines, separate from machines for powernet speeeeeeed.
diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm
index 626bba9fc3..e30ce1d1ed 100644
--- a/code/_globalvars/lists/poll_ignore.dm
+++ b/code/_globalvars/lists/poll_ignore.dm
@@ -13,6 +13,10 @@
#define POLL_IGNORE_GOLEM "golem"
#define POLL_IGNORE_SWARMER "swarmer"
#define POLL_IGNORE_DRONE "drone"
+#define POLL_IGNORE_IMAGINARYFRIEND "imaginary_friend"
+#define POLL_IGNORE_SPLITPERSONALITY "split_personality"
+#define POLL_IGNORE_DEMON "demon"
+#define POLL_IGNORE_WIZARD "wizard"
#define POLL_IGNORE_CLONE "clone"
GLOBAL_LIST_INIT(poll_ignore_desc, list(
@@ -29,6 +33,10 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list(
POLL_IGNORE_GOLEM = "Golems",
POLL_IGNORE_SWARMER = "Swarmer shells",
POLL_IGNORE_DRONE = "Drone shells",
+ POLL_IGNORE_IMAGINARYFRIEND = "Imaginary Friend",
+ POLL_IGNORE_SPLITPERSONALITY = "Split Personality",
+ POLL_IGNORE_DEMON = "Demons",
+ POLL_IGNORE_WIZARD = "Wizards",
POLL_IGNORE_CLONE = "Defective/SDGF clones"
))
GLOBAL_LIST_INIT(poll_ignore, init_poll_ignore())
diff --git a/code/_globalvars/lists/typecache.dm b/code/_globalvars/lists/typecache.dm
index 96807214f2..1ec3de0bc5 100644
--- a/code/_globalvars/lists/typecache.dm
+++ b/code/_globalvars/lists/typecache.dm
@@ -10,3 +10,5 @@ GLOBAL_LIST_INIT(typecache_living, typecacheof(/mob/living))
GLOBAL_LIST_INIT(typecache_stack, typecacheof(/obj/item/stack))
GLOBAL_LIST_INIT(typecache_machine_or_structure, typecacheof(list(/obj/machinery, /obj/structure)))
+
+GLOBAL_LIST_INIT(freezing_objects, typecacheof(list(/obj/structure/closet/crate/freezer, /obj/structure/closet/secure_closet/freezer, /obj/structure/bodycontainer, /obj/item/autosurgeon, /obj/machinery/smartfridge/organ))) //list of all cold objects, that freeze organs when inside
diff --git a/code/_js/menus.dm b/code/_js/menus.dm
index 9b2fc40e68..da56850b07 100644
--- a/code/_js/menus.dm
+++ b/code/_js/menus.dm
@@ -1,37 +1,37 @@
#define js_dropdowns {"
function dropdowns() {
- var divs = document.getElementsByTagName('div');
- var headers = new Array();
- var links = new Array();
- for(var i=0;i=0) {
- elem.className = elem.className.replace('visible','hidden');
- this.className = this.className.replace('open','closed');
- this.innerHTML = this.innerHTML.replace('-','+');
- }
- else {
- elem.className = elem.className.replace('hidden','visible');
- this.className = this.className.replace('closed','open');
- this.innerHTML = this.innerHTML.replace('+','-');
- }
- return false;
- }
- })(links\[i\]);
- }
- }
+ var divs = document.getElementsByTagName('div');
+ var headers = new Array();
+ var links = new Array();
+ for(var i=0;i=0) {
+ elem.className = elem.className.replace('visible','hidden');
+ this.className = this.className.replace('open','closed');
+ this.innerHTML = this.innerHTML.replace('-','+');
+ }
+ else {
+ elem.className = elem.className.replace('hidden','visible');
+ this.className = this.className.replace('closed','open');
+ this.innerHTML = this.innerHTML.replace('+','-');
+ }
+ return false;
+ }
+ })(links\[i\]);
+ }
+ }
}
"}
\ No newline at end of file
diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm
index ddff0b6bd3..9485ea3374 100644
--- a/code/_onclick/adjacent.dm
+++ b/code/_onclick/adjacent.dm
@@ -68,9 +68,10 @@
/atom/movable/Adjacent(var/atom/neighbor)
if(neighbor == loc)
return TRUE
- if(!isturf(loc))
+ var/turf/T = loc
+ if(!istype(T))
return FALSE
- if(loc.Adjacent(neighbor,target = neighbor, mover = src))
+ if(T.Adjacent(neighbor, neighbor, src))
return TRUE
return FALSE
diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index 7a495b95e7..2a8289697b 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -114,7 +114,8 @@
/mob/living/silicon/ai/CtrlClickOn(var/atom/A)
A.AICtrlClick(src)
/mob/living/silicon/ai/AltClickOn(var/atom/A)
- A.AIAltClick(src)
+ if(!A.AIAltClick(src))
+ altclick_listed_turf(A)
/*
The following criminally helpful code is just the previous code cleaned up;
@@ -125,9 +126,10 @@
/* Atom Procs */
/atom/proc/AICtrlClick()
return
+
/atom/proc/AIAltClick(mob/living/silicon/ai/user)
- AltClick(user)
- return
+ return AltClick(user)
+
/atom/proc/AIShiftClick()
return
/atom/proc/AICtrlShiftClick()
@@ -151,6 +153,7 @@
shock_perm(usr)
else
shock_restore(usr)
+ return TRUE
/obj/machinery/door/airlock/AIShiftClick() // Opens and closes doors!
if(obj_flags & EMAGGED)
@@ -185,10 +188,12 @@
return
toggle_on()
add_fingerprint(usr)
+ return TRUE
/* Holopads */
/obj/machinery/holopad/AIAltClick(mob/living/silicon/ai/user)
hangup_all_calls()
+ return TRUE
//
// Override TurfAdjacent for AltClicking
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 58eabbdbcf..4c477f3872 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -321,8 +321,7 @@
return
/atom/proc/ShiftClick(mob/user)
SEND_SIGNAL(src, COMSIG_CLICK_SHIFT, user)
- if(user.client && user.client.eye == user || user.client.eye == user.loc)
- user.examinate(src)
+ user.examinate(src)
return
/*
@@ -354,8 +353,17 @@
Unused except for AI
*/
/mob/proc/AltClickOn(atom/A)
- A.AltClick(src)
- return
+ if(!A.AltClick(src))
+ altclick_listed_turf(A)
+
+/mob/proc/altclick_listed_turf(atom/A)
+ var/turf/T = get_turf(A)
+ if(T == A.loc || T == A)
+ if(T == listed_turf)
+ listed_turf = null
+ else if(TurfAdjacent(T))
+ listed_turf = T
+ client.statpanel = T.name
/mob/living/carbon/AltClickOn(atom/A)
if(!stat && mind && iscarbon(A) && A != src)
@@ -367,18 +375,7 @@
..()
/atom/proc/AltClick(mob/user)
- SEND_SIGNAL(src, COMSIG_CLICK_ALT, user)
- var/turf/T = get_turf(src)
- if(T && user.TurfAdjacent(T))
- user.listed_turf = T
- user.client.statpanel = T.name
-
-// Use this instead of /mob/proc/AltClickOn(atom/A) where you only want turf content listing without additional atom alt-click interaction
-/atom/proc/AltClickNoInteract(mob/user, atom/A)
- var/turf/T = get_turf(A)
- if(T && user.TurfAdjacent(T))
- user.listed_turf = T
- user.client.statpanel = T.name
+ . = SEND_SIGNAL(src, COMSIG_CLICK_ALT, user)
/mob/proc/TurfAdjacent(turf/T)
return T.Adjacent(src)
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index 7f63b74945..a2d566d566 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -110,7 +110,8 @@
/mob/living/silicon/robot/CtrlClickOn(atom/A)
A.BorgCtrlClick(src)
/mob/living/silicon/robot/AltClickOn(atom/A)
- A.BorgAltClick(src)
+ if(!A.BorgAltClick(src))
+ altclick_listed_turf(A)
/atom/proc/BorgCtrlShiftClick(mob/living/silicon/robot/user) //forward to human click if not overridden
CtrlShiftClick(user)
@@ -154,20 +155,17 @@
..()
/atom/proc/BorgAltClick(mob/living/silicon/robot/user)
- AltClick(user)
- return
+ return AltClick(user)
/obj/machinery/door/airlock/BorgAltClick(mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code.
if(get_dist(src,user) <= user.interaction_range)
- AIAltClick()
- else
- ..()
+ return AIAltClick()
+ return ..()
/obj/machinery/turretid/BorgAltClick(mob/living/silicon/robot/user) //turret lethal on/off. Forwards to AI code.
if(get_dist(src,user) <= user.interaction_range)
- AIAltClick()
- else
- ..()
+ return AIAltClick()
+ return ..()
/*
As with AI, these are not used in click code,
diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm
index 167fa989b2..9d53703cdd 100644
--- a/code/_onclick/hud/_defines.dm
+++ b/code/_onclick/hud/_defines.dm
@@ -107,6 +107,10 @@
#define ui_internal "EAST-1:28,CENTER+1:19"//CIT CHANGE - moves internal icon up a little bit to accommodate for the stamina meter
#define ui_mood "EAST-1:28,CENTER-3:10"
+//living
+#define ui_living_pull "EAST-1:28,CENTER-2:15"
+#define ui_living_health "EAST-1:28,CENTER:15"
+
//borgs
#define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator.
diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm
index 2b5af9ddb8..858b8dbd06 100644
--- a/code/_onclick/hud/action_button.dm
+++ b/code/_onclick/hud/action_button.dm
@@ -113,7 +113,7 @@
name = "Show Buttons"
else
name = "Hide Buttons"
- UpdateIcon()
+ update_icon()
usr.update_action_buttons()
/obj/screen/movable/action_button/hide_toggle/AltClick(mob/user)
@@ -125,6 +125,7 @@
moved = FALSE
user.update_action_buttons(TRUE)
to_chat(user, "Action button positions have been reset.")
+ return TRUE
/obj/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(datum/hud/owner_hud)
@@ -134,9 +135,9 @@
hide_icon = settings["toggle_icon"]
hide_state = settings["toggle_hide"]
show_state = settings["toggle_show"]
- UpdateIcon()
+ update_icon()
-/obj/screen/movable/action_button/hide_toggle/proc/UpdateIcon()
+/obj/screen/movable/action_button/hide_toggle/update_icon()
cut_overlays()
add_overlay(mutable_appearance(hide_icon, hidden ? show_state : hide_state))
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index cc183dd6d3..c42956bbaa 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -213,6 +213,22 @@ or something covering your eyes."
desc = "Whoa man, you're tripping balls! Careful you don't get addicted... if you aren't already."
icon_state = "high"
+/obj/screen/alert/mind_control
+ name = "Mind Control"
+ desc = "Your mind has been hijacked! Click to view the mind control command."
+ icon_state = "mind_control"
+ var/command
+
+/obj/screen/alert/mind_control/Click()
+ var/mob/living/L = usr
+ to_chat(L, "[command]")
+
+/obj/screen/alert/hypnosis
+ name = "Hypnosis"
+ desc = "Something's hypnotizing you, but you're not really sure about what."
+ icon_state = "hypnosis"
+ var/phrase
+
/obj/screen/alert/drunk //Not implemented
name = "Drunk"
desc = "All that alcohol you've been drinking is impairing your speech, motor skills, and mental cognition. Make sure to act like it."
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 7f2fca9d98..3b5f851333 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -349,6 +349,13 @@
devilsouldisplay = new /obj/screen/devil/soul_counter
infodisplay += devilsouldisplay
+ blood_display = new /obj/screen/bloodsucker/blood_counter // Blood Volume
+ infodisplay += blood_display
+ vamprank_display = new /obj/screen/bloodsucker/rank_counter // Vampire Rank
+ infodisplay += vamprank_display
+ sunlight_display = new /obj/screen/bloodsucker/sunlight_counter // Sunlight
+ infodisplay += sunlight_display
+
zone_select = new /obj/screen/zone_sel()
zone_select.icon = ui_style
zone_select.update_icon(mymob)
diff --git a/code/_onclick/hud/lavaland_elite.dm b/code/_onclick/hud/lavaland_elite.dm
new file mode 100644
index 0000000000..277ea8b898
--- /dev/null
+++ b/code/_onclick/hud/lavaland_elite.dm
@@ -0,0 +1,16 @@
+/datum/hud/lavaland_elite
+ ui_style = 'icons/mob/screen_elite.dmi'
+
+/datum/hud/lavaland_elite/New(mob/living/simple_animal/hostile/asteroid/elite)
+ ..()
+
+ pull_icon = new /obj/screen/pull()
+ pull_icon.icon = ui_style
+ pull_icon.update_icon()
+ pull_icon.screen_loc = ui_living_pull
+ pull_icon.hud = src
+ static_inventory += pull_icon
+
+ healths = new /obj/screen/healths/lavaland_elite()
+ healths.hud = src
+ infodisplay += healths
diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm
index 8ee837a202..b2bc05924c 100644
--- a/code/_onclick/hud/plane_master.dm
+++ b/code/_onclick/hud/plane_master.dm
@@ -16,6 +16,28 @@
//Trust me, you need one. Period. If you don't think you do, you're doing something extremely wrong.
/obj/screen/plane_master/proc/backdrop(mob/mymob)
+/obj/screen/plane_master/openspace
+ name = "open space plane master"
+ plane = FLOOR_OPENSPACE_PLANE
+ appearance_flags = PLANE_MASTER
+ blend_mode = BLEND_MULTIPLY
+ alpha = 255
+
+/obj/screen/plane_master/openspace/backdrop(mob/mymob)
+ filters = list()
+ filters += filter(type = "drop_shadow", color = "#04080FAA", size = -10)
+ filters += filter(type = "drop_shadow", color = "#04080FAA", size = -15)
+ filters += filter(type = "drop_shadow", color = "#04080FAA", size = -20)
+
+/obj/screen/plane_master/proc/outline(_size, _color)
+ filters += filter(type = "outline", size = _size, color = _color)
+
+/obj/screen/plane_master/proc/shadow(_size, _offset = 0, _x = 0, _y = 0, _color = "#04080FAA")
+ filters += filter(type = "drop_shadow", x = _x, y = _y, color = _color, size = _size, offset = _offset)
+
+/obj/screen/plane_master/proc/clear_filters()
+ filters = list()
+
/obj/screen/plane_master/floor
name = "floor plane master"
plane = FLOOR_PLANE
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index f796f75407..86b4b0c024 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -25,7 +25,7 @@
return ..()
/obj/screen/examine(mob/user)
- return
+ return list()
/obj/screen/orbit()
return
@@ -644,6 +644,12 @@
screen_loc = ui_construct_health
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+/obj/screen/healths/lavaland_elite
+ icon = 'icons/mob/screen_elite.dmi'
+ icon_state = "elite_health0"
+ screen_loc = ui_health
+ mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+
/obj/screen/healthdoll
name = "health doll"
screen_loc = ui_healthdoll
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 472766a59e..f082f2ad16 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -39,23 +39,12 @@
if(..())
return TRUE
user.changeNext_move(CLICK_CD_MELEE)
- if(user.a_intent == INTENT_HARM && stat == DEAD && (butcher_results || guaranteed_butcher_results)) //can we butcher it?
- var/datum/component/butchering/butchering = I.GetComponent(/datum/component/butchering)
- if(butchering && butchering.butchering_enabled)
- to_chat(user, "You begin to butcher [src]...")
- playsound(loc, butchering.butcher_sound, 50, TRUE, -1)
- if(do_mob(user, src, butchering.speed) && Adjacent(I))
- butchering.Butcher(user, src)
- return 1
- else if(I.is_sharp() && !butchering) //give sharp objects butchering functionality, for consistency
- I.AddComponent(/datum/component/butchering, 80 * I.toolspeed)
- attackby(I, user, params) //call the attackby again to refresh and do the butchering check again
- return
return I.attack(src, user)
/obj/item/proc/attack(mob/living/M, mob/living/user)
- SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, M, user)
+ if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, M, user) & COMPONENT_ITEM_NO_ATTACK)
+ return
SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, M, user)
if(item_flags & NOBLUDGEON)
return
@@ -121,7 +110,7 @@
totitemdamage *= 0.5
//CIT CHANGES END HERE
apply_damage(totitemdamage, I.damtype) //CIT CHANGE - replaces I.force with totitemdamage
- if(I.damtype == BRUTE)
+ if(I.damtype == BRUTE && !HAS_TRAIT(src, TRAIT_NOMARROW))
if(prob(33))
I.add_mob_blood(src)
var/turf/location = get_turf(src)
@@ -174,4 +163,3 @@
/obj/item/proc/getweight()
return total_mass || w_class * 1.25
-
diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm
index 299d7f64f8..f76a745fd2 100644
--- a/code/_onclick/observer.dm
+++ b/code/_onclick/observer.dm
@@ -31,7 +31,7 @@
ShiftClickOn(A)
return
if(modifiers["alt"])
- AltClickNoInteract(src, A)
+ altclick_listed_turf(A)
return
if(modifiers["ctrl"])
CtrlClickOn(A)
diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm
index 12b1ca2784..ecd34b7840 100644
--- a/code/_onclick/telekinesis.dm
+++ b/code/_onclick/telekinesis.dm
@@ -106,9 +106,8 @@
/obj/item/tk_grab/examine(user)
if (focus)
- focus.examine(user)
- else
- ..()
+ return focus.examine(user)
+ return ..()
/obj/item/tk_grab/attack_self(mob/user)
if(!focus)
diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm
index 4406655375..3f07eed029 100644
--- a/code/controllers/configuration/config_entry.dm
+++ b/code/controllers/configuration/config_entry.dm
@@ -151,6 +151,7 @@
var/key_mode
var/value_mode
var/splitter = " "
+ var/lowercase = TRUE
/datum/config_entry/keyed_list/New()
. = ..()
@@ -167,7 +168,9 @@
var/key_value = null
if(key_pos || value_mode == VALUE_MODE_FLAG)
- key_name = lowertext(copytext(str_val, 1, key_pos))
+ key_name = copytext(str_val, 1, key_pos)
+ if(lowercase)
+ key_name = lowertext(key_name)
key_value = copytext(str_val, key_pos + 1)
var/new_key
var/new_value
@@ -211,3 +214,27 @@
/datum/config_entry/keyed_list/vv_edit_var(var_name, var_value)
return var_name != "splitter" && ..()
+
+//snowflake for donator things being on one line smh
+/datum/config_entry/multi_keyed_flag
+ vv_VAS = FALSE
+ abstract_type = /datum/config_entry/multi_keyed_flag
+ config_entry_value = list()
+ var/delimiter = "|"
+
+/datum/config_entry/multi_keyed_flag/vv_edit_var(var_name, var_value)
+ if(var_name == NAMEOF(src, delimiter))
+ return FALSE
+ return ..()
+
+/datum/config_entry/multi_keyed_flag/ValidateAndSet(str_val)
+ if(!VASProcCallGuard(str_val))
+ return FALSE
+ str_val = trim(str_val)
+ var/list/keys = splittext(str_val, delimiter)
+ for(var/i in keys)
+ config_entry_value[process_key(i)] = TRUE
+ return length(keys)? TRUE : FALSE
+
+/datum/config_entry/multi_keyed_flag/proc/process_key(key)
+ return trim(key)
diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm
index ea2919f342..a5d27819b8 100644
--- a/code/controllers/configuration/configuration.dm
+++ b/code/controllers/configuration/configuration.dm
@@ -34,7 +34,7 @@
if(_directory)
directory = _directory
if(entries)
- CRASH("[THIS_PROC_TYPE_WEIRD] called more than once!")
+ CRASH("/datum/controller/configuration/Load() called more than once!")
InitEntries()
LoadModes()
if(fexists("[directory]/config.txt") && LoadEntries("config.txt") <= 1)
diff --git a/code/controllers/configuration/entries/donator.dm b/code/controllers/configuration/entries/donator.dm
index b74d5f5839..bb7b5a54c3 100644
--- a/code/controllers/configuration/entries/donator.dm
+++ b/code/controllers/configuration/entries/donator.dm
@@ -1,22 +1,23 @@
-/datum/config_entry/keyed_list/donator_group
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_FLAG
- abstract_type = /datum/config_entry/keyed_list/donator_group
+/datum/config_entry/multi_keyed_flag/donator_group
+ abstract_type = /datum/config_entry/multi_keyed_flag/donator_group
//If we're in the middle of a config load, only do the regeneration afterwards to prevent this from wasting a massive amount of CPU for list regenerations.
-/datum/config_entry/keyed_list/donator_group/ValidateAndSet(str_val, during_load)
+/datum/config_entry/multi_keyed_flag/donator_group/ValidateAndSet(str_val, during_load)
. = ..()
- if(. && during_load)
+ if(. && !during_load)
regenerate_donator_grouping_list()
-/datum/config_entry/keyed_list/donator_group/OnPostload()
+/datum/config_entry/multi_keyed_flag/donator_group/process_key(key)
+ return ckey(key)
+
+/datum/config_entry/multi_keyed_flag/donator_group/OnPostload()
. = ..()
regenerate_donator_grouping_list()
//This is kinda weird in that the config entries are defined here but all the handling/calculations are in __HELPERS/donator_groupings.dm
-/datum/config_entry/keyed_list/donator_group/tier_1_donators
+/datum/config_entry/multi_keyed_flag/donator_group/tier_1_donators
-/datum/config_entry/keyed_list/donator_group/tier_2_donators
+/datum/config_entry/multi_keyed_flag/donator_group/tier_2_donators
-/datum/config_entry/keyed_list/donator_group/tier_3_donators
+/datum/config_entry/multi_keyed_flag/donator_group/tier_3_donators
diff --git a/code/controllers/configuration/entries/dynamic.dm b/code/controllers/configuration/entries/dynamic.dm
new file mode 100644
index 0000000000..7f3e16d57e
--- /dev/null
+++ b/code/controllers/configuration/entries/dynamic.dm
@@ -0,0 +1,90 @@
+/datum/config_entry/flag/dynamic_voting
+
+/datum/config_entry/number/dynamic_high_pop_limit
+ config_entry_value = 55
+ min_val = 1
+
+/datum/config_entry/number/dynamic_pop_per_requirement
+ config_entry_value = 6
+ min_val = 1
+
+/datum/config_entry/number/dynamic_midround_delay_min
+ config_entry_value = 15
+ min_val = 1
+
+/datum/config_entry/number/dynamic_midround_delay_max
+ config_entry_value = 35
+ min_val = 1
+
+/datum/config_entry/number/dynamic_latejoin_delay_min
+ config_entry_value = 5
+ min_val = 1
+
+/datum/config_entry/number/dynamic_latejoin_delay_max
+ config_entry_value = 25
+ min_val = 1
+
+/datum/config_entry/number/dynamic_first_midround_delay_min
+ config_entry_value = 20
+ min_val = 1
+
+/datum/config_entry/number/dynamic_first_midround_delay_max
+ config_entry_value = 40
+ min_val = 1
+
+/datum/config_entry/number/dynamic_first_latejoin_delay_min
+ config_entry_value = 10
+ min_val = 1
+
+/datum/config_entry/number/dynamic_first_latejoin_delay_max
+ config_entry_value = 30
+ min_val = 1
+
+
+/datum/config_entry/keyed_list/dynamic_cost
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
+
+/datum/config_entry/keyed_list/dynamic_weight
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
+
+/datum/config_entry/keyed_list/dynamic_requirements
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM_LIST
+
+/datum/config_entry/keyed_list/dynamic_high_population_requirement
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
+
+/datum/config_entry/number_list/dynamic_second_rule_requirements
+
+/datum/config_entry/number_list/dynamic_third_rule_requirements
+
+/datum/config_entry/number/dynamic_second_rule_high_pop_requirement
+ config_entry_value = 50
+
+/datum/config_entry/number/dynamic_third_rule_high_pop_requirement
+ config_entry_value = 70
+
+/datum/config_entry/number_list/dynamic_hijack_requirements
+
+/datum/config_entry/number/dynamic_hijack_high_population_requirement
+ config_entry_value = 25
+
+/datum/config_entry/number/dynamic_hijack_cost
+ config_entry_value = 5
+
+/datum/config_entry/number/dynamic_glorious_death_cost
+ config_entry_value = 5
+
+/datum/config_entry/number/dynamic_assassinate_cost
+ config_entry_value = 2
+
+/datum/config_entry/number/dynamic_warops_requirement
+ config_entry_value = 60
+ min_val = 0
+
+/datum/config_entry/number/dynamic_warops_cost
+ config_entry_value = 10
+ min_val = 0
diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm
index 36b57a4b7c..61b5788ef8 100644
--- a/code/controllers/configuration/entries/game_options.dm
+++ b/code/controllers/configuration/entries/game_options.dm
@@ -139,6 +139,14 @@
min_val = 0
max_val = 1
+/datum/config_entry/number/suicide_reenter_round_timer
+ config_entry_value = 30
+ min_val = 0
+
+/datum/config_entry/number/roundstart_suicide_time_limit
+ config_entry_value = 30
+ min_val = 0
+
/datum/config_entry/number/shuttle_refuel_delay
config_entry_value = 12000
min_val = 0
@@ -368,46 +376,19 @@
/datum/config_entry/flag/disable_stambuffer
+/datum/config_entry/keyed_list/box_random_engine
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_FLAG
+ lowercase = FALSE
+ splitter = "-"
+
/datum/config_entry/number/auto_transfer_delay
config_entry_value = 72000
min_val = 0
-/datum/config_entry/number/dynamic_high_pop_limit
- config_entry_value = 55
- min_val = 1
+/datum/config_entry/number/marauder_delay_non_reebe
+ config_entry_value = 1800
+ min_val = 0
-/datum/config_entry/number/dynamic_pop_per_requirement
- config_entry_value = 6
- min_val = 1
-
-/datum/config_entry/number/dynamic_midround_delay_min
- config_entry_value = 15
- min_val = 1
-
-/datum/config_entry/number/dynamic_midround_delay_max
- config_entry_value = 35
- min_val = 1
-
-/datum/config_entry/number/dynamic_latejoin_delay_min
- config_entry_value = 5
- min_val = 1
-
-/datum/config_entry/number/dynamic_latejoin_delay_max
- config_entry_value = 25
- min_val = 1
-
-/datum/config_entry/keyed_list/dynamic_cost
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM
-
-/datum/config_entry/keyed_list/dynamic_weight
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM
-
-/datum/config_entry/keyed_list/dynamic_requirements
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM_LIST
-
-/datum/config_entry/keyed_list/dynamic_high_population_requirement
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM
+/datum/config_entry/flag/allow_clockwork_marauder_on_station
+ config_entry_value = TRUE
diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm
index aab71fd015..a412ad2f48 100644
--- a/code/controllers/configuration/entries/general.dm
+++ b/code/controllers/configuration/entries/general.dm
@@ -141,6 +141,11 @@
/datum/config_entry/flag/load_legacy_ranks_only //Loads admin ranks only from legacy admin_ranks.txt, while enabled ranks are mirrored to the database
protection = CONFIG_ENTRY_LOCKED
+/datum/config_entry/flag/mentors_mobname_only
+
+/datum/config_entry/flag/mentor_legacy_system //Defines whether the server uses the legacy mentor system with mentors.txt or the SQL system
+ protection = CONFIG_ENTRY_LOCKED
+
/datum/config_entry/string/hostedby
/datum/config_entry/flag/norespawn
diff --git a/code/controllers/subsystem/adjacent_air.dm b/code/controllers/subsystem/adjacent_air.dm
new file mode 100644
index 0000000000..8395eda708
--- /dev/null
+++ b/code/controllers/subsystem/adjacent_air.dm
@@ -0,0 +1,35 @@
+SUBSYSTEM_DEF(adjacent_air)
+ name = "Atmos Adjacency"
+ flags = SS_BACKGROUND
+ runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
+ wait = 10
+ priority = FIRE_PRIORITY_ATMOS_ADJACENCY
+ var/list/queue = list()
+
+/datum/controller/subsystem/adjacent_air/stat_entry()
+#ifdef TESTING
+ ..("P:[length(queue)], S:[GLOB.atmos_adjacent_savings[1]], T:[GLOB.atmos_adjacent_savings[2]]")
+#else
+ ..("P:[length(queue)]")
+#endif
+
+/datum/controller/subsystem/adjacent_air/Initialize()
+ while(length(queue))
+ fire(mc_check = FALSE)
+ return ..()
+
+/datum/controller/subsystem/adjacent_air/fire(resumed = FALSE, mc_check = TRUE)
+
+ var/list/queue = src.queue
+
+ while (length(queue))
+ var/turf/currT = queue[1]
+ queue.Cut(1,2)
+
+ currT.ImmediateCalculateAdjacentTurfs()
+
+ if(mc_check)
+ if(MC_TICK_CHECK)
+ break
+ else
+ CHECK_TICK
\ No newline at end of file
diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm
index 5bcc911005..1bfdc79d27 100644
--- a/code/controllers/subsystem/air.dm
+++ b/code/controllers/subsystem/air.dm
@@ -382,6 +382,9 @@ SUBSYSTEM_DEF(air)
CHECK_TICK
/datum/controller/subsystem/air/proc/setup_template_machinery(list/atmos_machines)
+ if(!initialized)
+ return
+
for(var/A in atmos_machines)
var/obj/machinery/atmospherics/AM = A
AM.atmosinit()
diff --git a/code/controllers/subsystem/chat.dm b/code/controllers/subsystem/chat.dm
index 37e53e8990..8d4de0c091 100644
--- a/code/controllers/subsystem/chat.dm
+++ b/code/controllers/subsystem/chat.dm
@@ -1,6 +1,6 @@
SUBSYSTEM_DEF(chat)
name = "Chat"
- flags = SS_TICKER|SS_NO_INIT
+ flags = SS_TICKER
wait = 1
priority = FIRE_PRIORITY_CHAT
init_order = INIT_ORDER_CHAT
@@ -29,6 +29,7 @@ SUBSYSTEM_DEF(chat)
target = GLOB.clients
//Some macros remain in the string even after parsing and fuck up the eventual output
+ var/original_message = message
message = replacetext(message, "\improper", "")
message = replacetext(message, "\proper", "")
if(handle_whitespace)
@@ -45,6 +46,12 @@ SUBSYSTEM_DEF(chat)
for(var/I in target)
var/client/C = CLIENT_FROM_VAR(I) //Grab us a client if possible
+ if(!C)
+ return
+
+ //Send it to the old style output window.
+ SEND_TEXT(C, original_message)
+
if(!C?.chatOutput || C.chatOutput.broken) //A player who hasn't updated his skin file.
continue
@@ -57,6 +64,12 @@ SUBSYSTEM_DEF(chat)
else
var/client/C = CLIENT_FROM_VAR(target) //Grab us a client if possible
+ if(!C)
+ return
+
+ //Send it to the old style output window.
+ SEND_TEXT(C, original_message)
+
if(!C?.chatOutput || C.chatOutput.broken) //A player who hasn't updated his skin file.
return
diff --git a/code/controllers/subsystem/dcs.dm b/code/controllers/subsystem/dcs.dm
index c1e101a0e7..faf95fd319 100644
--- a/code/controllers/subsystem/dcs.dm
+++ b/code/controllers/subsystem/dcs.dm
@@ -1,6 +1,27 @@
-SUBSYSTEM_DEF(dcs)
+PROCESSING_SUBSYSTEM_DEF(dcs)
name = "Datum Component System"
- flags = SS_NO_INIT | SS_NO_FIRE
+ flags = SS_NO_INIT
+ var/list/elements_by_type = list()
-/datum/controller/subsystem/dcs/Recover()
+/datum/controller/subsystem/processing/dcs/Recover()
comp_lookup = SSdcs.comp_lookup
+
+/datum/controller/subsystem/processing/dcs/proc/GetElement(datum/element/eletype, ...)
+ var/element_id = eletype
+
+ if(initial(eletype.element_flags) & ELEMENT_BESPOKE)
+ var/list/fullid = list("[eletype]")
+ for(var/i in initial(eletype.id_arg_index) to length(args))
+ var/argument = args[i]
+ if(istext(argument) || isnum(argument))
+ fullid += "[argument]"
+ else
+ fullid += "[REF(argument)]"
+ element_id = fullid.Join("&")
+
+ . = elements_by_type[element_id]
+ if(.)
+ return
+ if(!ispath(eletype, /datum/element))
+ CRASH("Attempted to instantiate [eletype] as a /datum/element")
+ . = elements_by_type[element_id] = new eletype
\ No newline at end of file
diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm
index eec9f63a12..f8ca1e7eae 100644
--- a/code/controllers/subsystem/garbage.dm
+++ b/code/controllers/subsystem/garbage.dm
@@ -98,7 +98,7 @@ SUBSYSTEM_DEF(garbage)
state = SS_RUNNING
break
-
+
/datum/controller/subsystem/garbage/proc/HandleQueue(level = GC_QUEUE_CHECK)
@@ -266,8 +266,8 @@ SUBSYSTEM_DEF(garbage)
D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED
var/start_time = world.time
var/start_tick = world.tick_usage
+ SEND_SIGNAL(D, COMSIG_PARENT_QDELETING, force) // Let the (remaining) components know about the result of Destroy
var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up.
- SEND_SIGNAL(D, COMSIG_PARENT_QDELETED, force, hint) // Let the (remaining) components know about the result of Destroy
if(world.time != start_time)
I.slept_destroy++
else
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index efa6b8b59d..af7ae825f4 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -658,6 +658,46 @@ SUBSYSTEM_DEF(job)
message_admins(msg)
CRASH(msg)
+/datum/controller/subsystem/job/proc/equip_loadout(mob/dead/new_player/N, mob/living/M, equipbackpackstuff)
+ var/mob/the_mob = N
+ if(!the_mob)
+ the_mob = M // cause this doesn't get assigned if player is a latejoiner
+ if(the_mob.client && the_mob.client.prefs && (the_mob.client.prefs.chosen_gear && the_mob.client.prefs.chosen_gear.len))
+ if(!ishuman(M))//no silicons allowed
+ return
+ for(var/i in the_mob.client.prefs.chosen_gear)
+ var/datum/gear/G = i
+ G = GLOB.loadout_items[slot_to_string(initial(G.category))][initial(G.name)]
+ if(!G)
+ continue
+ var/permitted = TRUE
+ if(G.restricted_roles && G.restricted_roles.len && !(M.mind.assigned_role in G.restricted_roles))
+ permitted = FALSE
+ if(G.donoritem && !G.donator_ckey_check(the_mob.client.ckey))
+ permitted = FALSE
+ if(!equipbackpackstuff && G.category == SLOT_IN_BACKPACK)//snowflake check since plopping stuff in the backpack doesnt work for pre-job equip loadout stuffs
+ permitted = FALSE
+ if(equipbackpackstuff && G.category != SLOT_IN_BACKPACK)//ditto
+ permitted = FALSE
+ if(!permitted)
+ continue
+ var/obj/item/I = new G.path
+ if(!M.equip_to_slot_if_possible(I, G.category, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // If the job's dresscode compliant, try to put it in its slot, first
+ if(iscarbon(M))
+ var/mob/living/carbon/C = M
+ var/obj/item/storage/backpack/B = C.back
+ if(!B || !SEND_SIGNAL(B, COMSIG_TRY_STORAGE_INSERT, I, null, TRUE, TRUE)) // Otherwise, try to put it in the backpack, for carbons.
+ I.forceMove(get_turf(C))
+ else if(!M.equip_to_slot_if_possible(I, SLOT_IN_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // Otherwise, try to put it in the backpack
+ I.forceMove(get_turf(M)) // If everything fails, just put it on the floor under the mob.
+
+/datum/controller/subsystem/job/proc/FreeRole(rank)
+ if(!rank)
+ return
+ var/datum/job/job = GetJob(rank)
+ if(!job)
+ return FALSE
+ job.current_positions = max(0, job.current_positions - 1)
///////////////////////////////////
//Keeps track of all living heads//
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index dec6cf8466..8c8ad2d337 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -14,6 +14,7 @@ SUBSYSTEM_DEF(mapping)
var/list/ruins_templates = list()
var/list/space_ruins_templates = list()
var/list/lava_ruins_templates = list()
+ var/datum/space_level/isolated_ruins_z //Created on demand during ruin loading.
var/list/shuttle_templates = list()
var/list/shelter_templates = list()
@@ -25,6 +26,7 @@ SUBSYSTEM_DEF(mapping)
var/list/datum/turf_reservations //list of turf reservations
var/list/used_turfs = list() //list of turf = datum/turf_reservation
+ var/list/reservation_ready = list()
var/clearing_reserved_turfs = FALSE
// Z-manager stuff
@@ -89,13 +91,14 @@ SUBSYSTEM_DEF(mapping)
var/list/space_ruins = levels_by_trait(ZTRAIT_SPACE_RUINS)
if (space_ruins.len)
seedRuins(space_ruins, CONFIG_GET(number/space_budget), /area/space, space_ruins_templates)
+ SSmapping.seedStation()
loading_ruins = FALSE
#endif
repopulate_sorted_areas()
// Set up Z-level transitions.
setup_map_transitions()
generate_station_area_list()
- initialize_reserved_level()
+ initialize_reserved_level(transit.z_value)
return ..()
/* Nuke threats, for making the blue tiles on the station go RED
@@ -361,6 +364,8 @@ GLOBAL_LIST_EMPTY(the_station_areas)
lava_ruins_templates[R.name] = R
else if(istype(R, /datum/map_template/ruin/space))
space_ruins_templates[R.name] = R
+ else if(istype(R, /datum/map_template/ruin/station))
+ station_room_templates[R.name] = R
/datum/controller/subsystem/mapping/proc/preloadShuttleTemplates()
var/list/unbuyable = generateMapList("[global.config.directory]/unbuyableshuttles.txt")
@@ -442,7 +447,7 @@ GLOBAL_LIST_EMPTY(the_station_areas)
GLOB.the_gateway.wait = world.time
/datum/controller/subsystem/mapping/proc/RequestBlockReservation(width, height, z, type = /datum/turf_reservation, turf_type_override, border_type_override)
- UNTIL(initialized && !clearing_reserved_turfs)
+ UNTIL((!z || reservation_ready["[z]"]) && !clearing_reserved_turfs)
var/datum/turf_reservation/reserve = new type
if(turf_type_override)
reserve.turf_type = turf_type_override
@@ -454,8 +459,9 @@ GLOBAL_LIST_EMPTY(the_station_areas)
return reserve
//If we didn't return at this point, theres a good chance we ran out of room on the exisiting reserved z levels, so lets try a new one
num_of_res_levels += 1
- var/newReserved = add_new_zlevel("Transit/Reserved [num_of_res_levels]", list(ZTRAIT_RESERVED = TRUE))
- if(reserve.Reserve(width, height, newReserved))
+ var/datum/space_level/newReserved = add_new_zlevel("Transit/Reserved [num_of_res_levels]", list(ZTRAIT_RESERVED = TRUE))
+ initialize_reserved_level(newReserved.z_value)
+ if(reserve.Reserve(width, height, newReserved.z_value))
return reserve
else
if(!level_trait(z, ZTRAIT_RESERVED))
@@ -467,19 +473,22 @@ GLOBAL_LIST_EMPTY(the_station_areas)
QDEL_NULL(reserve)
//This is not for wiping reserved levels, use wipe_reservations() for that.
-/datum/controller/subsystem/mapping/proc/initialize_reserved_level()
+/datum/controller/subsystem/mapping/proc/initialize_reserved_level(z)
UNTIL(!clearing_reserved_turfs) //regardless, lets add a check just in case.
clearing_reserved_turfs = TRUE //This operation will likely clear any existing reservations, so lets make sure nothing tries to make one while we're doing it.
- for(var/i in levels_by_trait(ZTRAIT_RESERVED))
- var/turf/A = get_turf(locate(SHUTTLE_TRANSIT_BORDER,SHUTTLE_TRANSIT_BORDER,i))
- var/turf/B = get_turf(locate(world.maxx - SHUTTLE_TRANSIT_BORDER,world.maxy - SHUTTLE_TRANSIT_BORDER,i))
- var/block = block(A, B)
- for(var/t in block)
- // No need to empty() these, because it's world init and they're
- // already /turf/open/space/basic.
- var/turf/T = t
- T.flags_1 |= UNUSED_RESERVATION_TURF_1
- unused_turfs["[i]"] = block
+ if(!level_trait(z,ZTRAIT_RESERVED))
+ clearing_reserved_turfs = FALSE
+ CRASH("Invalid z level prepared for reservations.")
+ var/turf/A = get_turf(locate(SHUTTLE_TRANSIT_BORDER,SHUTTLE_TRANSIT_BORDER,z))
+ var/turf/B = get_turf(locate(world.maxx - SHUTTLE_TRANSIT_BORDER,world.maxy - SHUTTLE_TRANSIT_BORDER,z))
+ var/block = block(A, B)
+ for(var/t in block)
+ // No need to empty() these, because it's world init and they're
+ // already /turf/open/space/basic.
+ var/turf/T = t
+ T.flags_1 |= UNUSED_RESERVATION_TURF_1
+ unused_turfs["[z]"] = block
+ reservation_ready["[z]"] = TRUE
clearing_reserved_turfs = FALSE
/datum/controller/subsystem/mapping/proc/reserve_turfs(list/turfs)
@@ -513,3 +522,20 @@ GLOBAL_LIST_EMPTY(the_station_areas)
for(var/B in areas)
var/area/A = B
A.reg_in_areas_in_z()
+
+/datum/controller/subsystem/mapping/proc/get_isolated_ruin_z()
+ if(!isolated_ruins_z)
+ isolated_ruins_z = add_new_zlevel("Isolated Ruins/Reserved", list(ZTRAIT_RESERVED = TRUE, ZTRAIT_ISOLATED_RUINS = TRUE))
+ initialize_reserved_level(isolated_ruins_z.z_value)
+ return isolated_ruins_z.z_value
+
+ // Station Ruins
+/datum/controller/subsystem/mapping
+ var/list/station_room_templates = list()
+
+/datum/controller/subsystem/mapping/proc/seedStation()
+ for(var/V in GLOB.stationroom_landmarks)
+ var/obj/effect/landmark/stationroom/LM = V
+ LM.load()
+ if(GLOB.stationroom_landmarks.len)
+ seedStation() //I'm sure we can trust everyone not to insert a 1x1 rooms which loads a landmark which loads a landmark which loads a la...
diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm
index 2e2f7edd99..18667053d4 100644
--- a/code/controllers/subsystem/pai.dm
+++ b/code/controllers/subsystem/pai.dm
@@ -69,6 +69,10 @@ SUBSYSTEM_DEF(pai)
candidate.comments = copytext(sanitize(candidate.comments),1,MAX_MESSAGE_LEN)
if("submit")
+ if(isobserver(usr))
+ var/mob/dead/observer/O = usr
+ if(!O.can_reenter_round())
+ return FALSE
if(candidate)
candidate.ready = 1
for(var/obj/item/paicard/p in pai_card_list)
@@ -148,6 +152,8 @@ SUBSYSTEM_DEF(pai)
continue
if(!(ROLE_PAI in G.client.prefs.be_special))
continue
+ if(!G.can_reenter_round()) // this should use notify_ghosts() instead one day.
+ return FALSE
to_chat(G, "[user] is requesting a pAI personality! Use the pAI button to submit yourself as one.")
addtimer(CALLBACK(src, .proc/spam_again), spam_delay)
var/list/available = list()
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index 1b7cade71f..8329493818 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -12,6 +12,8 @@ SUBSYSTEM_DEF(persistence)
var/list/obj/structure/chisel_message/chisel_messages = list()
var/list/saved_messages = list()
var/list/saved_modes = list(1,2,3)
+ var/list/saved_dynamic_rules = list(list(),list(),list())
+ var/list/saved_threat_levels = list(1,1,1)
var/list/saved_maps
var/list/saved_trophies = list()
var/list/spawned_objects = list()
@@ -27,6 +29,7 @@ SUBSYSTEM_DEF(persistence)
LoadChiselMessages()
LoadTrophies()
LoadRecentModes()
+ LoadRecentThreats()
LoadRecentMaps()
LoadPhotoPersistence()
if(CONFIG_GET(flag/use_antag_rep))
@@ -166,6 +169,15 @@ SUBSYSTEM_DEF(persistence)
return
saved_modes = json["data"]
+/datum/controller/subsystem/persistence/proc/LoadRecentThreats()
+ var/json_file = file("data/RecentThreatLevels.json")
+ if(!fexists(json_file))
+ return
+ var/list/json = json_decode(file2text(json_file))
+ if(!json)
+ return
+ saved_threat_levels = json["data"]
+
/datum/controller/subsystem/persistence/proc/LoadRecentMaps()
var/json_file = file("data/RecentMaps.json")
if(!fexists(json_file))
@@ -216,6 +228,10 @@ SUBSYSTEM_DEF(persistence)
CollectSecretSatchels()
CollectTrophies()
CollectRoundtype()
+ if(istype(SSticker.mode, /datum/game_mode/dynamic))
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ CollectThreatLevel(mode)
+ CollectRulesets(mode)
RecordMaps()
SavePhotoPersistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION.
if(CONFIG_GET(flag/use_antag_rep))
@@ -372,6 +388,28 @@ SUBSYSTEM_DEF(persistence)
fdel(json_file)
WRITE_FILE(json_file, json_encode(file_data))
+/datum/controller/subsystem/persistence/proc/CollectThreatLevel(var/datum/game_mode/dynamic/mode)
+ saved_threat_levels[3] = saved_threat_levels[2]
+ saved_threat_levels[2] = saved_threat_levels [1]
+ saved_threat_levels[1] = mode.threat_level
+ var/json_file = file("data/RecentThreatLevels.json")
+ var/list/file_data = list()
+ file_data["data"] = saved_threat_levels
+ fdel(json_file)
+ WRITE_FILE(json_file, json_encode(file_data))
+
+/datum/controller/subsystem/persistence/proc/CollectRulesets(var/datum/game_mode/dynamic/mode)
+ saved_dynamic_rules[3] = saved_dynamic_rules[2]
+ saved_dynamic_rules[2] = saved_dynamic_rules[1]
+ saved_dynamic_rules[1] = list()
+ for(var/datum/dynamic_ruleset/ruleset in mode.executed_rules)
+ saved_dynamic_rules[1] += ruleset.config_tag
+ var/json_file = file("data/RecentRulesets.json")
+ var/list/file_data = list()
+ file_data["data"] = saved_dynamic_rules
+ fdel(json_file)
+ WRITE_FILE(json_file, json_encode(file_data))
+
/datum/controller/subsystem/persistence/proc/RecordMaps()
saved_maps = saved_maps?.len ? list("[SSmapping.config.map_name]") | saved_maps : list("[SSmapping.config.map_name]")
var/json_file = file("data/RecentMaps.json")
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index 4af54b8c70..0b9284a144 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -12,27 +12,40 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
var/list/quirk_names_by_path = list()
var/list/quirk_points = list() //Assoc. list of quirk names and their "point cost"; positive numbers are good traits, and negative ones are bad
var/list/quirk_objects = list() //A list of all quirk objects in the game, since some may process
+ var/list/quirk_blacklist = list() //A list a list of quirks that can not be used with each other. Format: list(quirk1,quirk2),list(quirk3,quirk4)
/datum/controller/subsystem/processing/quirks/Initialize(timeofday)
if(!quirks.len)
SetupQuirks()
+ quirk_blacklist = list(list("Blind","Nearsighted"),list("Jolly","Depression","Apathetic"),list("Ageusia","Deviant Tastes"),list("Ananas Affinity","Ananas Aversion"))
return ..()
/datum/controller/subsystem/processing/quirks/proc/SetupQuirks()
- for(var/V in subtypesof(/datum/quirk))
+// Sort by Positive, Negative, Neutral; and then by name
+ var/list/quirk_list = sortList(subtypesof(/datum/quirk), /proc/cmp_quirk_asc)
+
+ for(var/V in quirk_list)
var/datum/quirk/T = V
quirks[initial(T.name)] = T
quirk_points[initial(T.name)] = initial(T.value)
quirk_names_by_path[T] = initial(T.name)
/datum/controller/subsystem/processing/quirks/proc/AssignQuirks(mob/living/user, client/cli, spawn_effects, roundstart = FALSE, datum/job/job, silent = FALSE, mob/to_chat_target)
- GenerateQuirks(cli)
- var/list/quirks = cli.prefs.character_quirks.Copy()
+ var/badquirk = FALSE
+ var/list/my_quirks = cli.prefs.all_quirks.Copy()
var/list/cut
- if(job && job.blacklisted_quirks)
- cut = filter_quirks(quirks, job)
- for(var/V in quirks)
- user.add_quirk(V, spawn_effects)
+ if(job?.blacklisted_quirks)
+ cut = filter_quirks(my_quirks, job)
+ for(var/V in my_quirks)
+ var/datum/quirk/Q = quirks[V]
+ if(Q)
+ user.add_quirk(Q, spawn_effects)
+ else
+ stack_trace("Invalid quirk \"[V]\" in client [cli.ckey] preferences")
+ cli.prefs.all_quirks -= V
+ badquirk = TRUE
+ if(badquirk)
+ cli.prefs.save_character()
if(!silent && LAZYLEN(cut))
to_chat(to_chat_target || user, "All of your non-neutral character quirks have been cut due to these quirks conflicting with your job assignment: [english_list(cut)].")
@@ -50,28 +63,28 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
for(var/i in quirk_names)
. += quirk_points_by_name(i)
-/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/quirks, datum/job/job)
+/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/our_quirks, datum/job/job)
var/list/cut = list()
var/list/banned_names = list()
for(var/i in job.blacklisted_quirks)
var/name = quirk_name_by_path(i)
if(name)
banned_names += name
- var/list/blacklisted = quirks & banned_names
+ var/list/blacklisted = our_quirks & banned_names
if(length(blacklisted))
for(var/i in blacklisted)
- quirks -= i
+ our_quirks -= i
cut += i
/* //Code to automatically reduce positive quirks until balance is even.
- var/points_used = total_points(quirks)
+ var/points_used = total_points(our_quirks)
if(points_used > 0)
//they owe us points, let's collect.
- for(var/i in quirks)
+ for(var/i in our_quirks)
var/points = quirk_points_by_name(i)
if(points > 0)
cut += i
- quirks -= i
+ our_quirks -= i
points_used -= points
if(points_used <= 0)
break
@@ -79,14 +92,9 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
//Nah, let's null all non-neutrals out.
if(cut.len)
- for(var/i in quirks)
+ for(var/i in our_quirks)
if(quirk_points_by_name(i) != 0)
//cut += i -- Commented out: Only show the ones that triggered the quirk purge.
- quirks -= i
+ our_quirks -= i
return cut
-
-/datum/controller/subsystem/processing/quirks/proc/GenerateQuirks(client/user)
- if(user.prefs.character_quirks.len)
- return
- user.prefs.character_quirks = user.prefs.all_quirks
diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm
index 05c76619d9..ab27658efd 100644
--- a/code/controllers/subsystem/research.dm
+++ b/code/controllers/subsystem/research.dm
@@ -4,24 +4,32 @@ SUBSYSTEM_DEF(research)
priority = FIRE_PRIORITY_RESEARCH
wait = 10
init_order = INIT_ORDER_RESEARCH
+ //TECHWEB STATIC
+ var/list/techweb_nodes = list() //associative id = node datum
+ var/list/techweb_designs = list() //associative id = node datum
+ var/list/datum/techweb/techwebs = list()
+ var/datum/techweb/science/science_tech
+ var/datum/techweb/admin/admin_tech
+ var/datum/techweb_node/error_node/error_node //These two are what you get if a node/design is deleted and somehow still stored in a console.
+ var/datum/design/error_design/error_design
+
+ //ERROR LOGGING
var/list/invalid_design_ids = list() //associative id = number of times
var/list/invalid_node_ids = list() //associative id = number of times
var/list/invalid_node_boost = list() //associative id = error message
+
var/list/obj/machinery/rnd/server/servers = list()
- var/datum/techweb/science/science_tech
- var/datum/techweb/admin/admin_tech
- var/list/techweb_nodes = list() //associative id = node datum
- var/list/techweb_categories = list() //category name = list(node.id = node)
- var/list/techweb_designs = list() //associative id = node datum
- var/list/techweb_nodes_starting = list() //associative id = node datum
+
+ var/list/techweb_nodes_starting = list() //associative id = TRUE
+ var/list/techweb_categories = list() //category name = list(node.id = TRUE)
var/list/techweb_boost_items = list() //associative double-layer path = list(id = list(point_type = point_discount))
- var/list/techweb_nodes_hidden = list() //Nodes that should be hidden by default.
+ var/list/techweb_nodes_hidden = list() //Node ids that should be hidden by default.
var/list/techweb_point_items = list( //path = list(point type = value)
/obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
/obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 5000), // Cit three more anomalys anomalys
/obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 7500),
/obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 10000),
- // - Slime Extracts! -
+ // - Slime Extracts! -
/obj/item/slime_extract/grey = list(TECHWEB_POINT_TYPE_GENERIC = 500), // Adds in slime core deconing
/obj/item/slime_extract/metal = list(TECHWEB_POINT_TYPE_GENERIC = 750),
/obj/item/slime_extract/purple = list(TECHWEB_POINT_TYPE_GENERIC = 750),
@@ -294,6 +302,8 @@ SUBSYSTEM_DEF(research)
science_tech = new /datum/techweb/science
admin_tech = new /datum/techweb/admin
autosort_categories()
+ error_design = new
+ error_node = new
return ..()
/datum/controller/subsystem/research/fire()
@@ -330,6 +340,191 @@ SUBSYSTEM_DEF(research)
for(var/i in techweb_nodes)
var/datum/techweb_node/I = techweb_nodes[i]
if(techweb_categories[I.category])
- techweb_categories[I.category][I.id] = I
+ techweb_categories[I.category][I.id] = TRUE
else
- techweb_categories[I.category] = list(I.id = I)
+ techweb_categories[I.category] = list(I.id = TRUE)
+
+/datum/controller/subsystem/research/proc/techweb_node_by_id(id)
+ return techweb_nodes[id] || error_node
+
+/datum/controller/subsystem/research/proc/techweb_design_by_id(id)
+ return techweb_designs[id] || error_design
+
+/datum/controller/subsystem/research/proc/on_design_deletion(datum/design/D)
+ for(var/i in techweb_nodes)
+ var/datum/techweb_node/TN = techwebs[i]
+ TN.on_design_deletion(TN)
+ for(var/i in techwebs)
+ var/datum/techweb/T = i
+ T.recalculate_nodes(TRUE)
+
+/datum/controller/subsystem/research/proc/on_node_deletion(datum/techweb_node/TN)
+ for(var/i in techweb_nodes)
+ var/datum/techweb_node/TN2 = techwebs[i]
+ TN2.on_node_deletion(TN)
+ for(var/i in techwebs)
+ var/datum/techweb/T = i
+ T.recalculate_nodes(TRUE)
+
+/datum/controller/subsystem/research/proc/initialize_all_techweb_nodes(clearall = FALSE)
+ if(islist(techweb_nodes) && clearall)
+ QDEL_LIST(techweb_nodes)
+ if(islist(techweb_nodes_starting && clearall))
+ techweb_nodes_starting.Cut()
+ var/list/returned = list()
+ for(var/path in subtypesof(/datum/techweb_node))
+ var/datum/techweb_node/TN = path
+ if(isnull(initial(TN.id)))
+ continue
+ TN = new path
+ if(returned[initial(TN.id)])
+ stack_trace("WARNING: Techweb node ID clash with ID [initial(TN.id)] detected! Path: [path]")
+ errored_datums[TN] = initial(TN.id)
+ continue
+ returned[initial(TN.id)] = TN
+ if(TN.starting_node)
+ techweb_nodes_starting[TN.id] = TRUE
+ for(var/id in techweb_nodes)
+ var/datum/techweb_node/TN = techweb_nodes[id]
+ TN.Initialize()
+ techweb_nodes = returned
+ if (!verify_techweb_nodes()) //Verify all nodes have ids and such.
+ stack_trace("Invalid techweb nodes detected")
+ calculate_techweb_nodes()
+ calculate_techweb_boost_list()
+ if (!verify_techweb_nodes()) //Verify nodes and designs have been crosslinked properly.
+ CRASH("Invalid techweb nodes detected")
+
+/datum/controller/subsystem/research/proc/initialize_all_techweb_designs(clearall = FALSE)
+ if(islist(techweb_designs) && clearall)
+ QDEL_LIST(techweb_designs)
+ var/list/returned = list()
+ for(var/path in subtypesof(/datum/design))
+ var/datum/design/DN = path
+ if(isnull(initial(DN.id)))
+ stack_trace("WARNING: Design with null ID detected. Build path: [initial(DN.build_path)]")
+ continue
+ else if(initial(DN.id) == DESIGN_ID_IGNORE)
+ continue
+ DN = new path
+ if(returned[initial(DN.id)])
+ stack_trace("WARNING: Design ID clash with ID [initial(DN.id)] detected! Path: [path]")
+ errored_datums[DN] = initial(DN.id)
+ continue
+ returned[initial(DN.id)] = DN
+ techweb_designs = returned
+ verify_techweb_designs()
+
+/datum/controller/subsystem/research/proc/verify_techweb_nodes()
+ . = TRUE
+ for(var/n in techweb_nodes)
+ var/datum/techweb_node/N = techweb_nodes[n]
+ if(!istype(N))
+ WARNING("Invalid research node with ID [n] detected and removed.")
+ techweb_nodes -= n
+ research_node_id_error(n)
+ . = FALSE
+ for(var/p in N.prereq_ids)
+ var/datum/techweb_node/P = techweb_nodes[p]
+ if(!istype(P))
+ WARNING("Invalid research prerequisite node with ID [p] detected in node [N.display_name]\[[N.id]\] removed.")
+ N.prereq_ids -= p
+ research_node_id_error(p)
+ . = FALSE
+ for(var/d in N.design_ids)
+ var/datum/design/D = techweb_designs[d]
+ if(!istype(D))
+ WARNING("Invalid research design with ID [d] detected in node [N.display_name]\[[N.id]\] removed.")
+ N.design_ids -= d
+ design_id_error(d)
+ . = FALSE
+ for(var/u in N.unlock_ids)
+ var/datum/techweb_node/U = techweb_nodes[u]
+ if(!istype(U))
+ WARNING("Invalid research unlock node with ID [u] detected in node [N.display_name]\[[N.id]\] removed.")
+ N.unlock_ids -= u
+ research_node_id_error(u)
+ . = FALSE
+ for(var/p in N.boost_item_paths)
+ if(!ispath(p))
+ N.boost_item_paths -= p
+ WARNING("[p] is not a valid path.")
+ node_boost_error(N.id, "[p] is not a valid path.")
+ . = FALSE
+ var/list/points = N.boost_item_paths[p]
+ if(islist(points))
+ for(var/i in points)
+ if(!isnum(points[i]))
+ WARNING("[points[i]] is not a valid number.")
+ node_boost_error(N.id, "[points[i]] is not a valid number.")
+ . = FALSE
+ else if(!point_types[i])
+ WARNING("[i] is not a valid point type.")
+ node_boost_error(N.id, "[i] is not a valid point type.")
+ . = FALSE
+ else if(!isnull(points))
+ N.boost_item_paths -= p
+ node_boost_error(N.id, "No valid list.")
+ WARNING("No valid list.")
+ . = FALSE
+ CHECK_TICK
+
+/datum/controller/subsystem/research/proc/verify_techweb_designs()
+ for(var/d in techweb_designs)
+ var/datum/design/D = techweb_designs[d]
+ if(!istype(D))
+ stack_trace("WARNING: Invalid research design with ID [d] detected and removed.")
+ techweb_designs -= d
+ CHECK_TICK
+
+/datum/controller/subsystem/research/proc/research_node_id_error(id)
+ if(invalid_node_ids[id])
+ invalid_node_ids[id]++
+ else
+ invalid_node_ids[id] = 1
+
+/datum/controller/subsystem/research/proc/design_id_error(id)
+ if(invalid_design_ids[id])
+ invalid_design_ids[id]++
+ else
+ invalid_design_ids[id] = 1
+
+/datum/controller/subsystem/research/proc/calculate_techweb_nodes()
+ for(var/design_id in techweb_designs)
+ var/datum/design/D = techweb_designs[design_id]
+ D.unlocked_by.Cut()
+ for(var/node_id in techweb_nodes)
+ var/datum/techweb_node/node = techweb_nodes[node_id]
+ node.unlock_ids = list()
+ for(var/i in node.design_ids)
+ var/datum/design/D = techweb_designs[i]
+ node.design_ids[i] = TRUE
+ D.unlocked_by += node.id
+ if(node.hidden)
+ techweb_nodes_hidden[node.id] = TRUE
+ CHECK_TICK
+ generate_techweb_unlock_linking()
+
+/datum/controller/subsystem/research/proc/generate_techweb_unlock_linking()
+ for(var/node_id in techweb_nodes) //Clear all unlock links to avoid duplication.
+ var/datum/techweb_node/node = techweb_nodes[node_id]
+ node.unlock_ids = list()
+ for(var/node_id in techweb_nodes)
+ var/datum/techweb_node/node = techweb_nodes[node_id]
+ for(var/prereq_id in node.prereq_ids)
+ var/datum/techweb_node/prereq_node = techweb_node_by_id(prereq_id)
+ prereq_node.unlock_ids[node.id] = node
+
+/datum/controller/subsystem/research/proc/calculate_techweb_boost_list(clearall = FALSE)
+ if(clearall)
+ techweb_boost_items = list()
+ for(var/node_id in techweb_nodes)
+ var/datum/techweb_node/node = techweb_nodes[node_id]
+ for(var/path in node.boost_item_paths)
+ if(!ispath(path))
+ continue
+ if(length(techweb_boost_items[path]))
+ techweb_boost_items[path][node.id] = node.boost_item_paths[path]
+ else
+ techweb_boost_items[path] = list(node.id = node.boost_item_paths[path])
+ CHECK_TICK
diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm
index 51a2761f74..fe40b3f01f 100644
--- a/code/controllers/subsystem/shuttle.dm
+++ b/code/controllers/subsystem/shuttle.dm
@@ -638,3 +638,11 @@ SUBSYSTEM_DEF(shuttle)
C.update_hidden_docking_ports(remove_images, add_images)
QDEL_LIST(remove_images)
+
+/datum/controller/subsystem/shuttle/proc/autoEnd() //CIT CHANGE - allows shift to end after 2 hours have passed.
+ if((world.realtime - SSshuttle.realtimeofstart) > auto_call && EMERGENCY_IDLE_OR_RECALLED) //2 hours
+ SSshuttle.emergency.request(silent = TRUE)
+ priority_announce("The shift has come to an end and the shuttle called. [seclevel2num(get_security_level()) == SEC_LEVEL_RED ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [emergency.timeLeft(600)] minutes.", null, "shuttlecalled", "Priority")
+ log_game("Round time limit reached. Shuttle has been auto-called.")
+ message_admins("Round time limit reached. Shuttle called.")
+ emergencyNoRecall = TRUE
diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm
index 4b91944ec8..48da15f67e 100644
--- a/code/controllers/subsystem/throwing.dm
+++ b/code/controllers/subsystem/throwing.dm
@@ -147,6 +147,11 @@ SUBSYSTEM_DEF(throwing)
if (callback)
callback.Invoke()
+ if(!thrownthing.zfalling) // I don't think you can zfall while thrown but hey, just in case.
+ var/turf/T = get_turf(thrownthing)
+ if(T && thrownthing.has_gravity(T))
+ T.zFall(thrownthing)
+
qdel(src)
/datum/thrownthing/proc/hit_atom(atom/A)
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 2ab06f4d59..890725fbb1 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -384,8 +384,8 @@ SUBSYSTEM_DEF(ticker)
captainless=0
if(player.mind.assigned_role != player.mind.special_role)
SSjob.EquipRank(N, player.mind.assigned_role, 0)
- if(CONFIG_GET(flag/roundstart_traits) && ishuman(N.new_character))
- SSquirks.AssignQuirks(N.new_character, N.client, TRUE, TRUE, SSjob.GetJob(player.mind.assigned_role), FALSE, N)
+ if(CONFIG_GET(flag/roundstart_traits) && ishuman(N.new_character))
+ SSquirks.AssignQuirks(N.new_character, N.client, TRUE, TRUE, SSjob.GetJob(player.mind.assigned_role), FALSE, N)
CHECK_TICK
if(captainless)
for(var/mob/dead/new_player/N in GLOB.player_list)
@@ -479,7 +479,8 @@ SUBSYSTEM_DEF(ticker)
if(SSticker.timeLeft < 900)
SSticker.timeLeft = 900
SSticker.modevoted = TRUE
- SSvote.initiate_vote("roundtype","server",TRUE)
+ var/dynamic = CONFIG_GET(flag/dynamic_voting)
+ SSvote.initiate_vote(dynamic ? "dynamic" : "roundtype","server",TRUE)
/datum/controller/subsystem/ticker/Recover()
current_state = SSticker.current_state
diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm
index ee1f5b8c3d..1ad4a15ee7 100644
--- a/code/controllers/subsystem/traumas.dm
+++ b/code/controllers/subsystem/traumas.dm
@@ -40,7 +40,7 @@ SUBSYSTEM_DEF(traumas)
"cats" = strings(PHOBIA_FILE, "cats"),
"syndicate"= strings(PHOBIA_FILE, "syndicate"),
"eye" = strings(PHOBIA_FILE, "eye")
- )
+ )
phobia_mobs = list("spiders" = typecacheof(list(/mob/living/simple_animal/hostile/poison/giant_spider)),
"security" = typecacheof(list(/mob/living/simple_animal/bot/secbot, /mob/living/simple_animal/bot/ed209)),
@@ -87,13 +87,13 @@ SUBSYSTEM_DEF(traumas)
"skeletons" = typecacheof(list(/obj/item/organ/tongue/bone, /obj/item/clothing/suit/armor/bone, /obj/item/stack/sheet/bone,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton,
/obj/effect/decal/remains/human)),
- "conspiracies" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_security,
+ "conspiracies" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_security,
/obj/item/clothing/under/rank/chief_engineer, /obj/item/clothing/under/rank/chief_medical_officer,
/obj/item/clothing/under/rank/head_of_personnel, /obj/item/clothing/under/rank/research_director,
/obj/item/clothing/under/rank/head_of_security/grey, /obj/item/clothing/under/rank/head_of_security/alt,
/obj/item/clothing/under/rank/research_director/alt, /obj/item/clothing/under/rank/research_director/turtleneck,
/obj/item/clothing/under/captainparade, /obj/item/clothing/under/hosparademale, /obj/item/clothing/under/hosparadefem,
- /obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/abductor_baton,
+ /obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/abductor/baton,
/obj/item/storage/belt/military/abductor, /obj/item/gun/energy/alien, /obj/item/abductor/silencer,
/obj/item/abductor/gizmo, /obj/item/clothing/under/rank/centcom_officer,
/obj/item/clothing/suit/space/hardsuit/ert, /obj/item/clothing/suit/space/hardsuit/ert/sec,
@@ -136,7 +136,7 @@ SUBSYSTEM_DEF(traumas)
"aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo,
/obj/structure/alien, /obj/item/toy/toy_xeno,
/obj/item/clothing/suit/armor/abductor, /obj/item/abductor, /obj/item/gun/energy/alien,
- /obj/item/abductor_baton, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien,
+ /obj/item/abductor/baton, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien,
/obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/surgicaldrill/alien, /obj/item/cautery/alien,
/obj/item/clothing/head/helmet/abductor, /obj/structure/bed/abductor, /obj/structure/table_frame/abductor,
/obj/structure/table/abductor, /obj/structure/table/optable/abductor, /obj/structure/closet/abductor, /obj/item/organ/heart/gland,
@@ -166,7 +166,7 @@ SUBSYSTEM_DEF(traumas)
"syndicate" = typecacheof(list(/obj/item/stack/tile/mineral/plastitanium, /obj/machinery/computer/shuttle/syndicate, /obj/machinery/computer/shuttle/syndicate/recall, /obj/machinery/computer/shuttle/syndicate/drop_pod, /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate, /obj/machinery/recharge_station,
/obj/machinery/porta_turret/syndicate, /obj/structure/closet/syndicate, /obj/machinery/suit_storage_unit/syndicate, /obj/item/clothing/under/syndicate, /obj/item/folder/syndicate, /obj/item/documents/syndicate, /obj/item/clothing/glasses/phantomthief/syndicate, /obj/item/antag_spawner/nuke_ops, /obj/item/storage/box/syndicate,
- /obj/structure/fluff/empty_sleeper/syndicate, /obj/item/implant/radio/syndicate, /obj/item/clothing/head/helmet/space/syndicate, /obj/machinery/nuclearbomb/syndicate, /obj/item/grenade/syndieminibomb, /obj/item/storage/backpack/duffelbag/syndie, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver/syndie,
+ /obj/structure/fluff/empty_sleeper/syndicate, /obj/item/implant/radio/syndicate, /obj/item/clothing/head/helmet/space/syndicate, /obj/machinery/nuclearbomb/syndicate, /obj/item/grenade/syndieminibomb, /obj/item/storage/backpack/duffelbag/syndie, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver,
/obj/item/gun/ballistic/automatic/shotgun/bulldog, /obj/item/gun/ballistic/automatic/c20r, /obj/item/gun/ballistic/automatic/m90, /obj/item/gun/ballistic/automatic/l6_saw, /obj/item/storage/belt/grenade/full, /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate, /obj/item/gun/energy/kinetic_accelerator/crossbow,
/obj/item/melee/transforming/energy/sword/saber, /obj/item/twohanded/dualsaber, /obj/item/melee/powerfist, /obj/item/storage/box/syndie_kit, /obj/item/grenade/spawnergrenade/manhacks, /obj/item/grenade/chem_grenade/bioterrorfoam, /obj/item/reagent_containers/spray/chemsprayer/bioterror, /obj/item/ammo_box/magazine/m10mm,
/obj/item/ammo_box/magazine/pistolm9mm, /obj/item/ammo_box/a357, /obj/item/ammo_box/magazine/m12g, /obj/item/ammo_box/magazine/mm195x129, /obj/item/antag_spawner/nuke_ops, /obj/mecha/combat/gygax/dark, /obj/mecha/combat/marauder/mauler, /obj/item/soap/syndie, /obj/item/gun/syringe/syndicate, /obj/item/cartridge/virus/syndicate,
diff --git a/code/controllers/subsystem/vis_overlays.dm b/code/controllers/subsystem/vis_overlays.dm
index 107d65a558..0635709074 100644
--- a/code/controllers/subsystem/vis_overlays.dm
+++ b/code/controllers/subsystem/vis_overlays.dm
@@ -29,8 +29,8 @@ SUBSYSTEM_DEF(vis_overlays)
return
//the "thing" var can be anything with vis_contents which includes images
-/datum/controller/subsystem/vis_overlays/proc/add_vis_overlay(atom/movable/thing, icon, iconstate, layer, plane, dir, alpha=255)
- . = "[icon]|[iconstate]|[layer]|[plane]|[dir]|[alpha]"
+/datum/controller/subsystem/vis_overlays/proc/add_vis_overlay(atom/movable/thing, icon, iconstate, layer, plane, dir, alpha = 255, add_appearance_flags = NONE)
+ . = "[icon]|[iconstate]|[layer]|[plane]|[dir]|[alpha]|[add_appearance_flags]"
var/obj/effect/overlay/vis/overlay = vis_overlay_cache[.]
if(!overlay)
overlay = new
@@ -40,6 +40,7 @@ SUBSYSTEM_DEF(vis_overlays)
overlay.plane = plane
overlay.dir = dir
overlay.alpha = alpha
+ overlay.appearance_flags |= add_appearance_flags
vis_overlay_cache[.] = overlay
else
overlay.unused = 0
@@ -64,10 +65,12 @@ SUBSYSTEM_DEF(vis_overlays)
UnregisterSignal(thing, COMSIG_ATOM_DIR_CHANGE)
/datum/controller/subsystem/vis_overlays/proc/rotate_vis_overlay(atom/thing, old_dir, new_dir)
+ if(old_dir == new_dir)
+ return
var/rotation = dir2angle(old_dir) - dir2angle(new_dir)
var/list/overlays_to_remove = list()
for(var/i in thing.managed_vis_overlays)
var/obj/effect/overlay/vis/overlay = i
- add_vis_overlay(thing, overlay.icon, overlay.icon_state, overlay.layer, overlay.plane, turn(overlay.dir, rotation))
+ add_vis_overlay(thing, overlay.icon, overlay.icon_state, overlay.layer, overlay.plane, turn(overlay.dir, rotation), overlay.alpha, overlay.appearance_flags)
overlays_to_remove += overlay
remove_vis_overlay(thing, overlays_to_remove)
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index e29382377f..dee10e4998 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -87,7 +87,7 @@ SUBSYSTEM_DEF(vote)
/datum/controller/subsystem/vote/proc/announce_result()
var/list/winners = get_result()
var/text
- var/was_roundtype_vote = mode == "roundtype"
+ var/was_roundtype_vote = mode == "roundtype" || mode == "dynamic"
if(winners.len > 0)
if(question)
text += "[question]"
@@ -124,6 +124,9 @@ SUBSYSTEM_DEF(vote)
message_admins(admintext)
return .
+#define PEACE "calm"
+#define CHAOS "chaotic"
+
/datum/controller/subsystem/vote/proc/result()
. = announce_result()
var/restart = 0
@@ -146,6 +149,36 @@ SUBSYSTEM_DEF(vote)
restart = 1
else
GLOB.master_mode = .
+ if("dynamic")
+ if(SSticker.current_state > GAME_STATE_PREGAME)//Don't change the mode if the round already started.
+ return message_admins("A vote has tried to change the gamemode, but the game has already started. Aborting.")
+ GLOB.master_mode = "dynamic"
+ if("extended" in choices)
+ if(. == "extended")
+ GLOB.dynamic_forced_extended = TRUE // we still do the rest of the stuff
+ choices[PEACE] += choices["extended"]
+ var/mean = 0
+ var/voters = 0
+ for(var/client/c in GLOB.clients)
+ var/vote = c.prefs.preferred_chaos
+ if(vote)
+ voters += 1
+ switch(vote)
+ if(CHAOS_NONE)
+ mean -= 0.1
+ if(CHAOS_LOW)
+ mean -= 0.05
+ if(CHAOS_HIGH)
+ mean += 0.05
+ if(CHAOS_MAX)
+ mean += 0.1
+ mean/=voters
+ if(voted.len != 0)
+ mean += (choices[PEACE]*-1+choices[CHAOS])/voted.len
+ GLOB.dynamic_curve_centre = mean*20
+ GLOB.dynamic_curve_width = CLAMP(2-abs(mean*5),0.5,4)
+ to_chat(world,"Dynamic curve centre set to [GLOB.dynamic_curve_centre] and width set to [GLOB.dynamic_curve_width].")
+ log_admin("Dynamic curve centre set to [GLOB.dynamic_curve_centre] and width set to [GLOB.dynamic_curve_width]")
if("map")
var/datum/map_config/VM = config.maplist[.]
message_admins("The map has been voted for and will change to: [VM.map_name]")
@@ -223,6 +256,12 @@ SUBSYSTEM_DEF(vote)
choices |= M
if("roundtype") //CIT CHANGE - adds the roundstart secret/extended vote
choices.Add("secret", "extended")
+ if("dynamic")
+ var/saved_threats = SSpersistence.saved_threat_levels
+ if((saved_threats[1]+saved_threats[2]+saved_threats[3])>150)
+ choices.Add("extended",PEACE,CHAOS)
+ else
+ choices.Add(PEACE,CHAOS)
if("custom")
question = stripped_input(usr,"What is the vote for?")
if(!question)
@@ -379,4 +418,7 @@ SUBSYSTEM_DEF(vote)
else if(owner.ckey)
var/datum/player_details/P = GLOB.player_details[owner.ckey]
if(P)
- P.player_actions -= src
\ No newline at end of file
+ P.player_actions -= src
+
+#undef PEACE
+#undef CHAOS
diff --git a/code/controllers/subsystem/weather.dm b/code/controllers/subsystem/weather.dm
index 2391b4c839..5e44f2e4c3 100644
--- a/code/controllers/subsystem/weather.dm
+++ b/code/controllers/subsystem/weather.dm
@@ -74,10 +74,10 @@ SUBSYSTEM_DEF(weather)
next_hit_by_zlevel["[z]"] = null
/datum/controller/subsystem/weather/proc/get_weather(z, area/active_area)
- var/datum/weather/A
- for(var/V in processing)
- var/datum/weather/W = V
- if((z in W.impacted_z_levels) && W.area_type == active_area.type)
- A = W
- break
- return A
+ var/datum/weather/A
+ for(var/V in processing)
+ var/datum/weather/W = V
+ if((z in W.impacted_z_levels) && W.area_type == active_area.type)
+ A = W
+ break
+ return A
diff --git a/code/datums/action.dm b/code/datums/action.dm
index fd33ef79b5..77aa729eb1 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -245,6 +245,14 @@
/datum/action/item_action/toggle_helmet_light
name = "Toggle Helmet Light"
+/datum/action/item_action/toggle_welding_screen
+ name = "Toggle Welding Screen"
+
+/datum/action/item_action/toggle_welding_screen/Trigger()
+ var/obj/item/clothing/head/hardhat/weldhat/H = target
+ if(istype(H))
+ H.toggle_welding_screen(owner)
+
/datum/action/item_action/toggle_headphones
name = "Toggle Headphones"
desc = "UNTZ UNTZ UNTZ"
diff --git a/code/datums/armor.dm b/code/datums/armor.dm
index cbf4b76c60..85915395f8 100644
--- a/code/datums/armor.dm
+++ b/code/datums/armor.dm
@@ -1,70 +1,70 @@
#define ARMORID "armor-[melee]-[bullet]-[laser]-[energy]-[bomb]-[bio]-[rad]-[fire]-[acid]-[magic]"
/proc/getArmor(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0)
- . = locate(ARMORID)
- if (!.)
- . = new /datum/armor(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic)
+ . = locate(ARMORID)
+ if (!.)
+ . = new /datum/armor(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic)
/datum/armor
- datum_flags = DF_USE_TAG
- var/melee
- var/bullet
- var/laser
- var/energy
- var/bomb
- var/bio
- var/rad
- var/fire
- var/acid
- var/magic
+ datum_flags = DF_USE_TAG
+ var/melee
+ var/bullet
+ var/laser
+ var/energy
+ var/bomb
+ var/bio
+ var/rad
+ var/fire
+ var/acid
+ var/magic
/datum/armor/New(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0)
- src.melee = melee
- src.bullet = bullet
- src.laser = laser
- src.energy = energy
- src.bomb = bomb
- src.bio = bio
- src.rad = rad
- src.fire = fire
- src.acid = acid
- src.magic = magic
- tag = ARMORID
+ src.melee = melee
+ src.bullet = bullet
+ src.laser = laser
+ src.energy = energy
+ src.bomb = bomb
+ src.bio = bio
+ src.rad = rad
+ src.fire = fire
+ src.acid = acid
+ src.magic = magic
+ tag = ARMORID
/datum/armor/proc/modifyRating(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0)
- return getArmor(src.melee+melee, src.bullet+bullet, src.laser+laser, src.energy+energy, src.bomb+bomb, src.bio+bio, src.rad+rad, src.fire+fire, src.acid+acid, src.magic+magic)
+ return getArmor(src.melee+melee, src.bullet+bullet, src.laser+laser, src.energy+energy, src.bomb+bomb, src.bio+bio, src.rad+rad, src.fire+fire, src.acid+acid, src.magic+magic)
/datum/armor/proc/modifyAllRatings(modifier = 0)
- return getArmor(melee+modifier, bullet+modifier, laser+modifier, energy+modifier, bomb+modifier, bio+modifier, rad+modifier, fire+modifier, acid+modifier, magic+modifier)
+ return getArmor(melee+modifier, bullet+modifier, laser+modifier, energy+modifier, bomb+modifier, bio+modifier, rad+modifier, fire+modifier, acid+modifier, magic+modifier)
/datum/armor/proc/setRating(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic)
- return getArmor((isnull(melee) ? src.melee : melee),\
- (isnull(bullet) ? src.bullet : bullet),\
- (isnull(laser) ? src.laser : laser),\
- (isnull(energy) ? src.energy : energy),\
- (isnull(bomb) ? src.bomb : bomb),\
- (isnull(bio) ? src.bio : bio),\
- (isnull(rad) ? src.rad : rad),\
- (isnull(fire) ? src.fire : fire),\
- (isnull(acid) ? src.acid : acid),\
- (isnull(magic) ? src.magic : magic))
+ return getArmor((isnull(melee) ? src.melee : melee),\
+ (isnull(bullet) ? src.bullet : bullet),\
+ (isnull(laser) ? src.laser : laser),\
+ (isnull(energy) ? src.energy : energy),\
+ (isnull(bomb) ? src.bomb : bomb),\
+ (isnull(bio) ? src.bio : bio),\
+ (isnull(rad) ? src.rad : rad),\
+ (isnull(fire) ? src.fire : fire),\
+ (isnull(acid) ? src.acid : acid),\
+ (isnull(magic) ? src.magic : magic))
/datum/armor/proc/getRating(rating)
- return vars[rating]
+ return vars[rating]
/datum/armor/proc/getList()
- return list("melee" = melee, "bullet" = bullet, "laser" = laser, "energy" = energy, "bomb" = bomb, "bio" = bio, "rad" = rad, "fire" = fire, "acid" = acid, "magic" = magic)
+ return list("melee" = melee, "bullet" = bullet, "laser" = laser, "energy" = energy, "bomb" = bomb, "bio" = bio, "rad" = rad, "fire" = fire, "acid" = acid, "magic" = magic)
/datum/armor/proc/attachArmor(datum/armor/AA)
- return getArmor(melee+AA.melee, bullet+AA.bullet, laser+AA.laser, energy+AA.energy, bomb+AA.bomb, bio+AA.bio, rad+AA.rad, fire+AA.fire, acid+AA.acid, magic+AA.magic)
+ return getArmor(melee+AA.melee, bullet+AA.bullet, laser+AA.laser, energy+AA.energy, bomb+AA.bomb, bio+AA.bio, rad+AA.rad, fire+AA.fire, acid+AA.acid, magic+AA.magic)
/datum/armor/proc/detachArmor(datum/armor/AA)
- return getArmor(melee-AA.melee, bullet-AA.bullet, laser-AA.laser, energy-AA.energy, bomb-AA.bomb, bio-AA.bio, rad-AA.rad, fire-AA.fire, acid-AA.acid, magic-AA.magic)
+ return getArmor(melee-AA.melee, bullet-AA.bullet, laser-AA.laser, energy-AA.energy, bomb-AA.bomb, bio-AA.bio, rad-AA.rad, fire-AA.fire, acid-AA.acid, magic-AA.magic)
/datum/armor/vv_edit_var(var_name, var_value)
- if (var_name == NAMEOF(src, tag))
- return FALSE
- . = ..()
- tag = ARMORID // update tag in case armor values were edited
+ if (var_name == NAMEOF(src, tag))
+ return FALSE
+ . = ..()
+ tag = ARMORID // update tag in case armor values were edited
#undef ARMORID
diff --git a/code/datums/brain_damage/brain_trauma.dm b/code/datums/brain_damage/brain_trauma.dm
index 56a3f3969b..1aa1341c9c 100644
--- a/code/datums/brain_damage/brain_trauma.dm
+++ b/code/datums/brain_damage/brain_trauma.dm
@@ -1,10 +1,12 @@
//Brain Traumas are the new actual brain damage. Brain damage itself acts as a way to acquire traumas: every time brain damage is dealt, there's a chance of receiving a trauma.
//This chance gets higher the higher the mob's brainloss is. Removing traumas is a separate thing from removing brain damage: you can get restored to full brain operativity,
-//but keep the quirks, until repaired by mannitol (for mild/special ones) or brain surgery (for severe ones).
+// but keep the quirks, until repaired by neurine, surgery, lobotomy or magic; depending on the resilience
+// of the trauma.
+
/datum/brain_trauma
var/name = "Brain Trauma"
var/desc = "A trauma caused by brain damage, which causes issues to the patient."
- var/scan_desc = "a generic brain trauma" //description when detected by a health scanner
+ var/scan_desc = "generic brain trauma" //description when detected by a health scanner
var/mob/living/carbon/owner //the poor bastard
var/obj/item/organ/brain/brain //the poor bastard's brain
var/gain_text = "You feel traumatized."
@@ -12,15 +14,21 @@
var/can_gain = TRUE
var/random_gain = TRUE //can this be gained through random traumas?
var/resilience = TRAUMA_RESILIENCE_BASIC //how hard is this to cure?
+ var/clonable = TRUE // will this transfer if the brain is cloned?
/datum/brain_trauma/Destroy()
- brain.traumas -= src
+ if(brain && brain.traumas)
+ brain.traumas -= src
if(owner)
on_lose()
brain = null
owner = null
return ..()
+/datum/brain_trauma/proc/on_clone()
+ if(clonable)
+ return new type
+
//Called on life ticks
/datum/brain_trauma/proc/on_life()
return
@@ -33,17 +41,24 @@
/datum/brain_trauma/proc/on_gain()
to_chat(owner, gain_text)
RegisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech)
+ RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/handle_hearing)
//Called when removed from a mob
/datum/brain_trauma/proc/on_lose(silent)
if(!silent)
to_chat(owner, lose_text)
UnregisterSignal(owner, COMSIG_MOB_SAY)
+ UnregisterSignal(owner, COMSIG_MOVABLE_HEAR)
//Called when hearing a spoken message
-/datum/brain_trauma/proc/on_hear(message, speaker, message_language, raw_message, radio_freq)
- return message
+/datum/brain_trauma/proc/handle_hearing(datum/source, list/hearing_args)
+ UnregisterSignal(owner, COMSIG_MOVABLE_HEAR)
//Called when speaking
/datum/brain_trauma/proc/handle_speech(datum/source, list/speech_args)
UnregisterSignal(owner, COMSIG_MOB_SAY)
+
+
+//Called when hugging. expand into generally interacting, where future coders could switch the intent?
+/datum/brain_trauma/proc/on_hug(mob/living/hugger, mob/living/hugged)
+ return
diff --git a/code/datums/brain_damage/hypnosis.dm b/code/datums/brain_damage/hypnosis.dm
index 8909d1b85f..37aee6df7e 100644
--- a/code/datums/brain_damage/hypnosis.dm
+++ b/code/datums/brain_damage/hypnosis.dm
@@ -5,6 +5,7 @@
gain_text = ""
lose_text = ""
resilience = TRAUMA_RESILIENCE_SURGERY
+
var/hypnotic_phrase = ""
var/regex/target_phrase
@@ -44,18 +45,17 @@
"You feel a part of your mind repeating this over and over. You need to follow these words.",\
"Something about this sounds... right, for some reason. You feel like you should follow these words.",\
"These words keep echoing in your mind. You find yourself completely fascinated by them.")]")
- if(!HAS_TRAIT(owner, "hypnotherapy"))
- to_chat(owner, "You've been hypnotized by this sentence. You must follow these words. If it isn't a clear order, you can freely interpret how to do so,\
+ to_chat(owner, "You've been hypnotized by this sentence. You must follow these words. If it isn't a clear order, you can freely interpret how to do so,\
as long as you act like the words are your highest priority.")
- else
- to_chat(owner, "You've been hypnotized by this sentence. You feel an incredible desire to follow these words, but are able to resist it somewhat. If it isn't a clear order, you can freely interpret how to do so,\
- however this does not take precedence over your other objectives.")
+ var/obj/screen/alert/hypnosis/hypno_alert = owner.throw_alert("hypnosis", /obj/screen/alert/hypnosis)
+ hypno_alert.desc = "\"[hypnotic_phrase]\"... your mind seems to be fixated on this concept."
..()
/datum/brain_trauma/hypnosis/on_lose()
message_admins("[ADMIN_LOOKUPFLW(owner)] is no longer hypnotized with the phrase '[hypnotic_phrase]'.")
log_game("[key_name(owner)] is no longer hypnotized with the phrase '[hypnotic_phrase]'.")
- to_chat(owner, "You suddenly snap out of your fixation. The phrase '[hypnotic_phrase]' no longer feels important to you.")
+ to_chat(owner, "You suddenly snap out of your hypnosis. The phrase '[hypnotic_phrase]' no longer feels important to you.")
+ owner.clear_alert("hypnosis")
..()
/datum/brain_trauma/hypnosis/on_life()
@@ -67,6 +67,5 @@
if(2)
new /datum/hallucination/chat(owner, TRUE, FALSE, "[hypnotic_phrase]")
-/datum/brain_trauma/hypnosis/on_hear(message, speaker, message_language, raw_message, radio_freq)
- message = target_phrase.Replace(message, "$1")
- return message
+/datum/brain_trauma/hypnosis/handle_hearing(datum/source, list/hearing_args)
+ hearing_args[HEARING_RAW_MESSAGE] = target_phrase.Replace(hearing_args[HEARING_RAW_MESSAGE], "$1")
diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm
index 5bbc5de4a5..9005a788b7 100644
--- a/code/datums/brain_damage/imaginary_friend.dm
+++ b/code/datums/brain_damage/imaginary_friend.dm
@@ -8,6 +8,10 @@
var/friend_initialized = FALSE
/datum/brain_trauma/special/imaginary_friend/on_gain()
+ var/mob/living/M = owner
+ if(M.stat == DEAD || !M.client)
+ qdel(src)
+ return
..()
make_friend()
get_ghost()
@@ -43,7 +47,7 @@
/datum/brain_trauma/special/imaginary_friend/proc/get_ghost()
set waitfor = FALSE
- var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s imaginary friend?", ROLE_PAI, null, null, 75, friend)
+ var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s imaginary friend?", ROLE_PAI, null, null, 75, friend, POLL_IGNORE_IMAGINARYFRIEND)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
C.transfer_ckey(friend, FALSE)
@@ -74,26 +78,34 @@
/mob/camera/imaginary_friend/Login()
..()
- to_chat(src, "You are the imaginary friend of [owner]!")
- to_chat(src, "You are absolutely loyal to your friend, no matter what.")
- to_chat(src, "You cannot directly influence the world around you, but you can see what [owner] cannot.")
+ greet()
Show()
+/mob/camera/imaginary_friend/proc/greet()
+ to_chat(src, "You are the imaginary friend of [owner]!")
+ to_chat(src, "You are absolutely loyal to your friend, no matter what.")
+ to_chat(src, "You cannot directly influence the world around you, but you can see what [owner] cannot.")
+
/mob/camera/imaginary_friend/Initialize(mapload, _trauma)
. = ..()
- var/gender = pick(MALE, FEMALE)
- real_name = random_unique_name(gender)
- name = real_name
+
trauma = _trauma
owner = trauma.owner
copy_known_languages_from(owner, TRUE)
- human_image = get_flat_human_icon(null, pick(SSjob.occupations))
+
+ setup_friend()
join = new
join.Grant(src)
hide = new
hide.Grant(src)
+/mob/camera/imaginary_friend/proc/setup_friend()
+ var/gender = pick(MALE, FEMALE)
+ real_name = random_unique_name(gender)
+ name = real_name
+ human_image = get_flat_human_icon(null, pick(SSjob.occupations))
+
/mob/camera/imaginary_friend/proc/Show()
if(!client) //nobody home
return
@@ -132,13 +144,13 @@
if(client.prefs.muted & MUTE_IC)
to_chat(src, "You cannot send IC messages (muted).")
return
- if (src.client.handle_spam_prevention(message,MUTE_IC))
+ if (!(ignore_spam || forced) && src.client.handle_spam_prevention(message,MUTE_IC))
return
friend_talk(message)
-/mob/camera/imaginary_friend/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode)
- to_chat(src, compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode))
+/mob/camera/imaginary_friend/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
+ to_chat(src, compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode, FALSE, source))
/mob/camera/imaginary_friend/proc/friend_talk(message)
message = capitalize(trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)))
@@ -218,4 +230,42 @@
var/mob/camera/imaginary_friend/I = owner
I.hidden = !I.hidden
I.Show()
- update_status()
\ No newline at end of file
+ update_status()
+
+//down here is the trapped mind
+//like imaginary friend but a lot less imagination and more like mind prison//
+
+/datum/brain_trauma/special/imaginary_friend/trapped_owner
+ name = "Trapped Victim"
+ desc = "Patient appears to be targeted by an invisible entity."
+ gain_text = ""
+ lose_text = ""
+ random_gain = FALSE
+
+/datum/brain_trauma/special/imaginary_friend/trapped_owner/make_friend()
+ friend = new /mob/camera/imaginary_friend/trapped(get_turf(owner), src)
+
+/datum/brain_trauma/special/imaginary_friend/trapped_owner/reroll_friend() //no rerolling- it's just the last owner's hell
+ if(friend.client) //reconnected
+ return
+ friend_initialized = FALSE
+ QDEL_NULL(friend)
+ qdel(src)
+
+/datum/brain_trauma/special/imaginary_friend/trapped_owner/get_ghost() //no randoms
+ return
+
+/mob/camera/imaginary_friend/trapped
+ name = "figment of imagination?"
+ real_name = "figment of imagination?"
+ desc = "The previous host of this body."
+
+/mob/camera/imaginary_friend/trapped/greet()
+ to_chat(src, "You have managed to hold on as a figment of the new host's imagination!")
+ to_chat(src, "All hope is lost for you, but at least you may interact with your host. You do not have to be loyal to them.")
+ to_chat(src, "You cannot directly influence the world around you, but you can see what the host cannot.")
+
+/mob/camera/imaginary_friend/trapped/setup_friend()
+ real_name = "[owner.real_name]?"
+ name = real_name
+ human_image = icon('icons/mob/lavaland/lavaland_monsters.dmi', icon_state = "curseblob")
diff --git a/code/datums/brain_damage/mild.dm b/code/datums/brain_damage/mild.dm
index c049a7db33..235417d62c 100644
--- a/code/datums/brain_damage/mild.dm
+++ b/code/datums/brain_damage/mild.dm
@@ -64,21 +64,21 @@
name = "Speech Impediment"
desc = "Patient is unable to form coherent sentences."
scan_desc = "communication disorder"
- gain_text = "" //mutation will handle the text
- lose_text = ""
+ gain_text = "You can't seem to form any coherent thoughts!"
+ lose_text = "Your mind feels more clear."
/datum/brain_trauma/mild/speech_impediment/on_gain()
ADD_TRAIT(owner, TRAIT_UNINTELLIGIBLE_SPEECH, TRAUMA_TRAIT)
- . = ..()
+ ..()
/datum/brain_trauma/mild/speech_impediment/on_lose()
REMOVE_TRAIT(owner, TRAIT_UNINTELLIGIBLE_SPEECH, TRAUMA_TRAIT)
- . = ..()
+ ..()
/datum/brain_trauma/mild/concussion
name = "Concussion"
desc = "Patient's brain is concussed."
- scan_desc = "a concussion"
+ scan_desc = "concussion"
gain_text = "Your head hurts!"
lose_text = "The pressure inside your head starts fading."
@@ -157,54 +157,108 @@
gain_text = "Your muscles feel oddly faint."
lose_text = "You feel in control of your muscles again."
-/datum/brain_trauma/mild/muscle_spasms/on_life()
- if(prob(7))
- switch(rand(1,5))
- if(1)
- if(owner.canmove && !isspaceturf(owner.loc))
- to_chat(owner, "Your leg spasms!")
- step(owner, pick(GLOB.cardinals))
- if(2)
- if(owner.incapacitated())
- return
- var/obj/item/I = owner.get_active_held_item()
- if(I)
- to_chat(owner, "Your fingers spasm!")
- owner.log_message("used [I] due to a Muscle Spasm", LOG_ATTACK)
- I.attack_self(owner)
- if(3)
- var/prev_intent = owner.a_intent
- owner.a_intent = INTENT_HARM
-
- var/range = 1
- if(istype(owner.get_active_held_item(), /obj/item/gun)) //get targets to shoot at
- range = 7
-
- var/list/mob/living/targets = list()
- for(var/mob/M in oview(owner, range))
- if(isliving(M))
- targets += M
- if(LAZYLEN(targets))
- to_chat(owner, "Your arm spasms!")
- owner.log_message(" attacked someone due to a Muscle Spasm") //the following attack will log itself
- owner.ClickOn(pick(targets))
- owner.a_intent = prev_intent
- if(4)
- var/prev_intent = owner.a_intent
- owner.a_intent = INTENT_HARM
- to_chat(owner, "Your arm spasms!")
- owner.log_message("attacked [owner.p_them()]self to a Muscle Spasm", LOG_ATTACK)
- owner.ClickOn(owner)
- owner.a_intent = prev_intent
- if(5)
- if(owner.incapacitated())
- return
- var/obj/item/I = owner.get_active_held_item()
- var/list/turf/targets = list()
- for(var/turf/T in oview(owner, 3))
- targets += T
- if(LAZYLEN(targets) && I)
- to_chat(owner, "Your arm spasms!")
- owner.log_message("threw [I] due to a Muscle Spasm", LOG_ATTACK)
- owner.throw_item(pick(targets))
+/datum/brain_trauma/mild/muscle_spasms/on_gain()
+ owner.apply_status_effect(STATUS_EFFECT_SPASMS)
..()
+
+/datum/brain_trauma/mild/muscle_spasms/on_lose()
+ owner.remove_status_effect(STATUS_EFFECT_SPASMS)
+ ..()
+
+/datum/brain_trauma/mild/nervous_cough
+ name = "Nervous Cough"
+ desc = "Patient feels a constant need to cough."
+ scan_desc = "nervous cough"
+ gain_text = "Your throat itches incessantly..."
+ lose_text = "Your throat stops itching."
+
+/datum/brain_trauma/mild/nervous_cough/on_life()
+ if(prob(12) && !HAS_TRAIT(owner, TRAIT_SOOTHED_THROAT))
+ if(prob(5))
+ to_chat(owner, "[pick("You have a coughing fit!", "You can't stop coughing!")]")
+ owner.Stun(20)
+ owner.emote("cough")
+ addtimer(CALLBACK(owner, /mob/.proc/emote, "cough"), 6)
+ addtimer(CALLBACK(owner, /mob/.proc/emote, "cough"), 12)
+ owner.emote("cough")
+ ..()
+
+/datum/brain_trauma/mild/expressive_aphasia
+ name = "Expressive Aphasia"
+ desc = "Patient is affected by partial loss of speech leading to a reduced vocabulary."
+ scan_desc = "inability to form complex sentences"
+ gain_text = "You lose your grasp on complex words."
+ lose_text = "You feel your vocabulary returning to normal again."
+
+ var/static/list/common_words = world.file2list("strings/1000_most_common.txt")
+
+/datum/brain_trauma/mild/expressive_aphasia/handle_speech(datum/source, list/speech_args)
+ var/message = speech_args[SPEECH_MESSAGE]
+ if(message)
+ var/list/message_split = splittext(message, " ")
+ var/list/new_message = list()
+
+ for(var/word in message_split)
+ var/suffix = copytext(word,-1)
+
+ // Check if we have a suffix and break it out of the word
+ if(suffix in list("." , "," , ";" , "!" , ":" , "?"))
+ word = copytext(word,1,-1)
+ else
+ suffix = ""
+
+ word = html_decode(word)
+
+ if(lowertext(word) in common_words)
+ new_message += word + suffix
+ else
+ if(prob(30) && message_split.len > 2)
+ new_message += pick("uh","erm")
+ break
+ else
+ var/list/charlist = string2charlist(word) // Stupid shit code
+ shuffle_inplace(charlist)
+ charlist.len = round(charlist.len * 0.5,1)
+ new_message += html_encode(jointext(charlist,"")) + suffix
+
+ message = jointext(new_message, " ")
+
+ speech_args[SPEECH_MESSAGE] = trim(message)
+
+/datum/brain_trauma/mild/mind_echo
+ name = "Mind Echo"
+ desc = "Patient's language neurons do not terminate properly, causing previous speech patterns to occasionally resurface spontaneously."
+ scan_desc = "looping neural pattern"
+ gain_text = "You feel a faint echo of your thoughts..."
+ lose_text = "The faint echo fades away."
+ var/list/hear_dejavu = list()
+ var/list/speak_dejavu = list()
+
+/datum/brain_trauma/mild/mind_echo/handle_hearing(datum/source, list/hearing_args)
+ if(owner == hearing_args[HEARING_SPEAKER])
+ return
+ if(hear_dejavu.len >= 5)
+ if(prob(25))
+ var/deja_vu = pick_n_take(hear_dejavu)
+ var/static/regex/quoted_spoken_message = regex("\".+\"", "gi")
+ hearing_args[HEARING_RAW_MESSAGE] = quoted_spoken_message.Replace(hearing_args[HEARING_RAW_MESSAGE], "\"[deja_vu]\"") //Quotes included to avoid cases where someone says part of their name
+ return
+ if(hear_dejavu.len >= 15)
+ if(prob(50))
+ popleft(hear_dejavu) //Remove the oldest
+ hear_dejavu += hearing_args[HEARING_RAW_MESSAGE]
+ else
+ hear_dejavu += hearing_args[HEARING_RAW_MESSAGE]
+
+/datum/brain_trauma/mild/mind_echo/handle_speech(datum/source, list/speech_args)
+ if(speak_dejavu.len >= 5)
+ if(prob(25))
+ var/deja_vu = pick_n_take(speak_dejavu)
+ speech_args[SPEECH_MESSAGE] = deja_vu
+ return
+ if(speak_dejavu.len >= 15)
+ if(prob(50))
+ popleft(speak_dejavu) //Remove the oldest
+ speak_dejavu += speech_args[SPEECH_MESSAGE]
+ else
+ speak_dejavu += speech_args[SPEECH_MESSAGE]
\ No newline at end of file
diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm
index f802555c7e..80a1bd2470 100644
--- a/code/datums/brain_damage/phobia.dm
+++ b/code/datums/brain_damage/phobia.dm
@@ -2,8 +2,8 @@
name = "Phobia"
desc = "Patient is unreasonably afraid of something."
scan_desc = "phobia"
- gain_text = ""
- lose_text = ""
+ gain_text = "You start finding default values very unnerving..."
+ lose_text = "You no longer feel afraid of default values."
var/phobia_type
var/next_check = 0
var/next_scare = 0
@@ -14,8 +14,10 @@
var/list/trigger_turfs
var/list/trigger_species
-/datum/brain_trauma/mild/phobia/New(specific_type)
- phobia_type = specific_type
+/datum/brain_trauma/mild/phobia/New(new_phobia_type)
+ if(new_phobia_type)
+ phobia_type = new_phobia_type
+
if(!phobia_type)
phobia_type = pick(SStraumas.phobia_types)
@@ -29,6 +31,11 @@
trigger_species = SStraumas.phobia_species[phobia_type]
..()
+
+/datum/brain_trauma/mild/phobia/on_clone()
+ if(clonable)
+ return new type(phobia_type)
+
/datum/brain_trauma/mild/phobia/on_life()
..()
if(HAS_TRAIT(owner, TRAIT_FEARLESS))
@@ -44,6 +51,12 @@
if(is_type_in_typecache(O, trigger_objs))
freak_out(O)
return
+ for(var/mob/living/carbon/human/HU in seen_atoms) //check equipment for trigger items
+ for(var/X in HU.get_all_slots() | HU.held_items)
+ var/obj/I = X
+ if(!QDELETED(I) && is_type_in_typecache(I, trigger_objs))
+ freak_out(I)
+ return
if(LAZYLEN(trigger_turfs))
for(var/turf/T in seen_atoms)
@@ -51,45 +64,41 @@
freak_out(T)
return
- if(LAZYLEN(trigger_mobs) || LAZYLEN(trigger_objs))
+ seen_atoms -= owner //make sure they aren't afraid of themselves.
+ if(LAZYLEN(trigger_mobs) || LAZYLEN(trigger_species))
for(var/mob/M in seen_atoms)
if(is_type_in_typecache(M, trigger_mobs))
freak_out(M)
return
- else if(ishuman(M)) //check their equipment for trigger items
+ else if(ishuman(M)) //check their species
var/mob/living/carbon/human/H = M
if(LAZYLEN(trigger_species) && H.dna && H.dna.species && is_type_in_typecache(H.dna.species, trigger_species))
freak_out(H)
+ return
- for(var/X in H.get_all_slots() | H.held_items)
- var/obj/I = X
- if(!QDELETED(I) && is_type_in_typecache(I, trigger_objs))
- freak_out(I)
- return
-
-/datum/brain_trauma/mild/phobia/on_hear(message, speaker, message_language, raw_message, radio_freq)
+/datum/brain_trauma/mild/phobia/handle_hearing(datum/source, list/hearing_args)
if(!owner.can_hear() || world.time < next_scare) //words can't trigger you if you can't hear them *taps head*
- return message
+ return
if(HAS_TRAIT(owner, TRAIT_FEARLESS))
- return message
+ return
for(var/word in trigger_words)
- var/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i")
+ var/regex/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i")
- if(findtext(raw_message, reg))
+ if(findtext(hearing_args[HEARING_RAW_MESSAGE], reg))
addtimer(CALLBACK(src, .proc/freak_out, null, word), 10) //to react AFTER the chat message
+ hearing_args[HEARING_RAW_MESSAGE] = reg.Replace(hearing_args[HEARING_RAW_MESSAGE], "$1")
break
- return message
/datum/brain_trauma/mild/phobia/handle_speech(datum/source, list/speech_args)
if(HAS_TRAIT(owner, TRAIT_FEARLESS))
return
for(var/word in trigger_words)
- var/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i")
+ var/regex/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i")
if(findtext(speech_args[SPEECH_MESSAGE], reg))
- to_chat(owner, "You can't bring yourself to say the word \"[word]\"!")
+ to_chat(owner, "You can't bring yourself to say the word \"[word]\"!")
speech_args[SPEECH_MESSAGE] = ""
/datum/brain_trauma/mild/phobia/proc/freak_out(atom/reason, trigger_word)
@@ -125,6 +134,76 @@
owner.Jitter(10)
owner.stuttering += 10
+// Defined phobia types for badminry, not included in the RNG trauma pool to avoid diluting.
+
+/datum/brain_trauma/mild/phobia/spiders
+ phobia_type = "spiders"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/space
+ phobia_type = "space"
+ random_gain = FALSE
+
/datum/brain_trauma/mild/phobia/security
phobia_type = "security"
random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/clowns
+ phobia_type = "clowns"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/greytide
+ phobia_type = "greytide"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/lizards
+ phobia_type = "lizards"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/skeletons
+ phobia_type = "skeletons"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/snakes
+ phobia_type = "snakes"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/robots
+ phobia_type = "robots"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/doctors
+ phobia_type = "doctors"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/authority
+ phobia_type = "authority"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/supernatural
+ phobia_type = "the supernatural"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/aliens
+ phobia_type = "aliens"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/strangers
+ phobia_type = "strangers"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/birds
+ phobia_type = "birds"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/falling
+ phobia_type = "falling"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/anime
+ phobia_type = "anime"
+ random_gain = FALSE
+
+/datum/brain_trauma/mild/phobia/conspiracies
+ phobia_type = "conspiracies"
+ random_gain = FALSE
diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm
index 890e9cf903..0e08c4cd15 100644
--- a/code/datums/brain_damage/severe.dm
+++ b/code/datums/brain_damage/severe.dm
@@ -119,7 +119,7 @@
owner.update_disabled_bodyparts()
/datum/brain_trauma/severe/paralysis/paraplegic
- //can_gain = FALSE maybe breaks.
+ random_gain = FALSE
paralysis_type = "legs"
resilience = TRAUMA_RESILIENCE_ABSOLUTE
@@ -149,7 +149,7 @@
/datum/brain_trauma/severe/monophobia
name = "Monophobia"
desc = "Patient feels sick and distressed when not around other people, leading to potentially lethal levels of stress."
- scan_desc = "severe monophobia"
+ scan_desc = "monophobia"
gain_text = ""
lose_text = "You feel like you could be safe on your own."
var/stress = 0
@@ -168,7 +168,7 @@
if(stress > 10 && (prob(5)))
stress_reaction()
else
- stress -= 4
+ stress = max(stress - 4, 0)
/datum/brain_trauma/severe/monophobia/proc/check_alone()
if(HAS_TRAIT(owner, TRAIT_BLIND))
diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm
index d9e6f00643..b52c7d391c 100644
--- a/code/datums/brain_damage/special.dm
+++ b/code/datums/brain_damage/special.dm
@@ -22,6 +22,14 @@
else
speak("neutral", prob(25))
+/datum/brain_trauma/special/godwoken/on_gain()
+ ADD_TRAIT(owner, TRAIT_HOLY, TRAUMA_TRAIT)
+ ..()
+
+/datum/brain_trauma/special/godwoken/on_lose()
+ REMOVE_TRAIT(owner, TRAIT_HOLY, TRAUMA_TRAIT)
+ ..()
+
/datum/brain_trauma/special/godwoken/proc/speak(type, include_owner = FALSE)
var/message
switch(type)
@@ -36,7 +44,7 @@
else
message = pick_list_replacements(BRAIN_DAMAGE_FILE, "god_neutral")
- playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 200, 1, 5)
+ playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 200, TRUE, 5)
voice_of_god(message, owner, list("colossus","yell"), 2.5, include_owner, FALSE)
/datum/brain_trauma/special/bluespace_prophet
@@ -134,7 +142,101 @@
/datum/brain_trauma/special/psychotic_brawling/bath_salts
name = "Chemical Violent Psychosis"
- random_gain = FALSE
+ clonable = FALSE
+
+/datum/brain_trauma/special/tenacity
+ name = "Tenacity"
+ desc = "Patient is psychologically unaffected by pain and injuries, and can remain standing far longer than a normal person."
+ scan_desc = "traumatic neuropathy"
+ gain_text = "You suddenly stop feeling pain."
+ lose_text = "You realize you can feel pain again."
+
+/datum/brain_trauma/special/tenacity/on_gain()
+ ADD_TRAIT(owner, TRAIT_NOSOFTCRIT, TRAUMA_TRAIT)
+ ADD_TRAIT(owner, TRAIT_NOHARDCRIT, TRAUMA_TRAIT)
+ ..()
+
+/datum/brain_trauma/special/tenacity/on_lose()
+ REMOVE_TRAIT(owner, TRAIT_NOSOFTCRIT, TRAUMA_TRAIT)
+ REMOVE_TRAIT(owner, TRAIT_NOHARDCRIT, TRAUMA_TRAIT)
+ ..()
+
+/datum/brain_trauma/special/death_whispers
+ name = "Functional Cerebral Necrosis"
+ desc = "Patient's brain is stuck in a functional near-death state, causing occasional moments of lucid hallucinations, which are often interpreted as the voices of the dead."
+ scan_desc = "chronic functional necrosis"
+ gain_text = "You feel dead inside."
+ lose_text = "You feel alive again."
+ var/active = FALSE
+
+/datum/brain_trauma/special/death_whispers/on_life()
+ ..()
+ if(!active && prob(2))
+ whispering()
+
+/datum/brain_trauma/special/death_whispers/on_lose()
+ if(active)
+ cease_whispering()
+ ..()
+
+/datum/brain_trauma/special/death_whispers/proc/whispering()
+ ADD_TRAIT(owner, TRAIT_SIXTHSENSE, TRAUMA_TRAIT)
+ active = TRUE
+ addtimer(CALLBACK(src, .proc/cease_whispering), rand(50, 300))
+
+/datum/brain_trauma/special/death_whispers/proc/cease_whispering()
+ REMOVE_TRAIT(owner, TRAIT_SIXTHSENSE, TRAUMA_TRAIT)
+ active = FALSE
+
+/datum/brain_trauma/special/existential_crisis
+ name = "Existential Crisis"
+ desc = "Patient's hold on reality becomes faint, causing occasional bouts of non-existence."
+ scan_desc = "existential crisis"
+ gain_text = "You feel less real."
+ lose_text = "You feel more substantial again."
+ var/obj/effect/abstract/sync_holder/veil/veil
+ var/next_crisis = 0
+
+/datum/brain_trauma/special/existential_crisis/on_life()
+ ..()
+ if(!veil && world.time > next_crisis && prob(3))
+ if(isturf(owner.loc))
+ fade_out()
+
+/datum/brain_trauma/special/existential_crisis/on_lose()
+ if(veil)
+ fade_in()
+ ..()
+
+/datum/brain_trauma/special/existential_crisis/proc/fade_out()
+ if(veil)
+ return
+ var/duration = rand(50, 450)
+ veil = new(owner.drop_location())
+ to_chat(owner, "[pick("You stop thinking for a moment. Therefore you are not.",\
+ "To be or not to be...",\
+ "Why exist?",\
+ "You stop keeping it real.",\
+ "Your grip on existence slips.",\
+ "Do you even exist?",\
+ "You simply fade away.")]")
+ owner.forceMove(veil)
+ SEND_SIGNAL(owner, COMSIG_MOVABLE_SECLUDED_LOCATION)
+ for(var/thing in owner)
+ var/atom/movable/AM = thing
+ SEND_SIGNAL(AM, COMSIG_MOVABLE_SECLUDED_LOCATION)
+ next_crisis = world.time + 600
+ addtimer(CALLBACK(src, .proc/fade_in), duration)
+
+/datum/brain_trauma/special/existential_crisis/proc/fade_in()
+ QDEL_NULL(veil)
+ to_chat(owner, "You fade back into reality.")
+ next_crisis = world.time + 600
+
+//base sync holder is in desynchronizer.dm
+/obj/effect/abstract/sync_holder/veil
+ name = "non-existence"
+ desc = "Existence is just a state of mind."
/datum/brain_trauma/special/beepsky
name = "Criminal"
@@ -142,6 +244,7 @@
scan_desc = "criminal mind"
gain_text = "Justice is coming for you."
lose_text = "You were absolved for your crimes."
+ clonable = FALSE
random_gain = FALSE
var/obj/effect/hallucination/simple/securitron/beepsky
@@ -201,4 +304,4 @@
/obj/effect/hallucination/simple/securitron/Destroy()
STOP_PROCESSING(SSfastprocess,src)
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm
index 1a26ea7a14..a1284319f1 100644
--- a/code/datums/brain_damage/split_personality.dm
+++ b/code/datums/brain_damage/split_personality.dm
@@ -13,6 +13,10 @@
var/mob/living/split_personality/owner_backseat
/datum/brain_trauma/severe/split_personality/on_gain()
+ var/mob/living/M = owner
+ if(M.stat == DEAD) //No use assigning people to a corpse
+ qdel(src)
+ return
..()
make_backseats()
get_ghost()
@@ -23,7 +27,7 @@
/datum/brain_trauma/severe/split_personality/proc/get_ghost()
set waitfor = FALSE
- var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s split personality?", ROLE_PAI, null, null, 75, stranger_backseat)
+ var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s split personality?", ROLE_PAI, null, null, 75, stranger_backseat, POLL_IGNORE_SPLITPERSONALITY)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
C.transfer_ckey(stranger_backseat, FALSE)
@@ -191,13 +195,13 @@
/datum/brain_trauma/severe/split_personality/brainwashing/on_life()
return //no random switching
-/datum/brain_trauma/severe/split_personality/brainwashing/on_hear(message, speaker, message_language, raw_message, radio_freq)
- if(HAS_TRAIT(owner, TRAIT_DEAF) || owner == speaker)
- return message
+/datum/brain_trauma/severe/split_personality/brainwashing/handle_hearing(datum/source, list/hearing_args)
+ if(HAS_TRAIT(owner, TRAIT_DEAF) || owner == hearing_args[HEARING_SPEAKER])
+ return
+ var/message = hearing_args[HEARING_RAW_MESSAGE]
if(findtext(message, codeword))
- message = replacetext(message, codeword, "[codeword]")
+ hearing_args[HEARING_RAW_MESSAGE] = replacetext(message, codeword, "[codeword]")
addtimer(CALLBACK(src, /datum/brain_trauma/severe/split_personality.proc/switch_personalities), 10)
- return message
/datum/brain_trauma/severe/split_personality/brainwashing/handle_speech(datum/source, list/speech_args)
if(findtext(speech_args[SPEECH_MESSAGE], codeword))
diff --git a/code/datums/browser.dm b/code/datums/browser.dm
index 4c501a3e7f..60434d2766 100644
--- a/code/datums/browser.dm
+++ b/code/datums/browser.dm
@@ -194,7 +194,7 @@
.=..()
opentime = 0
-/datum/browser/modal/open()
+/datum/browser/modal/open(use_onclose = 1)
set waitfor = 0
opentime = world.time
diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm
index fbe94cbb9e..72b9681f91 100644
--- a/code/datums/components/_component.dm
+++ b/code/datums/components/_component.dm
@@ -53,7 +53,7 @@
// If you want/expect to be moving the component around between parents, use this to register on the parent for signals
/datum/component/proc/RegisterWithParent()
- return
+ SEND_SIGNAL(src, COMSIG_COMPONENT_REGISTER_PARENT) //CITADEL EDIT
/datum/component/proc/Initialize(...)
return
@@ -85,7 +85,7 @@
UnregisterFromParent()
/datum/component/proc/UnregisterFromParent()
- return
+ SEND_SIGNAL(src, COMSIG_COMPONENT_UNREGISTER_PARENT) //CITADEL EDIT
/datum/proc/RegisterSignal(datum/target, sig_type_or_types, proctype, override = FALSE)
if(QDELETED(src) || QDELETED(target))
@@ -184,6 +184,7 @@
// The type arg is casted so initial works, you shouldn't be passing a real instance into this
/datum/proc/GetComponent(datum/component/c_type)
+ RETURN_TYPE(c_type)
if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED)
stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]")
var/list/dc = datum_components
diff --git a/code/datums/components/armor_plate.dm b/code/datums/components/armor_plate.dm
index 53c8c280a9..975b52dcb9 100644
--- a/code/datums/components/armor_plate.dm
+++ b/code/datums/components/armor_plate.dm
@@ -29,21 +29,21 @@
var/obj/item/typecast = upgrade_item
upgrade_name = initial(typecast.name)
-/datum/component/armor_plate/proc/examine(datum/source, mob/user)
+/datum/component/armor_plate/proc/examine(datum/source, mob/user, list/examine_list)
//upgrade_item could also be typecast here instead
if(ismecha(parent))
if(amount)
if(amount < maxamount)
- to_chat(user, "Its armor is enhanced with [amount] [upgrade_name].")
+ examine_list += "Its armor is enhanced with [amount] [upgrade_name]."
else
- to_chat(user, "It's wearing a fearsome carapace entirely composed of [upgrade_name] - its pilot must be an experienced monster hunter.")
+ examine_list += "It's wearing a fearsome carapace entirely composed of [upgrade_name] - its pilot must be an experienced monster hunter."
else
- to_chat(user, "It has attachment points for strapping monster hide on for added protection.")
+ examine_list += "It has attachment points for strapping monster hide on for added protection."
else
if(amount)
- to_chat(user, "It has been strengthened with [amount]/[maxamount] [upgrade_name].")
+ examine_list += "It has been strengthened with [amount]/[maxamount] [upgrade_name]."
else
- to_chat(user, "It can be strengthened with up to [maxamount] [upgrade_name].")
+ examine_list += "It can be strengthened with up to [maxamount] [upgrade_name]."
/datum/component/armor_plate/proc/applyplate(datum/source, obj/item/I, mob/user, params)
if(!istype(I,upgrade_item))
diff --git a/code/datums/components/bane.dm b/code/datums/components/bane.dm
index 84f8010270..bdfcfed517 100644
--- a/code/datums/components/bane.dm
+++ b/code/datums/components/bane.dm
@@ -19,12 +19,14 @@
src.damage_multiplier = damage_multiplier
/datum/component/bane/RegisterWithParent()
+ . = ..()
if(speciestype)
RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, .proc/speciesCheck)
else
RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, .proc/mobCheck)
/datum/component/bane/UnregisterFromParent()
+ . = ..()
UnregisterSignal(parent, COMSIG_ITEM_AFTERATTACK)
/datum/component/bane/proc/speciesCheck(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters)
diff --git a/code/datums/components/bouncy.dm b/code/datums/components/bouncy.dm
index f6a2a89195..c7ca85455b 100644
--- a/code/datums/components/bouncy.dm
+++ b/code/datums/components/bouncy.dm
@@ -21,9 +21,11 @@
RegisterSignal(parent, bounce, .proc/bounce_up)
/datum/component/bouncy/RegisterWithParent()
+ . = ..()
RegisterSignal(parent, bounce_signals, .proc/bounce_up)
/datum/component/bouncy/UnregisterFromParent()
+ . = ..()
UnregisterSignal(parent, bounce_signals)
/datum/component/bouncy/proc/bounce_up(datum/source)
diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm
index 372fa8e283..d5af47ea1f 100644
--- a/code/datums/components/butchering.dm
+++ b/code/datums/components/butchering.dm
@@ -4,8 +4,9 @@
var/bonus_modifier = 0 //percentage increase to bonus item chance
var/butcher_sound = 'sound/weapons/slice.ogg' //sound played when butchering
var/butchering_enabled = TRUE
+ var/can_be_blunt = FALSE
-/datum/component/butchering/Initialize(_speed, _effectiveness, _bonus_modifier, _butcher_sound, disabled)
+/datum/component/butchering/Initialize(_speed, _effectiveness, _bonus_modifier, _butcher_sound, disabled, _can_be_blunt)
if(_speed)
speed = _speed
if(_effectiveness)
@@ -16,6 +17,56 @@
butcher_sound = _butcher_sound
if(disabled)
butchering_enabled = FALSE
+ if(_can_be_blunt)
+ can_be_blunt = _can_be_blunt
+ if(isitem(parent))
+ RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/onItemAttack)
+
+/datum/component/butchering/proc/onItemAttack(obj/item/source, mob/living/M, mob/living/user)
+ if(user.a_intent != INTENT_HARM)
+ return
+ if(M.stat == DEAD && (M.butcher_results || M.guaranteed_butcher_results)) //can we butcher it?
+ if(butchering_enabled && (can_be_blunt || source.get_sharpness()))
+ INVOKE_ASYNC(src, .proc/startButcher, source, M, user)
+ return COMPONENT_ITEM_NO_ATTACK
+
+ if(ishuman(M) && source.force && source.get_sharpness())
+ var/mob/living/carbon/human/H = M
+ if((H.health <= H.crit_threshold || (user.pulling == H && user.grab_state >= GRAB_NECK) || H.IsSleeping()) && user.zone_selected == BODY_ZONE_HEAD) // Only sleeping, neck grabbed, or crit, can be sliced.
+ if(H.has_status_effect(/datum/status_effect/neck_slice))
+ user.show_message("[H]'s neck has already been already cut, you can't make the bleeding any worse!", 1, \
+ "Their neck has already been already cut, you can't make the bleeding any worse!")
+ return COMPONENT_ITEM_NO_ATTACK
+ INVOKE_ASYNC(src, .proc/startNeckSlice, source, H, user)
+ return COMPONENT_ITEM_NO_ATTACK
+
+/datum/component/butchering/proc/startButcher(obj/item/source, mob/living/M, mob/living/user)
+ to_chat(user, "You begin to butcher [M]...")
+ playsound(M.loc, butcher_sound, 50, TRUE, -1)
+ if(do_mob(user, M, speed) && M.Adjacent(source))
+ Butcher(user, M)
+
+/datum/component/butchering/proc/startNeckSlice(obj/item/source, mob/living/carbon/human/H, mob/living/user)
+ user.visible_message("[user] is slitting [H]'s throat!", \
+ "You start slicing [H]'s throat!", \
+ "You hear a cutting noise!", ignored_mobs = H)
+ H.show_message("Your throat is being slit by [user]!", 1, \
+ "Something is cutting into your neck!", NONE)
+ log_combat(user, H, "starts slicing the throat of")
+
+ playsound(H.loc, butcher_sound, 50, TRUE, -1)
+ if(do_mob(user, H, CLAMP(500 / source.force, 30, 100)) && H.Adjacent(source))
+ if(H.has_status_effect(/datum/status_effect/neck_slice))
+ user.show_message("[H]'s neck has already been already cut, you can't make the bleeding any worse!", 1, \
+ "Their neck has already been already cut, you can't make the bleeding any worse!")
+ return
+
+ H.visible_message("[user] slits [H]'s throat!", \
+ "[user] slits your throat...")
+ log_combat(user, H, "finishes slicing the throat of")
+ H.apply_damage(source.force, BRUTE, BODY_ZONE_HEAD)
+ H.bleed_rate = CLAMP(H.bleed_rate + 20, 0, 30)
+ H.apply_status_effect(/datum/status_effect/neck_slice)
/datum/component/butchering/proc/Butcher(mob/living/butcher, mob/living/meat)
var/turf/T = meat.drop_location()
@@ -50,3 +101,23 @@
/datum/component/butchering/proc/ButcherEffects(mob/living/meat) //extra effects called on butchering, override this via subtypes
return
+
+///Special snowflake component only used for the recycler.
+/datum/component/butchering/recycler
+
+/datum/component/butchering/recycler/Initialize(_speed, _effectiveness, _bonus_modifier, _butcher_sound, disabled, _can_be_blunt)
+ if(!istype(parent, /obj/machinery/recycler)) //EWWW
+ return COMPONENT_INCOMPATIBLE
+ . = ..()
+ if(. == COMPONENT_INCOMPATIBLE)
+ return
+ RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/onCrossed)
+
+/datum/component/butchering/recycler/proc/onCrossed(datum/source, mob/living/L)
+ if(!istype(L))
+ return
+ var/obj/machinery/recycler/eater = parent
+ if(eater.safety_mode || (eater.stat & (BROKEN|NOPOWER))) //I'm so sorry.
+ return
+ if(L.stat == DEAD && (L.butcher_results || L.guaranteed_butcher_results))
+ Butcher(parent, L)
\ No newline at end of file
diff --git a/code/datums/components/construction.dm b/code/datums/components/construction.dm
index 3b64d68486..01df44752c 100644
--- a/code/datums/components/construction.dm
+++ b/code/datums/components/construction.dm
@@ -19,9 +19,9 @@
RegisterSignal(parent, COMSIG_PARENT_ATTACKBY,.proc/action)
update_parent(index)
-/datum/component/construction/proc/examine(datum/source, mob/user)
+/datum/component/construction/proc/examine(datum/source, mob/user, list/examine_list)
if(desc)
- to_chat(user, desc)
+ examine_list += desc
/datum/component/construction/proc/on_step()
if(index > steps.len)
diff --git a/code/datums/components/decal.dm b/code/datums/components/decal.dm
index bdc1d3a2f6..60317797a7 100644
--- a/code/datums/components/decal.dm
+++ b/code/datums/components/decal.dm
@@ -17,6 +17,7 @@
apply()
/datum/component/decal/RegisterWithParent()
+ . = ..()
if(first_dir)
RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, .proc/rotate_react)
if(cleanable)
@@ -25,6 +26,7 @@
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine)
/datum/component/decal/UnregisterFromParent()
+ . = ..()
UnregisterSignal(parent, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE))
/datum/component/decal/Destroy()
@@ -71,5 +73,5 @@
if(strength >= cleanable)
qdel(src)
-/datum/component/decal/proc/examine(datum/source, mob/user)
- to_chat(user, description)
\ No newline at end of file
+/datum/component/decal/proc/examine(datum/source, mob/user, list/examine_list)
+ examine_list += description
\ No newline at end of file
diff --git a/code/datums/components/earhealing.dm b/code/datums/components/earhealing.dm
deleted file mode 100644
index bd3d57480d..0000000000
--- a/code/datums/components/earhealing.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-// An item worn in the ear slot with this component will heal your ears each
-// Life() tick, even if normally your ears would be too damaged to heal.
-
-/datum/component/earhealing
- var/mob/living/carbon/wearer
-
-/datum/component/earhealing/Initialize()
- if(!isitem(parent))
- return COMPONENT_INCOMPATIBLE
- RegisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED), .proc/equippedChanged)
-
-/datum/component/earhealing/proc/equippedChanged(datum/source, mob/living/carbon/user, slot)
- if (slot == SLOT_EARS && istype(user))
- if (!wearer)
- START_PROCESSING(SSobj, src)
- wearer = user
- else
- if (wearer)
- STOP_PROCESSING(SSobj, src)
- wearer = null
-
-/datum/component/earhealing/process()
- if (!wearer)
- STOP_PROCESSING(SSobj, src)
- return
- if(!HAS_TRAIT(wearer, TRAIT_DEAF))
- var/obj/item/organ/ears/ears = wearer.getorganslot(ORGAN_SLOT_EARS)
- if (ears)
- ears.deaf = max(ears.deaf - 1, (ears.damage < ears.maxHealth ? 0 : 1)) // Do not clear deafness if our ears are too damaged
- ears.damage = max(ears.damage - 0.1, 0)
diff --git a/code/datums/components/fantasy/_fantasy.dm b/code/datums/components/fantasy/_fantasy.dm
index 86e016784a..9e8493b6f4 100644
--- a/code/datums/components/fantasy/_fantasy.dm
+++ b/code/datums/components/fantasy/_fantasy.dm
@@ -30,11 +30,13 @@
return ..()
/datum/component/fantasy/RegisterWithParent()
+ . = ..()
var/obj/item/master = parent
originalName = master.name
modify()
/datum/component/fantasy/UnregisterFromParent()
+ . = ..()
unmodify()
/datum/component/fantasy/InheritComponent(datum/component/fantasy/newComp, original, list/arguments)
diff --git a/code/datums/components/igniter.dm b/code/datums/components/igniter.dm
index b40383e828..13944b1200 100644
--- a/code/datums/components/igniter.dm
+++ b/code/datums/components/igniter.dm
@@ -9,6 +9,7 @@
src.fire_stacks = fire_stacks
/datum/component/igniter/RegisterWithParent()
+ . = ..()
if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc
RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit)
else if(isitem(parent))
@@ -17,6 +18,7 @@
RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget)
/datum/component/igniter/UnregisterFromParent()
+ . = ..()
UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT))
/datum/component/igniter/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters)
diff --git a/code/datums/components/jousting.dm b/code/datums/components/jousting.dm
index d1d0d6d504..08f3c1d643 100644
--- a/code/datums/components/jousting.dm
+++ b/code/datums/components/jousting.dm
@@ -45,7 +45,7 @@
var/knockdown_chance = (target_buckled? mounted_knockdown_chance_per_tile : unmounted_knockdown_chance_per_tile) * current
var/knockdown_time = (target_buckled? mounted_knockdown_time : unmounted_knockdown_time)
var/damage = (target_buckled? mounted_damage_boost_per_tile : unmounted_damage_boost_per_tile) * current
- var/sharp = I.is_sharp()
+ var/sharp = I.get_sharpness()
var/msg
if(damage)
msg += "[user] [sharp? "impales" : "slams into"] [target] [sharp? "on" : "with"] their [parent]"
diff --git a/code/datums/components/knockback.dm b/code/datums/components/knockback.dm
index b4fcaa2dd8..988a0e575e 100644
--- a/code/datums/components/knockback.dm
+++ b/code/datums/components/knockback.dm
@@ -10,6 +10,7 @@
src.throw_anchored = throw_anchored
/datum/component/knockback/RegisterWithParent()
+ . = ..()
if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc
RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit)
else if(isitem(parent))
@@ -18,6 +19,7 @@
RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget)
/datum/component/knockback/UnregisterFromParent()
+ . = ..()
UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT))
/datum/component/knockback/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters)
diff --git a/code/datums/components/lifesteal.dm b/code/datums/components/lifesteal.dm
index c7a78e10a3..9d62d32866 100644
--- a/code/datums/components/lifesteal.dm
+++ b/code/datums/components/lifesteal.dm
@@ -10,6 +10,7 @@
src.flat_heal = flat_heal
/datum/component/lifesteal/RegisterWithParent()
+ . = ..()
if(isgun(parent))
RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit)
else if(isitem(parent))
@@ -18,6 +19,7 @@
RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget)
/datum/component/lifesteal/UnregisterFromParent()
+ . = ..()
UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT))
/datum/component/lifesteal/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters)
diff --git a/code/datums/components/lockon_aiming.dm b/code/datums/components/lockon_aiming.dm
index 38b707ac19..bbdbb7dc66 100644
--- a/code/datums/components/lockon_aiming.dm
+++ b/code/datums/components/lockon_aiming.dm
@@ -4,7 +4,7 @@
/datum/component/lockon_aiming
dupe_mode = COMPONENT_DUPE_ALLOWED
- var/lock_icon = 'icons/mob/blob.dmi'
+ var/lock_icon = 'icons/mob/cameramob.dmi'
var/lock_icon_state = "marker"
var/mutable_appearance/lock_appearance
var/list/image/lock_images
diff --git a/code/datums/components/magnetic_catch.dm b/code/datums/components/magnetic_catch.dm
index fb68b89ebf..c7e59e0ead 100644
--- a/code/datums/components/magnetic_catch.dm
+++ b/code/datums/components/magnetic_catch.dm
@@ -15,8 +15,8 @@
for(var/i in parent)
RegisterSignal(i, COMSIG_MOVABLE_PRE_THROW, .proc/throw_react)
-/datum/component/magnetic_catch/proc/examine(datum/source, mob/user)
- to_chat(user, "It has been installed with inertia dampening to prevent coffee spills.")
+/datum/component/magnetic_catch/proc/examine(datum/source, mob/user, list/examine_list)
+ examine_list += "It has been installed with inertia dampening to prevent coffee spills."
/datum/component/magnetic_catch/proc/crossed_react(datum/source, atom/movable/thing)
RegisterSignal(thing, COMSIG_MOVABLE_PRE_THROW, .proc/throw_react, TRUE)
diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm
index 48fa758db1..25094518b8 100644
--- a/code/datums/components/material_container.dm
+++ b/code/datums/components/material_container.dm
@@ -49,13 +49,13 @@
var/mat_path = possible_mats[id]
materials[id] = new mat_path()
-/datum/component/material_container/proc/OnExamine(datum/source, mob/user)
+/datum/component/material_container/proc/OnExamine(datum/source, mob/user, list/examine_list)
if(show_on_examine)
for(var/I in materials)
var/datum/material/M = materials[I]
var/amt = amount(M.id)
if(amt)
- to_chat(user, "It has [amt] units of [lowertext(M.name)] stored.")
+ examine_list += "It has [amt] units of [lowertext(M.name)] stored."
/datum/component/material_container/proc/OnAttackBy(datum/source, obj/item/I, mob/living/user)
var/list/tc = allowed_typecache
diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm
index 8c6013aeab..2ecd77546d 100644
--- a/code/datums/components/mood.dm
+++ b/code/datums/components/mood.dm
@@ -8,7 +8,7 @@
var/mood_level = 5 //To track what stage of moodies they're on
var/sanity_level = 5 //To track what stage of sanity they're on
var/mood_modifier = 1 //Modifier to allow certain mobs to be less affected by moodlets
- var/datum/mood_event/list/mood_events = list()
+ var/list/datum/mood_event/mood_events = list()
var/insanity_effect = 0 //is the owner being punished for low mood? If so, how much?
var/obj/screen/mood/screen_obj
@@ -125,6 +125,9 @@
screen_obj.icon_state = "mood[mood_level]"
/datum/component/mood/process() //Called on SSmood process
+ if(QDELETED(parent)) // workaround to an obnoxious sneaky periodical runtime.
+ qdel(src)
+ return
var/mob/living/owner = parent
switch(mood_level)
@@ -147,15 +150,6 @@
if(9)
setSanity(sanity+0.4, maximum=SANITY_GREAT)
- if(HAS_TRAIT(owner, TRAIT_DEPRESSION))
- if(prob(0.05))
- add_event(null, "depression", /datum/mood_event/depression)
- clear_event(null, "jolly")
- if(HAS_TRAIT(owner, TRAIT_JOLLY))
- if(prob(0.05))
- add_event(null, "jolly", /datum/mood_event/jolly)
- clear_event(null, "depression")
-
HandleNutrition(owner)
/datum/component/mood/proc/setSanity(amount, minimum=SANITY_INSANE, maximum=SANITY_NEUTRAL)//I'm sure bunging this in here will have no negative repercussions.
@@ -245,11 +239,11 @@
var/datum/hud/hud = owner.hud_used
screen_obj = new
hud.infodisplay += screen_obj
- RegisterSignal(hud, COMSIG_PARENT_QDELETED, .proc/unmodify_hud)
+ RegisterSignal(hud, COMSIG_PARENT_QDELETING, .proc/unmodify_hud)
RegisterSignal(screen_obj, COMSIG_CLICK, .proc/hud_click)
/datum/component/mood/proc/unmodify_hud(datum/source)
- if(!screen_obj)
+ if(!screen_obj || !parent)
return
var/mob/living/owner = parent
var/datum/hud/hud = owner.hud_used
diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm
index 3f7f794435..0ef13b514b 100644
--- a/code/datums/components/nanites.dm
+++ b/code/datums/components/nanites.dm
@@ -34,6 +34,7 @@
cloud_sync()
/datum/component/nanites/RegisterWithParent()
+ . = ..()
RegisterSignal(parent, COMSIG_HAS_NANITES, .proc/confirm_nanites)
RegisterSignal(parent, COMSIG_NANITE_UI_DATA, .proc/nanite_ui_data)
RegisterSignal(parent, COMSIG_NANITE_GET_PROGRAMS, .proc/get_programs)
@@ -53,11 +54,11 @@
RegisterSignal(parent, COMSIG_MOB_ALLOWED, .proc/check_access)
RegisterSignal(parent, COMSIG_LIVING_ELECTROCUTE_ACT, .proc/on_shock)
RegisterSignal(parent, COMSIG_LIVING_MINOR_SHOCK, .proc/on_minor_shock)
- RegisterSignal(parent, COMSIG_MOVABLE_HEAR, .proc/on_hear)
RegisterSignal(parent, COMSIG_SPECIES_GAIN, .proc/check_viable_biotype)
RegisterSignal(parent, COMSIG_NANITE_SIGNAL, .proc/receive_signal)
/datum/component/nanites/UnregisterFromParent()
+ . = ..()
UnregisterSignal(parent, list(COMSIG_HAS_NANITES,
COMSIG_NANITE_UI_DATA,
COMSIG_NANITE_GET_PROGRAMS,
@@ -191,11 +192,6 @@
var/datum/nanite_program/NP = X
NP.on_death(gibbed)
-/datum/component/nanites/proc/on_hear(datum/source, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
- for(var/X in programs)
- var/datum/nanite_program/NP = X
- NP.on_hear(message, speaker, message_language, raw_message, radio_freq, spans, message_mode)
-
/datum/component/nanites/proc/receive_signal(datum/source, code, source = "an unidentified source")
for(var/X in programs)
var/datum/nanite_program/NP = X
diff --git a/code/datums/components/orbiter.dm b/code/datums/components/orbiter.dm
index efa0fd14d5..05174c196b 100644
--- a/code/datums/components/orbiter.dm
+++ b/code/datums/components/orbiter.dm
@@ -20,12 +20,14 @@
begin_orbit(orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation)
/datum/component/orbiter/RegisterWithParent()
+ . = ..()
var/atom/target = parent
while(ismovableatom(target))
RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/move_react)
target = target.loc
/datum/component/orbiter/UnregisterFromParent()
+ . = ..()
var/atom/target = parent
while(ismovableatom(target))
UnregisterSignal(target, COMSIG_MOVABLE_MOVED)
diff --git a/code/datums/components/radioactive.dm b/code/datums/components/radioactive.dm
index bf47793f81..9dac20d94f 100644
--- a/code/datums/components/radioactive.dm
+++ b/code/datums/components/radioactive.dm
@@ -18,7 +18,7 @@
hl3_release_date = _half_life
can_contaminate = _can_contaminate
- if(istype(parent, /atom))
+ if(istype(parent, /atom))
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/rad_examine)
if(istype(parent, /obj/item))
RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/rad_attack)
@@ -58,7 +58,7 @@
else
strength = max(strength, arguments[1])
-/datum/component/radioactive/proc/rad_examine(datum/source, mob/user, atom/thing)
+/datum/component/radioactive/proc/rad_examine(datum/source, mob/user, list/examine_list)
var/atom/master = parent
var/list/out = list()
if(get_dist(master, user) <= 1)
@@ -72,7 +72,7 @@
out += "[out ? " and it " : "[master] "]hurts to look at."
else
out += "."
- to_chat(user, out.Join())
+ examine_list += out.Join()
/datum/component/radioactive/proc/rad_attack(datum/source, atom/movable/target, mob/living/user)
radiation_pulse(parent, strength/20)
diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm
index dcdbd5ca4b..c05b07a693 100644
--- a/code/datums/components/riding.dm
+++ b/code/datums/components/riding.dm
@@ -310,10 +310,10 @@
if(!user.put_in_hands(inhand, TRUE))
qdel(inhand) // it isn't going to be added to offhands anyway
break
- LAZYADD(equipped, src)
+ LAZYADD(equipped, inhand)
var/amount_equipped = LAZYLEN(equipped)
if(amount_equipped)
- LAZYADD(offhands[L], amount_equipped)
+ LAZYADD(offhands[L], equipped)
if(amount_equipped >= amount_required)
return TRUE
unequip_buckle_inhands(L)
diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm
index a044ca301e..422d73520e 100644
--- a/code/datums/components/rotation.dm
+++ b/code/datums/components/rotation.dm
@@ -98,14 +98,15 @@
remove_verbs()
. = ..()
-/datum/component/simple_rotation/proc/ExamineMessage(datum/source, mob/user)
+/datum/component/simple_rotation/proc/ExamineMessage(datum/source, mob/user, list/examine_list)
if(rotation_flags & ROTATION_ALTCLICK)
- to_chat(user, "Alt-click to rotate it clockwise.")
+ examine_list += "Alt-click to rotate it clockwise."
/datum/component/simple_rotation/proc/HandRot(datum/source, mob/user, rotation = default_rotation_direction)
if(!can_be_rotated.Invoke(user, rotation) || !can_user_rotate.Invoke(user, rotation))
return
BaseRot(user, rotation)
+ return TRUE
/datum/component/simple_rotation/proc/WrenchRot(datum/source, obj/item/I, mob/living/user)
if(!can_be_rotated.Invoke(user,default_rotation_direction) || !can_user_rotate.Invoke(user,default_rotation_direction))
diff --git a/code/datums/components/shrapnel.dm b/code/datums/components/shrapnel.dm
index a911221f26..4d1fe21b95 100644
--- a/code/datums/components/shrapnel.dm
+++ b/code/datums/components/shrapnel.dm
@@ -13,10 +13,12 @@
src.override_projectile_range = override_projectile_range
/datum/component/shrapnel/RegisterWithParent()
+ . = ..()
if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc
RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit)
/datum/component/shrapnel/UnregisterFromParent()
+ . = ..()
UnregisterSignal(parent, list(COMSIG_PROJECTILE_ON_HIT))
/datum/component/shrapnel/proc/projectile_hit(atom/fired_from, atom/movable/firer, atom/target, Angle)
diff --git a/code/datums/components/shrink.dm b/code/datums/components/shrink.dm
new file mode 100644
index 0000000000..f070d9b22f
--- /dev/null
+++ b/code/datums/components/shrink.dm
@@ -0,0 +1,42 @@
+/datum/component/shrink
+ var/olddens
+ var/oldopac
+ dupe_mode = COMPONENT_DUPE_HIGHLANDER
+
+/datum/component/shrink/Initialize(shrink_time)
+ if(!isatom(parent))
+ return COMPONENT_INCOMPATIBLE
+ var/atom/parent_atom = parent
+ parent_atom.transform = parent_atom.transform.Scale(0.5,0.5)
+ olddens = parent_atom.density
+ oldopac = parent_atom.opacity
+ parent_atom.density = 0
+ parent_atom.opacity = 0
+ if(isliving(parent_atom))
+ var/mob/living/L = parent_atom
+ L.add_movespeed_modifier(MOVESPEED_ID_SHRINK_RAY, update=TRUE, priority=100, multiplicative_slowdown=4)
+ if(iscarbon(L))
+ var/mob/living/carbon/C = L
+ C.unequip_everything()
+ C.visible_message("[C]'s belongings fall off of [C.p_them()] as they shrink down!",
+ "Your belongings fall away as everything grows bigger!")
+ if(ishuman(C))
+ var/mob/living/carbon/human/H = C
+ H.physiology.damage_resistance -= 100//carbons take double damage while shrunk
+ parent_atom.visible_message("[parent_atom] shrinks down to a tiny size!",
+ "Everything grows bigger!")
+ QDEL_IN(src, shrink_time)
+
+
+/datum/component/shrink/Destroy()
+ var/atom/parent_atom = parent
+ parent_atom.transform = parent_atom.transform.Scale(2,2)
+ parent_atom.density = olddens
+ parent_atom.opacity = oldopac
+ if(isliving(parent_atom))
+ var/mob/living/L = parent_atom
+ L.remove_movespeed_modifier(MOVESPEED_ID_SHRINK_RAY)
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ H.physiology.damage_resistance += 100
+ ..()
\ No newline at end of file
diff --git a/code/datums/components/sizzle.dm b/code/datums/components/sizzle.dm
new file mode 100644
index 0000000000..5e56dd15cb
--- /dev/null
+++ b/code/datums/components/sizzle.dm
@@ -0,0 +1,25 @@
+/datum/component/sizzle
+ var/mutable_appearance/sizzling
+ var/sizzlealpha = 0
+ dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
+
+/datum/component/sizzle/Initialize()
+ if(!isatom(parent))
+ return COMPONENT_INCOMPATIBLE
+ setup_sizzle()
+
+/datum/component/sizzle/InheritComponent(datum/component/C, i_am_original)
+ var/atom/food = parent
+ sizzlealpha += 5
+ sizzling.alpha = sizzlealpha
+ food.cut_overlay(sizzling)
+ food.add_overlay(sizzling)
+
+/datum/component/sizzle/proc/setup_sizzle()
+ var/atom/food = parent
+ var/icon/grill_marks = icon(initial(food.icon), initial(food.icon_state)) //we only want to apply grill marks to the initial icon_state for each object
+ grill_marks.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent)
+ grill_marks.Blend(icon('icons/obj/kitchen.dmi', "grillmarks"), ICON_MULTIPLY) //adds grill marks and the remaining white areas become transparent
+ sizzling = new(grill_marks)
+ sizzling.alpha = sizzlealpha
+ food.add_overlay(sizzling)
\ No newline at end of file
diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm
index bbcb0d88a6..91928656e1 100644
--- a/code/datums/components/stationloving.dm
+++ b/code/datums/components/stationloving.dm
@@ -8,6 +8,7 @@
if(!ismovableatom(parent))
return COMPONENT_INCOMPATIBLE
RegisterSignal(parent, list(COMSIG_MOVABLE_Z_CHANGED), .proc/check_in_bounds)
+ RegisterSignal(parent, list(COMSIG_MOVABLE_SECLUDED_LOCATION), .proc/relocate)
RegisterSignal(parent, list(COMSIG_PARENT_PREQDELETED), .proc/check_deletion)
RegisterSignal(parent, list(COMSIG_ITEM_IMBUE_SOUL), .proc/check_soul_imbue)
src.inform_admins = inform_admins
@@ -32,6 +33,7 @@
var/atom/movable/AM = parent
AM.forceMove(targetturf)
+ to_chat(get(parent, /mob), "You can't help but feel that you just lost something back there...")
// move the disc, so ghosts remain orbiting it even if it's "destroyed"
return targetturf
@@ -40,7 +42,6 @@
return
else
var/turf/currentturf = get_turf(src)
- to_chat(get(parent, /mob), "You can't help but feel that you just lost something back there...")
var/turf/targetturf = relocate()
log_game("[parent] has been moved out of bounds in [loc_name(currentturf)]. Moving it to [loc_name(targetturf)].")
if(inform_admins)
diff --git a/code/datums/components/storage/concrete/special.dm b/code/datums/components/storage/concrete/special.dm
index 556e9e9fc9..9f2c435642 100644
--- a/code/datums/components/storage/concrete/special.dm
+++ b/code/datums/components/storage/concrete/special.dm
@@ -1,5 +1,5 @@
-/datum/component/storage/concrete/secret_satchel/can_be_inserted(I,msg,user)
+/datum/component/storage/concrete/secret_satchel/can_be_inserted(obj/item/I, stop_messages = FALSE, mob/M)
if(SSpersistence.spawned_objects[I])
- to_chat(user, "[I] is unstable after its journey through space and time, it wouldn't survive another trip.")
+ to_chat(M, "[I] is unstable after its journey through space and time, it wouldn't survive another trip.")
return FALSE
return ..()
diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm
index a92ae9e629..76a9b2e6aa 100644
--- a/code/datums/components/storage/storage.dm
+++ b/code/datums/components/storage/storage.dm
@@ -57,7 +57,7 @@
var/screen_start_x = 4 //These two are where the storage starts being rendered, screen_loc wise.
var/screen_start_y = 2
//End
-
+
var/limited_random_access = FALSE //Quick if statement in accessible_items to determine if we care at all about what people can access at once.
var/limited_random_access_stack_position = 0 //If >0, can only access top items
var/limited_random_access_stack_bottom_up = FALSE //If TRUE, above becomes bottom items
@@ -309,6 +309,7 @@
else
var/datum/numbered_display/ND = .[I.type]
ND.number++
+ . = sortTim(., /proc/cmp_numbered_displays_name_asc, associative = TRUE)
//This proc determines the size of the inventory to be displayed. Please touch it only if you know what you're doing.
/datum/component/storage/proc/orient2hud(mob/user, maxcolumns)
@@ -646,9 +647,9 @@
if(M == viewing)
to_chat(usr, "You put [I] [insert_preposition]to [parent].")
else if(in_range(M, viewing)) //If someone is standing close enough, they can tell what it is...
- viewing.show_message("[M] puts [I] [insert_preposition]to [parent].", 1)
+ viewing.show_message("[M] puts [I] [insert_preposition]to [parent].", MSG_VISUAL)
else if(I && I.w_class >= 3) //Otherwise they can only see large or normal items from a distance...
- viewing.show_message("[M] puts [I] [insert_preposition]to [parent].", 1)
+ viewing.show_message("[M] puts [I] [insert_preposition]to [parent].", MSG_VISUAL)
/datum/component/storage/proc/update_icon()
if(isobj(parent))
@@ -761,7 +762,7 @@
if(!isliving(user) || !user.CanReach(parent))
return
if(check_locked(source, user, TRUE))
- return
+ return TRUE
var/atom/A = parent
if(!quickdraw)
@@ -769,19 +770,20 @@
user_show_to_mob(user)
if(rustle_sound)
playsound(A, "rustle", 50, 1, -5)
- return
+ return TRUE
- if(!user.incapacitated())
+ if(user.can_hold_items() && !user.incapacitated())
var/obj/item/I = locate() in real_location()
if(!I)
return
A.add_fingerprint(user)
remove_from_storage(I, get_turf(user))
if(!user.put_in_hands(I))
- to_chat(user, "You fumble for [I] and it falls on the floor.")
- return
+ user.visible_message("[user] fumbles with the [parent], letting [I] fall on the floor.", \
+ "You fumble with [parent], letting [I] fall on the floor.")
+ return TRUE
user.visible_message("[user] draws [I] from [parent]!", "You draw [I] from [parent].")
- return
+ return TRUE
/datum/component/storage/proc/action_trigger(datum/signal_source, datum/action/source)
gather_mode_switch(source.owner)
diff --git a/code/datums/components/summoning.dm b/code/datums/components/summoning.dm
index 552959603d..61718301b3 100644
--- a/code/datums/components/summoning.dm
+++ b/code/datums/components/summoning.dm
@@ -24,6 +24,7 @@
src.faction = faction
/datum/component/summoning/RegisterWithParent()
+ . = ..()
if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc
RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit)
else if(isitem(parent))
@@ -32,6 +33,7 @@
RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget)
/datum/component/summoning/UnregisterFromParent()
+ . = ..()
UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT))
/datum/component/summoning/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters)
diff --git a/code/datums/components/tactical.dm b/code/datums/components/tactical.dm
index 5917fc3009..ba028e2fd5 100644
--- a/code/datums/components/tactical.dm
+++ b/code/datums/components/tactical.dm
@@ -9,10 +9,12 @@
src.allowed_slot = allowed_slot
/datum/component/tactical/RegisterWithParent()
+ . = ..()
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/modify)
RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/unmodify)
/datum/component/tactical/UnregisterFromParent()
+ . = ..()
UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED))
unmodify()
diff --git a/code/datums/components/thermite.dm b/code/datums/components/thermite.dm
index 45243014dd..916b3ed3b2 100644
--- a/code/datums/components/thermite.dm
+++ b/code/datums/components/thermite.dm
@@ -15,7 +15,7 @@
/turf/closed/indestructible,
/turf/open/indestructible)
)
-
+
var/static/list/resistlist = typecacheof(
/turf/closed/wall/r_wall
)
@@ -77,5 +77,5 @@
thermite_melt()
/datum/component/thermite/proc/attackby_react(datum/source, obj/item/thing, mob/user, params)
- if(thing.is_hot())
+ if(thing.get_temperature())
thermite_melt(user)
\ No newline at end of file
diff --git a/code/datums/components/virtual_reality.dm b/code/datums/components/virtual_reality.dm
index f8f0679e9b..2f0405af2e 100644
--- a/code/datums/components/virtual_reality.dm
+++ b/code/datums/components/virtual_reality.dm
@@ -1,128 +1,245 @@
+/**
+ * The virtual reality turned component.
+ * Originally created to overcome issues of mob polymorphing locking the player inside virtual reality
+ * and allow for a more "immersive" virtual reality in a virtual reality experience.
+ * It relies on comically complex order of logic, expect things to break if procs such as mind/transfer_to() are revamped.
+ * In short, a barebone not so hardcoded VR framework.
+ * If you plan to add more devices that make use of this component, remember to isolate their code outta here where possible.
+ */
/datum/component/virtual_reality
can_transfer = TRUE
- var/datum/mind/mastermind // where is my mind t. pixies
+ //the player's mind (not the parent's), should something happen to them or to their mob.
+ var/datum/mind/mastermind
+ //the current mob's mind, which we need to keep track for mind transfer.
var/datum/mind/current_mind
- var/obj/machinery/vr_sleeper/vr_sleeper
+ //the action datum used by the mob to quit the vr session.
var/datum/action/quit_vr/quit_action
+ //This one's name should be self explainatory, currently used for emags.
var/you_die_in_the_game_you_die_for_real = FALSE
- var/datum/component/virtual_reality/inception //The component works on a very fragile link betwixt mind, ckey and death.
+ //Used to allow people to play recursively playing vr while playing vr without many issues.
+ var/datum/component/virtual_reality/level_below
+ var/datum/component/virtual_reality/level_above
+ //Used to stop the component from executing certain functions that'd cause us some issues otherwise.
+ //FALSE if there is a connected player, otherwise TRUE.
+ var/session_paused = TRUE
+ //Used to stop unwarranted behaviour from happening in cases where the master mind transference is unsupported. Set on Initialize().
+ var/allow_mastermind_transfer = FALSE
-/datum/component/virtual_reality/Initialize(mob/M, obj/machinery/vr_sleeper/gaming_pod, yolo = FALSE, new_char = TRUE)
- if(!ismob(parent) || !istype(M))
+/datum/component/virtual_reality/Initialize(yolo = FALSE, _allow_mastermind_transfer = FALSE)
+ var/mob/M = parent
+ if(!istype(M) || !M.mind)
return COMPONENT_INCOMPATIBLE
- var/mob/vr_M = parent
- mastermind = M.mind
- RegisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETED), .proc/game_over)
- RegisterSignal(M, COMSIG_MOB_KEY_CHANGE, .proc/switch_player)
- RegisterSignal(mastermind, COMSIG_MIND_TRANSFER, .proc/switch_player)
you_die_in_the_game_you_die_for_real = yolo
- quit_action = new()
- if(gaming_pod)
- vr_sleeper = gaming_pod
- RegisterSignal(vr_sleeper, COMSIG_ATOM_EMAG_ACT, .proc/you_only_live_once)
- RegisterSignal(vr_sleeper, COMSIG_MACHINE_EJECT_OCCUPANT, .proc/revert_to_reality)
- vr_M.ckey = M.ckey
- var/datum/component/virtual_reality/clusterfk = M.GetComponent(/datum/component/virtual_reality)
- if(clusterfk && !clusterfk.inception)
- clusterfk.inception = src
- SStgui.close_user_uis(M, src)
+ allow_mastermind_transfer = _allow_mastermind_transfer
+ quit_action = new
+
+/datum/component/virtual_reality/Destroy()
+ QDEL_NULL(quit_action)
+ if(level_above)
+ level_above.level_below = null
+ level_above = null
+ if(level_below)
+ level_below.level_above = null
+ level_below = null
+ return ..()
/datum/component/virtual_reality/RegisterWithParent()
+ . = ..()
var/mob/M = parent
current_mind = M.mind
+ if(!quit_action)
+ quit_action = new
quit_action.Grant(M)
- RegisterSignal(quit_action, COMSIG_ACTION_TRIGGER, .proc/revert_to_reality)
- RegisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETED), .proc/game_over)
+ RegisterSignal(quit_action, COMSIG_ACTION_TRIGGER, .proc/action_trigger)
+ RegisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING), .proc/game_over)
RegisterSignal(M, COMSIG_MOB_GHOSTIZE, .proc/be_a_quitter)
- RegisterSignal(M, COMSIG_MOB_KEY_CHANGE, .proc/pass_me_the_remote)
- RegisterSignal(current_mind, COMSIG_MIND_TRANSFER, .proc/pass_me_the_remote)
- mastermind.current.audiovisual_redirect = M
- if(vr_sleeper)
- vr_sleeper.vr_mob = M
+ RegisterSignal(M, COMSIG_MOB_KEY_CHANGE, .proc/on_player_transfer)
+ RegisterSignal(current_mind, COMSIG_MIND_TRANSFER, .proc/on_player_transfer)
+ RegisterSignal(current_mind, COMSIG_PRE_MIND_TRANSFER, .proc/pre_player_transfer)
+ if(mastermind?.current)
+ mastermind.current.audiovisual_redirect = M
/datum/component/virtual_reality/UnregisterFromParent()
- quit_action.Remove(parent)
- UnregisterSignal(parent, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETED, COMSIG_MOB_KEY_CHANGE, COMSIG_MOB_GHOSTIZE))
- UnregisterSignal(current_mind, COMSIG_MIND_TRANSFER)
- UnregisterSignal(quit_action, COMSIG_ACTION_TRIGGER)
+ . = ..()
+ if(quit_action)
+ quit_action.Remove(parent)
+ UnregisterSignal(quit_action, COMSIG_ACTION_TRIGGER)
+ UnregisterSignal(parent, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING, COMSIG_MOB_KEY_CHANGE, COMSIG_MOB_GHOSTIZE))
+ UnregisterSignal(current_mind, list(COMSIG_MIND_TRANSFER, COMSIG_PRE_MIND_TRANSFER))
current_mind = null
- mastermind.current.audiovisual_redirect = null
+ if(mastermind?.current)
+ mastermind.current.audiovisual_redirect = null
-/datum/component/virtual_reality/proc/switch_player(datum/source, mob/new_mob, mob/old_mob)
- if(vr_sleeper || !new_mob.mind)
- // Machineries currently don't deal up with the occupant being polymorphed et similar... Or did something fuck up?
- revert_to_reality()
- return
- old_mob.audiovisual_redirect = null
- new_mob.audiovisual_redirect = parent
-
-/datum/component/virtual_reality/proc/action_trigger(datum/signal_source, datum/action/source)
- if(source != quit_action)
- return COMPONENT_ACTION_BLOCK_TRIGGER
- revert_to_reality(signal_source)
+/**
+ * Called when attempting to connect a mob to a virtual reality mob.
+ * This will return FALSE if the mob is without player or dead. TRUE otherwise
+ */
+/datum/component/virtual_reality/proc/connect(mob/M)
+ var/mob/vr_M = parent
+ if(!M.mind || M.stat == DEAD || !vr_M.mind || vr_M.stat == DEAD)
+ return FALSE
+ var/datum/component/virtual_reality/VR = M.GetComponent(/datum/component/virtual_reality)
+ if(VR)
+ VR.level_below = src
+ level_above = VR
+ M.transfer_ckey(vr_M, FALSE)
+ mastermind = M.mind
+ mastermind.current.audiovisual_redirect = parent
+ RegisterSignal(mastermind, COMSIG_PRE_MIND_TRANSFER, .proc/switch_player)
+ RegisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING), .proc/game_over)
+ RegisterSignal(M, COMSIG_MOB_PRE_PLAYER_CHANGE, .proc/player_hijacked)
+ SStgui.close_user_uis(vr_M, src)
+ session_paused = FALSE
+ return TRUE
+/**
+ * emag_act() hook. Makes the game deadlier, killing the mastermind mob too should the parent die.
+ */
/datum/component/virtual_reality/proc/you_only_live_once()
- if(you_die_in_the_game_you_die_for_real || vr_sleeper?.only_current_user_can_interact)
+ if(you_die_in_the_game_you_die_for_real)
return FALSE
you_die_in_the_game_you_die_for_real = TRUE
return TRUE
-/datum/component/virtual_reality/proc/pass_me_the_remote(datum/source, mob/new_mob)
- if(new_mob == mastermind.current)
- revert_to_reality(source)
- return TRUE
- new_mob.TakeComponent(src)
- return TRUE
+/**
+ * Called when the mastermind mind is transferred to another mob.
+ * This is pretty much just going to simply quit the session until machineries support polymorphed occupants etcetera.
+ */
+/datum/component/virtual_reality/proc/switch_player(datum/source, mob/new_mob, mob/old_mob)
+ if(session_paused)
+ return
+ if(!allow_mastermind_transfer)
+ quit()
+ return COMPONENT_STOP_MIND_TRANSFER
+ UnregisterSignal(old_mob, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING, COMSIG_MOB_PRE_PLAYER_CHANGE))
+ RegisterSignal(new_mob, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING), .proc/game_over)
+ RegisterSignal(new_mob, COMSIG_MOB_PRE_PLAYER_CHANGE, .proc/player_hijacked)
+ old_mob.audiovisual_redirect = null
+ new_mob.audiovisual_redirect = parent
+/**
+ * Called to stop the player mind from being transferred should the new mob happen to be one of our masterminds'.
+ * Since the target's mind.current is going to be null'd in the mind transfer process,
+ * This has to be done in a different signal proc than on_player_transfer(), by then the mastermind.current will be null.
+ */
+/datum/component/virtual_reality/proc/pre_player_transfer(datum/source, mob/new_mob, mob/old_mob)
+ if(!mastermind || session_paused)
+ return
+ if(new_mob == mastermind.current)
+ quit()
+ return COMPONENT_STOP_MIND_TRANSFER
+ if(!level_above)
+ return
+ var/datum/component/virtual_reality/VR = level_above
+ while(VR)
+ if(VR.mastermind.current == new_mob)
+ VR.quit() //this will revert the ckey back to new_mob.
+ return COMPONENT_STOP_MIND_TRANSFER
+ VR = VR.level_above
+
+/**
+ * Called when someone or something else is somewhat about to replace the mastermind's mob key somehow.
+ * And potentially lock the player in a broken virtual reality plot. Not really something to be proud of.
+ */
+/datum/component/virtual_reality/proc/player_hijacked(datum/source, mob/our_character, mob/their_character)
+ if(session_paused)
+ return
+ if(!their_character)
+ quit(cleanup = TRUE)
+ return
+ var/will_it_be_handled_in_their_pre_player_transfer = FALSE
+ var/datum/component/virtual_reality/VR = src
+ while(VR)
+ if(VR.parent == their_character)
+ will_it_be_handled_in_their_pre_player_transfer = TRUE
+ break
+ VR = VR.level_below
+ if(!will_it_be_handled_in_their_pre_player_transfer) //it's not the player playing shenanigeans, abandon all ships.
+ quit(cleanup = TRUE)
+
+/**
+ * Takes care of moving the component from a mob to another when their mind or ckey is transferred.
+ * The very reason this component even exists (else one would be stuck playing as a monky if monkyified)
+ */
+/datum/component/virtual_reality/proc/on_player_transfer(datum/source, mob/new_mob, mob/old_mob)
+ new_mob.TakeComponent(src)
+
+/**
+ * Required for the component to be transferable from mob to mob.
+ */
/datum/component/virtual_reality/PostTransfer()
if(!ismob(parent))
return COMPONENT_INCOMPATIBLE
+/**
+ *The following procs simply acts as hooks for quit(), since components do not use callbacks anymore
+ */
+/datum/component/virtual_reality/proc/action_trigger(datum/signal_source, datum/action/source)
+ quit()
+ return COMPONENT_ACTION_BLOCK_TRIGGER
+
/datum/component/virtual_reality/proc/revert_to_reality(datum/source)
- quit_it()
+ quit()
/datum/component/virtual_reality/proc/game_over(datum/source)
- quit_it(TRUE, TRUE)
+ quit(you_die_in_the_game_you_die_for_real, TRUE)
+ return COMPONENT_BLOCK_DEATH_BROADCAST
-/datum/component/virtual_reality/proc/be_a_quitter(datum/source, can_reenter_corpse)
- quit_it()
- return COMPONENT_BLOCK_GHOSTING
+/datum/component/virtual_reality/proc/be_a_quitter(datum/source, can_reenter_corpse, special = FALSE, penalize = FALSE)
+ if(!special)
+ quit()
+ return COMPONENT_BLOCK_GHOSTING
-/datum/component/virtual_reality/proc/virtual_reality_in_a_virtual_reality(mob/player, killme = FALSE, datum/component/virtual_reality/yo_dawg)
+/datum/component/virtual_reality/proc/machine_destroyed(datum/source)
+ quit(cleanup = TRUE)
+
+/**
+ * Takes care of deleting itself, moving the player back to the mastermind's current and queueing the parent for deletion.
+ * It supports nested virtual realities by recursively calling vr_in_a_vr(), which in turns calls quit(),
+ * up to the deepest level, where the ckey will be transferred back to our mastermind's mob instead.
+ * The above operation is skipped when session_paused is TRUE (ergo no player in control of the current mob).
+ * vars:
+ * * deathcheck is used to kill the master, you want this FALSE unless for stuff that doesn't involve emagging.
+ * * cleanup is used to queue the parent for the next vr_clean_master's run, where they'll be deleted should they be dead.
+ * * mob/override is used for the recursive virtual reality explained above and shouldn't be used outside of vr_in_a_vr().
+ */
+/datum/component/virtual_reality/proc/quit(deathcheck = FALSE, cleanup = FALSE, mob/override)
var/mob/M = parent
- quit_it(FALSE, killme, player, yo_dawg)
- yo_dawg.inception = null
- if(killme)
- M.death(FALSE)
-
-/datum/component/virtual_reality/proc/quit_it(deathcheck = FALSE, cleanup = FALSE, mob/override)
- var/mob/M = parent
- var/mob/dreamer = override ? override : mastermind.current
- if(!mastermind)
- to_chat(M, "You feel a dreadful sensation, something terrible happened. You try to wake up, but you find yourself unable to...")
- else
- var/key_transfer = FALSE
- if(inception?.parent)
- inception.virtual_reality_in_a_virtual_reality(dreamer, cleanup, src)
+ if(!session_paused)
+ session_paused = TRUE
+ var/mob/dreamer = override || mastermind.current
+ if(!dreamer) //This shouldn't happen.
+ stack_trace("virtual reality component quit() called without a mob to transfer the parent ckey to.")
+ to_chat(M, "You feel a dreadful sensation, something terrible happened. You try to wake up, but you find yourself unable to...")
+ qdel(src)
+ return
+ if(level_below?.parent)
+ level_below.vr_in_a_vr(dreamer, deathcheck, (deathcheck && cleanup))
else
- key_transfer = TRUE
- if(key_transfer)
M.transfer_ckey(dreamer, FALSE)
- dreamer.stop_sound_channel(CHANNEL_HEARTBEAT)
- dreamer.audiovisual_redirect = null
- if(deathcheck && you_die_in_the_game_you_die_for_real)
- to_chat(mastermind, "You feel everything fading away...")
- dreamer.death(FALSE)
- if(cleanup)
- var/obj/effect/vr_clean_master/cleanbot = locate() in get_area(M)
- if(cleanbot)
- LAZYADD(cleanbot.corpse_party, M)
- if(vr_sleeper)
- vr_sleeper.vr_mob = null
- vr_sleeper = null
- qdel(src)
+ if(deathcheck)
+ to_chat(dreamer, "You feel everything fading away...")
+ dreamer.death(FALSE)
+ mastermind.current.audiovisual_redirect = null
+ if(!cleanup)
+ if(level_above)
+ level_above.level_below = null
+ level_above = null
+ UnregisterSignal(mastermind.current, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING, COMSIG_MOB_PRE_PLAYER_CHANGE))
+ UnregisterSignal(mastermind, COMSIG_PRE_MIND_TRANSFER)
+ mastermind = null
+ if(cleanup)
+ var/obj/effect/vr_clean_master/cleanbot = locate() in get_area(M)
+ if(cleanbot)
+ LAZYOR(cleanbot.corpse_party, M)
+ qdel(src)
-/datum/component/virtual_reality/Destroy()
- var/datum/action/quit_vr/delet_me = quit_action
- . = ..()
- qdel(delet_me)
\ No newline at end of file
+/**
+ * Used for recursive virtual realities shenanigeans and should be called only through the above proc.
+ */
+/datum/component/virtual_reality/proc/vr_in_a_vr(mob/player, deathcheck = FALSE, lethal_cleanup = FALSE)
+ var/mob/M = parent
+ quit(deathcheck, lethal_cleanup, player)
+ M.audiovisual_redirect = null
+ if(lethal_cleanup)
+ M.death(FALSE)
diff --git a/code/datums/components/waddling.dm b/code/datums/components/waddling.dm
index a1f538e4dd..f09a92c91c 100644
--- a/code/datums/components/waddling.dm
+++ b/code/datums/components/waddling.dm
@@ -1,15 +1,15 @@
/datum/component/waddling
- dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
+ dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
/datum/component/waddling/Initialize()
- if(!isliving(parent))
- return COMPONENT_INCOMPATIBLE
- RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/Waddle)
+ if(!isliving(parent))
+ return COMPONENT_INCOMPATIBLE
+ RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/Waddle)
/datum/component/waddling/proc/Waddle()
- var/mob/living/L = parent
- if(L.incapacitated() || L.lying)
- return
- animate(L, pixel_z = 4, time = 0)
- animate(pixel_z = 0, transform = turn(matrix(), pick(-12, 0, 12)), time=2)
- animate(pixel_z = 0, transform = matrix(), time = 0)
+ var/mob/living/L = parent
+ if(L.incapacitated() || L.lying)
+ return
+ animate(L, pixel_z = 4, time = 0)
+ animate(pixel_z = 0, transform = turn(matrix(), pick(-12, 0, 12)), time=2)
+ animate(pixel_z = 0, transform = matrix(), time = 0)
diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm
index 84b0320375..d6c5c0bf83 100644
--- a/code/datums/components/wet_floor.dm
+++ b/code/datums/components/wet_floor.dm
@@ -34,10 +34,12 @@
last_process = world.time
/datum/component/wet_floor/RegisterWithParent()
+ . = ..()
RegisterSignal(parent, COMSIG_TURF_IS_WET, .proc/is_wet)
RegisterSignal(parent, COMSIG_TURF_MAKE_DRY, .proc/dry)
/datum/component/wet_floor/UnregisterFromParent()
+ . = ..()
UnregisterSignal(parent, list(COMSIG_TURF_IS_WET, COMSIG_TURF_MAKE_DRY))
/datum/component/wet_floor/Destroy()
@@ -88,6 +90,9 @@
if(TURF_WET_PERMAFROST)
intensity = 120
lube_flags = SLIDE_ICE | GALOSHES_DONT_HELP
+ if(TURF_WET_SUPERLUBE)
+ intensity = 120
+ lube_flags = SLIDE | GALOSHES_DONT_HELP | SLIP_WHEN_CRAWLING
else
qdel(parent.GetComponent(/datum/component/slippery))
return
@@ -159,7 +164,7 @@
//NB it's possible we get deleted after this, due to inherit
/datum/component/wet_floor/proc/add_wet(type, duration_minimum = 0, duration_add = 0, duration_maximum = MAXIMUM_WET_TIME, _permanent = FALSE)
- var/static/list/allowed_types = list(TURF_WET_WATER, TURF_WET_LUBE, TURF_WET_ICE, TURF_WET_PERMAFROST)
+ var/static/list/allowed_types = list(TURF_WET_WATER, TURF_WET_LUBE, TURF_WET_ICE, TURF_WET_PERMAFROST, TURF_WET_SUPERLUBE)
if(duration_minimum <= 0 || !type)
return FALSE
if(type in allowed_types)
diff --git a/code/datums/dash_weapon.dm b/code/datums/dash_weapon.dm
index a870ecae66..8eda936bb7 100644
--- a/code/datums/dash_weapon.dm
+++ b/code/datums/dash_weapon.dm
@@ -34,11 +34,10 @@
var/turf/T = get_turf(target)
if(target in view(user.client.view, user))
var/obj/spot1 = new phaseout(get_turf(user), user.dir)
- user.forceMove(T)
- playsound(T, dash_sound, 25, 1)
- var/obj/spot2 = new phasein(get_turf(user), user.dir)
- spot1.Beam(spot2,beam_effect,time=20)
- current_charges--
+ if(do_teleport(user, T, null, TRUE, null, null, dash_sound, dash_sound, TRUE, TELEPORT_CHANNEL_FREE, TRUE))
+ var/obj/spot2 = new phasein(get_turf(user), user.dir)
+ spot1.Beam(spot2,beam_effect,time=20)
+ current_charges--
holder.update_action_buttons_icon()
addtimer(CALLBACK(src, .proc/charge), charge_rate)
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 60bb24c8c2..cf33fa3633 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -255,7 +255,7 @@
M.fields["alg_d"] = "No allergies have been detected in this patient."
M.fields["cdi"] = "None"
M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
- M.fields["notes"] = "No notes."
+ M.fields["notes"] = H.get_trait_string(medical)
medical += M
//Security Record
diff --git a/code/datums/datum.dm b/code/datums/datum.dm
index cdb195dd82..8737cd8feb 100644
--- a/code/datums/datum.dm
+++ b/code/datums/datum.dm
@@ -4,7 +4,7 @@
var/list/datum_components //for /datum/components
var/list/status_traits
var/list/comp_lookup //it used to be for looking up components which had registered a signal but now anything can register
- var/list/signal_procs
+ var/list/list/datum/callback/signal_procs
var/signal_enabled = FALSE
var/datum_flags = NONE
var/datum/weakref/weak_reference
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index cfbd8be32c..feac1de972 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -875,14 +875,14 @@
return
// text2num conveniently returns a null on invalid values
O.armor = O.armor.setRating(melee = text2num(result["values"]["melee"]),\
- bullet = text2num(result["values"]["bullet"]),\
- laser = text2num(result["values"]["laser"]),\
- energy = text2num(result["values"]["energy"]),\
- bomb = text2num(result["values"]["bomb"]),\
- bio = text2num(result["values"]["bio"]),\
- rad = text2num(result["values"]["rad"]),\
- fire = text2num(result["values"]["fire"]),\
- acid = text2num(result["values"]["acid"]))
+ bullet = text2num(result["values"]["bullet"]),\
+ laser = text2num(result["values"]["laser"]),\
+ energy = text2num(result["values"]["energy"]),\
+ bomb = text2num(result["values"]["bomb"]),\
+ bio = text2num(result["values"]["bio"]),\
+ rad = text2num(result["values"]["rad"]),\
+ fire = text2num(result["values"]["fire"]),\
+ acid = text2num(result["values"]["acid"]))
log_admin("[key_name(usr)] modified the armor on [O] ([O.type]) to melee: [O.armor.melee], bullet: [O.armor.bullet], laser: [O.armor.laser], energy: [O.armor.energy], bomb: [O.armor.bomb], bio: [O.armor.bio], rad: [O.armor.rad], fire: [O.armor.fire], acid: [O.armor.acid]")
message_admins("[key_name_admin(usr)] modified the armor on [O] ([O.type]) to melee: [O.armor.melee], bullet: [O.armor.bullet], laser: [O.armor.laser], energy: [O.armor.energy], bomb: [O.armor.bomb], bio: [O.armor.bio], rad: [O.armor.rad], fire: [O.armor.fire], acid: [O.armor.acid]")
else
@@ -1398,3 +1398,29 @@
var/mob/living/carbon/human/H = locate(href_list["copyoutfit"]) in GLOB.carbon_list
if(istype(H))
H.copy_outfit()
+ else if(href_list["modquirks"])
+ if(!check_rights(R_SPAWN))
+ return
+
+ var/mob/living/carbon/human/H = locate(href_list["modquirks"]) in GLOB.mob_list
+ if(!istype(H))
+ to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human")
+ return
+
+ var/list/options = list("Clear"="Clear")
+ for(var/x in subtypesof(/datum/quirk))
+ var/datum/quirk/T = x
+ var/qname = initial(T.name)
+ options[H.has_quirk(T) ? "[qname] (Remove)" : "[qname] (Add)"] = T
+
+ var/result = input(usr, "Choose quirk to add/remove","Quirk Mod") as null|anything in options
+ if(result)
+ if(result == "Clear")
+ for(var/datum/quirk/q in H.roundstart_quirks)
+ H.remove_quirk(q.type)
+ else
+ var/T = options[result]
+ if(H.has_quirk(T))
+ H.remove_quirk(T)
+ else
+ H.add_quirk(T,TRUE)
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index 8a3fd82cb9..ccc5d97cf8 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -254,7 +254,6 @@
if(icon_update)
update_body()
update_hair()
- update_body_parts()
update_mutations_overlay()// no lizard with human hulk overlay please.
diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm
index c798f35218..b9e774aa50 100644
--- a/code/datums/dog_fashion.dm
+++ b/code/datums/dog_fashion.dm
@@ -174,3 +174,13 @@
/datum/dog_fashion/back/deathsquad
name = "Trooper REAL_NAME"
desc = "That's not red paint. That's real corgi blood."
+
+/datum/dog_fashion/head/colour
+ name = "Stylish REAL_NAME"
+ desc = "From the tips of their paws to the top of their head, they look like a made bed."
+ emote_see = list("tries to tap dances.","looks sadly at others outfits...","barks at bad fashion!")
+
+/datum/dog_fashion/head/telegram
+ name = "Messenger REAL_NAME"
+ desc = "Dont shoot the messenger..."
+ emote_see = list("licks an envelope.","looks ready to set off to send a letter...","works on barking!")
diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm
new file mode 100644
index 0000000000..8f9b97db22
--- /dev/null
+++ b/code/datums/elements/_element.dm
@@ -0,0 +1,39 @@
+/datum/element
+ var/element_flags = NONE
+ /**
+ * The index of the first attach argument to consider for duplicate elements
+ * Is only used when flags contains ELEMENT_BESPOKE
+ * This is infinity so you must explicitly set this
+ */
+ var/id_arg_index = INFINITY
+
+/datum/element/proc/Attach(datum/target)
+ if(type == /datum/element)
+ return ELEMENT_INCOMPATIBLE
+ if(element_flags & ELEMENT_DETACH)
+ RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/Detach)
+
+/datum/element/proc/Detach(datum/source, force)
+ UnregisterSignal(source, COMSIG_PARENT_QDELETING)
+
+/datum/element/Destroy(force)
+ if(!force)
+ return QDEL_HINT_LETMELIVE
+ SSdcs.elements_by_type -= type
+ return ..()
+
+//DATUM PROCS
+
+/datum/proc/AddElement(eletype, ...)
+ var/datum/element/ele = SSdcs.GetElement(arglist(args))
+ args[1] = src
+ if(ele.Attach(arglist(args)) == ELEMENT_INCOMPATIBLE)
+ CRASH("Incompatible [eletype] assigned to a [type]! args: [json_encode(args)]")
+
+/**
+ * Finds the singleton for the element type given and detaches it from src
+ * You only need additional arguments beyond the type if you're using ELEMENT_BESPOKE
+ */
+/datum/proc/RemoveElement(eletype, ...)
+ var/datum/element/ele = SSdcs.GetElement(arglist(args))
+ ele.Detach(src)
\ No newline at end of file
diff --git a/code/datums/components/cleaning.dm b/code/datums/elements/cleaning.dm
similarity index 79%
rename from code/datums/components/cleaning.dm
rename to code/datums/elements/cleaning.dm
index 5324a87fee..e4fb3edd48 100644
--- a/code/datums/components/cleaning.dm
+++ b/code/datums/elements/cleaning.dm
@@ -1,13 +1,15 @@
-/datum/component/cleaning
- dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
+/datum/element/cleaning/Attach(datum/target)
+ . = ..()
+ if(!ismovableatom(target))
+ return ELEMENT_INCOMPATIBLE
+ RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/Clean)
-/datum/component/cleaning/Initialize()
- if(!ismovableatom(parent))
- return COMPONENT_INCOMPATIBLE
- RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/Clean)
+/datum/element/cleaning/Detach(datum/target)
+ . = ..()
+ UnregisterSignal(target, COMSIG_MOVABLE_MOVED)
-/datum/component/cleaning/proc/Clean()
- var/atom/movable/AM = parent
+/datum/element/cleaning/proc/Clean(datum/source)
+ var/atom/movable/AM = source
var/turf/T = AM.loc
SEND_SIGNAL(T, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
for(var/A in T)
@@ -43,4 +45,4 @@
cleaned_human.clean_blood()
cleaned_human.wash_cream()
cleaned_human.regenerate_icons()
- to_chat(cleaned_human, "[src] cleans your face!")
\ No newline at end of file
+ to_chat(cleaned_human, "[src] cleans your face!")
diff --git a/code/datums/elements/earhealing.dm b/code/datums/elements/earhealing.dm
new file mode 100644
index 0000000000..7477742673
--- /dev/null
+++ b/code/datums/elements/earhealing.dm
@@ -0,0 +1,37 @@
+
+/datum/element/earhealing
+ element_flags = ELEMENT_DETACH
+ var/list/user_by_item = list()
+
+/datum/element/earhealing/New()
+ START_PROCESSING(SSdcs, src)
+
+/datum/element/earhealing/Attach(datum/target)
+ . = ..()
+ if(!isitem(target))
+ return ELEMENT_INCOMPATIBLE
+
+ RegisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED), .proc/equippedChanged)
+
+/datum/element/earhealing/Detach(datum/target)
+ . = ..()
+ UnregisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED))
+ user_by_item -= target
+
+/datum/element/earhealing/proc/equippedChanged(datum/source, mob/living/carbon/user, slot)
+ if(slot == SLOT_EARS && istype(user))
+ user_by_item[source] = user
+ else
+ user_by_item -= source
+
+/datum/element/earhealing/process()
+ for(var/i in user_by_item)
+ var/mob/living/carbon/user = user_by_item[i]
+ if(HAS_TRAIT(user, TRAIT_DEAF))
+ continue
+ var/obj/item/organ/ears/ears = user.getorganslot(ORGAN_SLOT_EARS)
+ if(!ears)
+ continue
+ ears.deaf = max(ears.deaf - 0.25, (ears.damage < ears.maxHealth ? 0 : 1)) // Do not clear deafness if our ears are too damaged
+ ears.damage = max(ears.damage - 0.025, 0)
+ CHECK_TICK
diff --git a/code/datums/embedding_behavior.dm b/code/datums/embedding_behavior.dm
index f631b9b1c4..a261ea48c6 100644
--- a/code/datums/embedding_behavior.dm
+++ b/code/datums/embedding_behavior.dm
@@ -1,53 +1,53 @@
#define EMBEDID "embed-[embed_chance]-[embedded_fall_chance]-[embedded_pain_chance]-[embedded_pain_multiplier]-[embedded_fall_pain_multiplier]-[embedded_impact_pain_multiplier]-[embedded_unsafe_removal_pain_multiplier]-[embedded_unsafe_removal_time]"
/proc/getEmbeddingBehavior(embed_chance = EMBED_CHANCE,
- embedded_fall_chance = EMBEDDED_ITEM_FALLOUT,
- embedded_pain_chance = EMBEDDED_PAIN_CHANCE,
- embedded_pain_multiplier = EMBEDDED_PAIN_MULTIPLIER,
- embedded_fall_pain_multiplier = EMBEDDED_FALL_PAIN_MULTIPLIER,
- embedded_impact_pain_multiplier = EMBEDDED_IMPACT_PAIN_MULTIPLIER,
- embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER,
- embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME)
- . = locate(EMBEDID)
- if (!.)
- . = new /datum/embedding_behavior(embed_chance, embedded_fall_chance, embedded_pain_chance, embedded_pain_multiplier, embedded_fall_pain_multiplier, embedded_impact_pain_multiplier, embedded_unsafe_removal_pain_multiplier, embedded_unsafe_removal_time)
+ embedded_fall_chance = EMBEDDED_ITEM_FALLOUT,
+ embedded_pain_chance = EMBEDDED_PAIN_CHANCE,
+ embedded_pain_multiplier = EMBEDDED_PAIN_MULTIPLIER,
+ embedded_fall_pain_multiplier = EMBEDDED_FALL_PAIN_MULTIPLIER,
+ embedded_impact_pain_multiplier = EMBEDDED_IMPACT_PAIN_MULTIPLIER,
+ embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER,
+ embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME)
+ . = locate(EMBEDID)
+ if (!.)
+ . = new /datum/embedding_behavior(embed_chance, embedded_fall_chance, embedded_pain_chance, embedded_pain_multiplier, embedded_fall_pain_multiplier, embedded_impact_pain_multiplier, embedded_unsafe_removal_pain_multiplier, embedded_unsafe_removal_time)
/datum/embedding_behavior
- var/embed_chance
- var/embedded_fall_chance
- var/embedded_pain_chance
- var/embedded_pain_multiplier //The coefficient of multiplication for the damage this item does while embedded (this*w_class)
- var/embedded_fall_pain_multiplier //The coefficient of multiplication for the damage this item does when falling out of a limb (this*w_class)
- var/embedded_impact_pain_multiplier //The coefficient of multiplication for the damage this item does when first embedded (this*w_class)
- var/embedded_unsafe_removal_pain_multiplier //The coefficient of multiplication for the damage removing this without surgery causes (this*w_class)
- var/embedded_unsafe_removal_time //A time in ticks, multiplied by the w_class.
+ var/embed_chance
+ var/embedded_fall_chance
+ var/embedded_pain_chance
+ var/embedded_pain_multiplier //The coefficient of multiplication for the damage this item does while embedded (this*w_class)
+ var/embedded_fall_pain_multiplier //The coefficient of multiplication for the damage this item does when falling out of a limb (this*w_class)
+ var/embedded_impact_pain_multiplier //The coefficient of multiplication for the damage this item does when first embedded (this*w_class)
+ var/embedded_unsafe_removal_pain_multiplier //The coefficient of multiplication for the damage removing this without surgery causes (this*w_class)
+ var/embedded_unsafe_removal_time //A time in ticks, multiplied by the w_class.
/datum/embedding_behavior/New(embed_chance = EMBED_CHANCE,
- embedded_fall_chance = EMBEDDED_ITEM_FALLOUT,
- embedded_pain_chance = EMBEDDED_PAIN_CHANCE,
- embedded_pain_multiplier = EMBEDDED_PAIN_MULTIPLIER,
- embedded_fall_pain_multiplier = EMBEDDED_FALL_PAIN_MULTIPLIER,
- embedded_impact_pain_multiplier = EMBEDDED_IMPACT_PAIN_MULTIPLIER,
- embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER,
- embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME)
- src.embed_chance = embed_chance
- src.embedded_fall_chance = embedded_fall_chance
- src.embedded_pain_chance = embedded_pain_chance
- src.embedded_pain_multiplier = embedded_pain_multiplier
- src.embedded_fall_pain_multiplier = embedded_fall_pain_multiplier
- src.embedded_impact_pain_multiplier = embedded_impact_pain_multiplier
- src.embedded_unsafe_removal_pain_multiplier = embedded_unsafe_removal_pain_multiplier
- src.embedded_unsafe_removal_time = embedded_unsafe_removal_time
- tag = EMBEDID
+ embedded_fall_chance = EMBEDDED_ITEM_FALLOUT,
+ embedded_pain_chance = EMBEDDED_PAIN_CHANCE,
+ embedded_pain_multiplier = EMBEDDED_PAIN_MULTIPLIER,
+ embedded_fall_pain_multiplier = EMBEDDED_FALL_PAIN_MULTIPLIER,
+ embedded_impact_pain_multiplier = EMBEDDED_IMPACT_PAIN_MULTIPLIER,
+ embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER,
+ embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME)
+ src.embed_chance = embed_chance
+ src.embedded_fall_chance = embedded_fall_chance
+ src.embedded_pain_chance = embedded_pain_chance
+ src.embedded_pain_multiplier = embedded_pain_multiplier
+ src.embedded_fall_pain_multiplier = embedded_fall_pain_multiplier
+ src.embedded_impact_pain_multiplier = embedded_impact_pain_multiplier
+ src.embedded_unsafe_removal_pain_multiplier = embedded_unsafe_removal_pain_multiplier
+ src.embedded_unsafe_removal_time = embedded_unsafe_removal_time
+ tag = EMBEDID
/datum/embedding_behavior/proc/setRating(embed_chance, embedded_fall_chance, embedded_pain_chance, embedded_pain_multiplier, embedded_fall_pain_multiplier, embedded_impact_pain_multiplier, embedded_unsafe_removal_pain_multiplier, embedded_unsafe_removal_time)
- return getEmbeddingBehavior((isnull(embed_chance) ? src.embed_chance : embed_chance),\
- (isnull(embedded_fall_chance) ? src.embedded_fall_chance : embedded_fall_chance),\
- (isnull(embedded_pain_chance) ? src.embedded_pain_chance : embedded_pain_chance),\
- (isnull(embedded_pain_multiplier) ? src.embedded_pain_multiplier : embedded_pain_multiplier),\
- (isnull(embedded_fall_pain_multiplier) ? src.embedded_fall_pain_multiplier : embedded_fall_pain_multiplier),\
- (isnull(embedded_impact_pain_multiplier) ? src.embedded_impact_pain_multiplier : embedded_impact_pain_multiplier),\
- (isnull(embedded_unsafe_removal_pain_multiplier) ? src.embedded_unsafe_removal_pain_multiplier : embedded_unsafe_removal_pain_multiplier),\
- (isnull(embedded_unsafe_removal_time) ? src.embedded_unsafe_removal_time : embedded_unsafe_removal_time))
+ return getEmbeddingBehavior((isnull(embed_chance) ? src.embed_chance : embed_chance),\
+ (isnull(embedded_fall_chance) ? src.embedded_fall_chance : embedded_fall_chance),\
+ (isnull(embedded_pain_chance) ? src.embedded_pain_chance : embedded_pain_chance),\
+ (isnull(embedded_pain_multiplier) ? src.embedded_pain_multiplier : embedded_pain_multiplier),\
+ (isnull(embedded_fall_pain_multiplier) ? src.embedded_fall_pain_multiplier : embedded_fall_pain_multiplier),\
+ (isnull(embedded_impact_pain_multiplier) ? src.embedded_impact_pain_multiplier : embedded_impact_pain_multiplier),\
+ (isnull(embedded_unsafe_removal_pain_multiplier) ? src.embedded_unsafe_removal_pain_multiplier : embedded_unsafe_removal_pain_multiplier),\
+ (isnull(embedded_unsafe_removal_time) ? src.embedded_unsafe_removal_time : embedded_unsafe_removal_time))
#undef EMBEDID
diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm
index 6c91cc3a7d..f0fca5db5a 100644
--- a/code/datums/emotes.dm
+++ b/code/datums/emotes.dm
@@ -1,6 +1,3 @@
-#define EMOTE_VISIBLE 1
-#define EMOTE_AUDIBLE 2
-
/datum/emote
var/key = "" //What calls the emote
var/key_third_person = "" //This will also call the emote
diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm
index b3c57e4838..7be4489e86 100644
--- a/code/datums/explosion.dm
+++ b/code/datums/explosion.dm
@@ -198,7 +198,7 @@ GLOBAL_LIST_EMPTY(explosions)
var/list/items = list()
for(var/I in T)
var/atom/A = I
- if (!A.prevent_content_explosion()) //The atom/contents_explosion() proc returns null if the contents ex_acting has been handled by the atom, and TRUE if it hasn't.
+ if (!(A.flags_1 & PREVENT_CONTENTS_EXPLOSION_1)) //The atom/contents_explosion() proc returns null if the contents ex_acting has been handled by the atom, and TRUE if it hasn't.
items += A.GetAllContents()
for(var/O in items)
var/atom/A = O
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 4d1986cccf..74f22b5ac0 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -79,6 +79,7 @@
tele_play_specials(teleatom, destturf, effectout, asoundout)
if(ismegafauna(teleatom))
message_admins("[teleatom] [ADMIN_FLW(teleatom)] has teleported from [ADMIN_VERBOSEJMP(curturf)] to [ADMIN_VERBOSEJMP(destturf)].")
+ SEND_SIGNAL(teleatom, COMSIG_MOVABLE_TELEPORTED, channel, curturf, destturf)
if(ismob(teleatom))
var/mob/M = teleatom
diff --git a/code/datums/hud.dm b/code/datums/hud.dm
index 32bce89f4d..169b08dc98 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -27,6 +27,7 @@ GLOBAL_LIST_INIT(huds, list(
ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(),
ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(),
ANTAG_HUD_BROTHER = new/datum/atom_hud/antag/hidden(),
+ ANTAG_HUD_BLOODSUCKER = new/datum/atom_hud/antag/bloodsucker()
))
/datum/atom_hud
diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm
index b84133faf7..f9a9e07aed 100644
--- a/code/datums/looping_sounds/machinery_sounds.dm
+++ b/code/datums/looping_sounds/machinery_sounds.dm
@@ -4,7 +4,7 @@
mid_sounds = list('sound/machines/shower/shower_mid1.ogg'=1,'sound/machines/shower/shower_mid2.ogg'=1,'sound/machines/shower/shower_mid3.ogg'=1)
mid_length = 10
end_sound = 'sound/machines/shower/shower_end.ogg'
- volume = 20
+ volume = 10
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -32,7 +32,7 @@
mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1)
mid_length = 2
end_sound = 'sound/machines/fryer/deep_fryer_emerge.ogg'
- volume = 15
+ volume = 5
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -43,3 +43,12 @@
mid_length = 10
end_sound = 'sound/machines/microwave/microwave-end.ogg'
volume = 90
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/looping_sound/grill
+ mid_length = 2
+ mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1)
+ volume = 10
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/code/datums/martial.dm b/code/datums/martial.dm
index 11aa9250dc..c8caa853c3 100644
--- a/code/datums/martial.dm
+++ b/code/datums/martial.dm
@@ -11,7 +11,7 @@
var/dodge_chance = 0
var/restraining = 0 //used in cqc's disarm_act to check if the disarmed is being restrained and so whether they should be put in a chokehold or not
var/help_verb
- var/no_guns = FALSE
+ var/pacifism_check = TRUE //are the martial arts combos/attacks unable to be used by pacifist.
var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts
/datum/martial_art/proc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
@@ -28,14 +28,16 @@
/datum/martial_art/proc/add_to_streak(element,mob/living/carbon/human/D)
if(D != current_target)
- current_target = D
- streak = ""
- restraining = 0
+ reset_streak(D)
streak = streak+element
if(length(streak) > max_streak_length)
streak = copytext(streak,2)
return
+/datum/martial_art/proc/reset_streak(mob/living/carbon/human/new_target)
+ current_target = new_target
+ streak = ""
+
/datum/martial_art/proc/basic_hit(mob/living/carbon/human/A,mob/living/carbon/human/D)
var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh)
@@ -81,7 +83,7 @@
D.forcesay(GLOB.hit_appends)
return 1
-/datum/martial_art/proc/teach(mob/living/carbon/human/H,make_temporary=0)
+/datum/martial_art/proc/teach(mob/living/carbon/human/H, make_temporary = FALSE)
if(!istype(H) || !H.mind)
return FALSE
if(H.mind.martial_art)
diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm
index 7399528e1c..b98bc4f951 100644
--- a/code/datums/martial/boxing.dm
+++ b/code/datums/martial/boxing.dm
@@ -1,6 +1,7 @@
/datum/martial_art/boxing
name = "Boxing"
id = MARTIALART_BOXING
+ pacifism_check = FALSE //Let's pretend pacifists can boxe the heck out of other people, it only deals stamina damage right now.
/datum/martial_art/boxing/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
to_chat(A, "Can't disarm while boxing!")
@@ -16,14 +17,15 @@
var/atk_verb = pick("left hook","right hook","straight punch")
- var/damage = rand(5, 8) + A.dna.species.punchdamagelow
- if(!damage)
+ var/damage = rand(10, 13)
+ var/extra_damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh)
+ if(extra_damage == A.dna.species.punchdamagelow)
playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1)
D.visible_message("[A] has attempted to [atk_verb] [D]!", \
"[A] has attempted to [atk_verb] [D]!", null, COMBAT_MESSAGE_RANGE)
log_combat(A, D, "attempted to hit", atk_verb)
- return 0
-
+ return TRUE
+ damage += extra_damage
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
var/armor_block = D.run_armor_check(affecting, "melee")
diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm
index c7644997ee..09a493a670 100644
--- a/code/datums/martial/cqc.dm
+++ b/code/datums/martial/cqc.dm
@@ -9,24 +9,13 @@
id = MARTIALART_CQC
help_verb = /mob/living/carbon/human/proc/CQC_help
block_chance = 75
- var/just_a_cook = FALSE
- var/static/list/areas_under_siege = typecacheof(list(/area/crew_quarters/kitchen,
- /area/crew_quarters/cafeteria,
- /area/crew_quarters/bar))
+ var/old_grab_state = null
+ var/restraining = FALSE
-/datum/martial_art/cqc/under_siege
- name = "Close Quarters Cooking"
- just_a_cook = TRUE
-
-/datum/martial_art/cqc/proc/drop_restraining()
+/datum/martial_art/cqc/reset_streak(mob/living/carbon/human/new_target)
+ . = ..()
restraining = FALSE
-/datum/martial_art/cqc/can_use(mob/living/carbon/human/H)
- var/area/A = get_area(H)
- if(just_a_cook && !(is_type_in_typecache(A, areas_under_siege)))
- return FALSE
- return ..()
-
/datum/martial_art/cqc/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A))
return FALSE
@@ -75,6 +64,7 @@
D.apply_damage(10, BRUTE)
log_combat(A, D, "kicked (CQC)")
if(D.IsKnockdown() && !D.stat)
+ log_combat(A, D, "knocked out (Head kick)(CQC)")
D.visible_message("[A] kicks [D]'s head, knocking [D.p_them()] out!", \
"[A] kicks your head, knocking you out!")
playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1)
@@ -85,7 +75,8 @@
/datum/martial_art/cqc/proc/Pressure(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A))
return FALSE
- D.visible_message("[A] forces their arm on [D]'s neck!")
+ log_combat(A, D, "pressured (CQC)")
+ D.visible_message("[A] punches [D]'s neck!")
D.adjustStaminaLoss(60)
playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
return TRUE
@@ -96,18 +87,20 @@
if(!can_use(A))
return FALSE
if(!D.stat)
+ log_combat(A, D, "restrained (CQC)")
D.visible_message("[A] locks [D] into a restraining position!", \
"[A] locks you into a restraining position!")
D.adjustStaminaLoss(20)
D.Stun(100)
restraining = TRUE
- addtimer(CALLBACK(src, .proc/drop_restraining), 50, TIMER_UNIQUE)
+ addtimer(VARSET_CALLBACK(src, restraining, FALSE), 50, TIMER_UNIQUE)
return TRUE
/datum/martial_art/cqc/proc/Consecutive(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A))
return FALSE
if(!D.stat)
+ log_combat(A, D, "consecutive CQC'd (CQC)")
D.visible_message("[A] strikes [D]'s abdomen, neck and back consecutively", \
"[A] strikes your abdomen, neck and back consecutively!")
playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1)
@@ -119,21 +112,20 @@
return TRUE
/datum/martial_art/cqc/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
- if(!can_use(A))
- return FALSE
- add_to_streak("G",D)
- if(check_streak(A,D))
- return TRUE
- if(A.grab_state >= GRAB_AGGRESSIVE)
+ if(A.a_intent == INTENT_GRAB && A!=D && can_use(A)) // A!=D prevents grabbing yourself
+ add_to_streak("G",D)
+ if(check_streak(A,D)) //if a combo is made no grab upgrade is done
+ return TRUE
+ old_grab_state = A.grab_state
D.grabbedby(A, 1)
- else
- A.start_pulling(D, 1)
- if(A.pulling)
- D.stop_pulling()
+ if(old_grab_state == GRAB_PASSIVE)
+ D.drop_all_held_items()
+ A.grab_state = GRAB_AGGRESSIVE //Instant agressive grab if on grab intent
log_combat(A, D, "grabbed", addition="aggressively")
- A.grab_state = GRAB_AGGRESSIVE //Instant aggressive grab
-
- return TRUE
+ D.visible_message("[A] violently grabs [D]!", \
+ "[A] violently grabs you!")
+ return TRUE
+ return FALSE
/datum/martial_art/cqc/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A))
@@ -188,6 +180,7 @@
playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
log_combat(A, D, "disarmed (CQC)", "[I ? " grabbing \the [I]" : ""]")
if(restraining && A.pulling == D)
+ log_combat(A, D, "knocked out (Chokehold)(CQC)")
D.visible_message("[A] puts [D] into a chokehold!", \
"[A] puts you into a chokehold!")
D.SetSleeping(400)
@@ -206,9 +199,19 @@
to_chat(usr, "You try to remember some of the basics of CQC.")
to_chat(usr, "Slam: Grab Harm. Slam opponent into the ground, knocking them down.")
- to_chat(usr, "CQC Kick: Disarm Harm Harm. Knocks opponent away. Knocks out stunned or knocked down opponents.")
- to_chat(usr, "Restrain: Grab Grab. Locks opponents into a restraining position, disarm to knock them out with a choke hold.")
+ to_chat(usr, "CQC Kick: Harm Harm. Knocks opponent away. Knocks out stunned or knocked down opponents.")
+ to_chat(usr, "Restrain: Grab Grab. Locks opponents into a restraining position, disarm to knock them out with a chokehold.")
to_chat(usr, "Pressure: Disarm Grab. Decent stamina damage.")
to_chat(usr, "Consecutive CQC: Disarm Disarm Harm. Mainly offensive move, huge damage and decent stamina damage.")
to_chat(usr, "In addition, by having your throw mode on when being attacked, you enter an active defense mode where you have a chance to block and sometimes even counter attacks done to you.")
+
+///Subtype of CQC. Only used for the chef.
+/datum/martial_art/cqc/under_siege
+ name = "Close Quarters Cooking"
+
+///Prevents use if the cook is not in the kitchen.
+/datum/martial_art/cqc/under_siege/can_use(mob/living/carbon/human/H) //this is used to make chef CQC only work in kitchen
+ if(!istype(get_area(H), /area/crew_quarters/kitchen))
+ return FALSE
+ return ..()
diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm
index 6379d481ca..4e8dacaef9 100644
--- a/code/datums/martial/krav_maga.dm
+++ b/code/datums/martial/krav_maga.dm
@@ -19,6 +19,9 @@
owner.visible_message("[owner] assumes a neutral stance.", "Your next attack is cleared.")
H.mind.martial_art.streak = ""
else
+ if(HAS_TRAIT(H, TRAIT_PACIFISM))
+ to_chat(H, "You don't want to harm other people!")
+ return
owner.visible_message("[owner] assumes the Neck Chop stance!", "Your next attack will be a Neck Chop.")
H.mind.martial_art.streak = "neck_chop"
@@ -36,6 +39,9 @@
owner.visible_message("[owner] assumes a neutral stance.", "Your next attack is cleared.")
H.mind.martial_art.streak = ""
else
+ if(HAS_TRAIT(H, TRAIT_PACIFISM))
+ to_chat(H, "You don't want to harm other people!")
+ return
owner.visible_message("[owner] assumes the Leg Sweep stance!", "Your next attack will be a Leg Sweep.")
H.mind.martial_art.streak = "leg_sweep"
@@ -53,6 +59,9 @@
owner.visible_message("[owner] assumes a neutral stance.", "Your next attack is cleared.")
H.mind.martial_art.streak = ""
else
+ if(HAS_TRAIT(H, TRAIT_PACIFISM))
+ to_chat(H, "You don't want to harm other people!")
+ return
owner.visible_message("[owner] assumes the Lung Punch stance!", "Your next attack will be a Lung Punch.")
H.mind.martial_art.streak = "quick_choke"//internal name for lung punch
@@ -145,8 +154,6 @@
return 1
/datum/martial_art/krav_maga/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(check_streak(A,D))
- return 1
var/obj/item/I = null
if(prob(60))
I = D.get_active_held_item()
diff --git a/code/datums/martial/psychotic_brawl.dm b/code/datums/martial/psychotic_brawl.dm
index 34301516dc..45d73353f9 100644
--- a/code/datums/martial/psychotic_brawl.dm
+++ b/code/datums/martial/psychotic_brawl.dm
@@ -1,6 +1,7 @@
/datum/martial_art/psychotic_brawling
name = "Psychotic Brawling"
id = MARTIALART_PSYCHOBRAWL
+ pacifism_check = FALSE //Quite uncontrollable and unpredictable, people will still end up harming others with it.
/datum/martial_art/psychotic_brawling/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
return psycho_attack(A,D)
diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm
index 801e8c8c7a..bb652208ee 100644
--- a/code/datums/martial/sleeping_carp.dm
+++ b/code/datums/martial/sleeping_carp.dm
@@ -9,35 +9,36 @@
id = MARTIALART_SLEEPINGCARP
deflection_chance = 100
reroute_deflection = TRUE
- no_guns = TRUE
allow_temp_override = FALSE
help_verb = /mob/living/carbon/human/proc/sleeping_carp_help
+ var/old_grab_state = null
/datum/martial_art/the_sleeping_carp/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(findtext(streak,WRIST_WRENCH_COMBO))
streak = ""
wristWrench(A,D)
- return 1
+ return TRUE
if(findtext(streak,BACK_KICK_COMBO))
streak = ""
backKick(A,D)
- return 1
+ return TRUE
if(findtext(streak,STOMACH_KNEE_COMBO))
streak = ""
kneeStomach(A,D)
- return 1
+ return TRUE
if(findtext(streak,HEAD_KICK_COMBO))
streak = ""
headKick(A,D)
- return 1
+ return TRUE
if(findtext(streak,ELBOW_DROP_COMBO))
streak = ""
elbowDrop(A,D)
- return 1
- return 0
+ return TRUE
+ return FALSE
/datum/martial_art/the_sleeping_carp/proc/wristWrench(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.IsStun() && !D.IsKnockdown())
+ log_combat(A, D, "wrist wrenched (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message("[A] grabs [D]'s wrist and wrenches it sideways!", \
"[A] grabs your wrist and violently wrenches it to the side!")
@@ -46,24 +47,29 @@
D.dropItemToGround(D.get_active_held_item())
D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
D.Knockdown(60)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
- return 1
- log_combat(A, D, "wrist wrenched (Sleeping Carp)")
+ return TRUE
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/backKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
- if(A.dir == D.dir && !D.stat && !D.IsKnockdown())
- A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
- D.visible_message("[A] kicks [D] in the back!", \
- "[A] kicks you in the back, making you stumble and fall!")
- step_to(D,get_step(D,D.dir),1)
- D.Knockdown(80)
- playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
- return 1
- log_combat(A, D, "back-kicked (Sleeping Carp)")
+ if(!D.stat && !D.IsKnockdown())
+ if(A.dir == D.dir)
+ log_combat(A, D, "back-kicked (Sleeping Carp)")
+ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
+ D.visible_message("[A] kicks [D] in the back!", \
+ "[A] kicks you in the back, making you stumble and fall!")
+ step_to(D,get_step(D,D.dir),1)
+ D.Knockdown(80)
+ playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
+ return TRUE
+ else
+ log_combat(A, D, "missed a back-kick (Sleeping Carp) on")
+ D.visible_message("[A] tries to kick [D] in the back, but misses!", \
+ "[A] tries to kick you in the back, but misses!")
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/kneeStomach(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.IsKnockdown())
+ log_combat(A, D, "stomach kneed (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("[A] knees [D] in the stomach!", \
"[A] winds you with a knee in the stomach!")
@@ -71,12 +77,12 @@
D.losebreath += 3
D.Knockdown(40)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
- return 1
- log_combat(A, D, "stomach kneed (Sleeping Carp)")
+ return TRUE
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/headKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.IsKnockdown())
+ log_combat(A, D, "head kicked (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("[A] kicks [D] in the head!", \
"[A] kicks you in the jaw!")
@@ -84,12 +90,12 @@
D.drop_all_held_items()
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
D.Knockdown(80)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
- return 1
- log_combat(A, D, "head kicked (Sleeping Carp)")
+ return TRUE
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/elbowDrop(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(D.IsKnockdown() || D.resting || D.stat)
+ log_combat(A, D, "elbow dropped (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message("[A] elbow drops [D]!", \
"[A] piledrives you with their elbow!")
@@ -97,35 +103,29 @@
D.death() //FINISH HIM!
D.apply_damage(50, BRUTE, BODY_ZONE_CHEST)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1)
- return 1
- log_combat(A, D, "elbow dropped (Sleeping Carp)")
+ return TRUE
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
- add_to_streak("G",D)
- if(check_streak(A,D))
- return 1
- if(A.grab_state >= GRAB_AGGRESSIVE)
+ if(A.a_intent == INTENT_GRAB && A!=D) // A!=D prevents grabbing yourself
+ add_to_streak("G",D)
+ if(check_streak(A,D)) //if a combo is made no grab upgrade is done
+ return TRUE
+ old_grab_state = A.grab_state
D.grabbedby(A, 1)
- else
- A.start_pulling(D, 1)
- if(A.pulling)
+ if(old_grab_state == GRAB_PASSIVE)
D.drop_all_held_items()
- D.stop_pulling()
- if(A.a_intent == INTENT_GRAB)
- log_combat(A, D, "grabbed", addition="aggressively")
- D.visible_message("[A] violently grabs [D]!", \
- "[A] violently grabs you!")
- A.grab_state = GRAB_AGGRESSIVE //Instant aggressive grab
- else
- log_combat(A, D, "grabbed", addition="passively")
- A.grab_state = GRAB_PASSIVE
- return 1
+ A.grab_state = GRAB_AGGRESSIVE //Instant agressive grab if on grab intent
+ log_combat(A, D, "grabbed", addition="aggressively")
+ D.visible_message("[A] violently grabs [D]!", \
+ "[A] violently grabs you!")
+ return TRUE
+ return FALSE
/datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("H",D)
if(check_streak(A,D))
- return 1
+ return TRUE
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
var/atk_verb = pick("punches", "kicks", "chops", "hits", "slams")
D.visible_message("[A] [atk_verb] [D]!", \
@@ -136,15 +136,25 @@
D.visible_message("[D] stumbles and falls!", "The blow sends you to the ground!")
D.Knockdown(80)
log_combat(A, D, "[atk_verb] (Sleeping Carp)")
- return 1
+ return TRUE
/datum/martial_art/the_sleeping_carp/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("D",D)
if(check_streak(A,D))
- return 1
+ return TRUE
return ..()
+/datum/martial_art/the_sleeping_carp/teach(mob/living/carbon/human/H, make_temporary = FALSE)
+ . = ..()
+ if(!.)
+ return
+ ADD_TRAIT(H, TRAIT_NOGUNS, SLEEPING_CARP_TRAIT)
+
+/datum/martial_art/the_sleeping_carp/on_remove(mob/living/carbon/human/H)
+ . = ..()
+ REMOVE_TRAIT(H, TRAIT_NOGUNS, SLEEPING_CARP_TRAIT)
+
/mob/living/carbon/human/proc/sleeping_carp_help()
set name = "Recall Teachings"
set desc = "Remember the martial techniques of the Sleeping Carp clan."
@@ -231,4 +241,4 @@
/obj/item/twohanded/bostaff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(wielded)
return ..()
- return 0
+ return FALSE
diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm
index e07fa27ef5..c967779d03 100644
--- a/code/datums/martial/wrestling.dm
+++ b/code/datums/martial/wrestling.dm
@@ -49,6 +49,9 @@
if(owner.incapacitated())
to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.")
return
+ if(HAS_TRAIT(owner, TRAIT_PACIFISM))
+ to_chat(owner, "You are too HIPPIE to WRESTLE other living beings!")
+ return
owner.visible_message("[owner] prepares to BODY SLAM!", "Your next attack will be a BODY SLAM.")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "slam"
@@ -61,6 +64,9 @@
if(owner.incapacitated())
to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.")
return
+ if(HAS_TRAIT(owner, TRAIT_PACIFISM))
+ to_chat(owner, "You are too HIPPIE to WRESTLE other living beings!")
+ return
owner.visible_message("[owner] prepares to THROW!", "Your next attack will be a THROW.")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "throw"
@@ -73,6 +79,9 @@
if(owner.incapacitated())
to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.")
return
+ if(HAS_TRAIT(owner, TRAIT_PACIFISM))
+ to_chat(owner, "You are too HIPPIE to WRESTLE other living beings!")
+ return
owner.visible_message("[owner] prepares to KICK!", "Your next attack will be a KICK.")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "kick"
@@ -85,6 +94,9 @@
if(owner.incapacitated())
to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.")
return
+ if(HAS_TRAIT(owner, TRAIT_PACIFISM))
+ to_chat(owner, "You are too HIPPIE to WRESTLE other living beings!")
+ return
owner.visible_message("[owner] prepares to STRIKE!", "Your next attack will be a STRIKE.")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "strike"
@@ -97,6 +109,9 @@
if(owner.incapacitated())
to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.")
return
+ if(HAS_TRAIT(owner, TRAIT_PACIFISM))
+ to_chat(owner, "You are too HIPPIE to WRESTLE other living beings!")
+ return
owner.visible_message("[owner] prepares to LEG DROP!", "Your next attack will be a LEG DROP.")
var/mob/living/carbon/human/H = owner
H.mind.martial_art.streak = "drop"
@@ -192,7 +207,7 @@
if (T && isturf(T))
if (!D.stat)
D.emote("scream")
- D.throw_at(T, 10, 4, A, TRUE, TRUE, callback = CALLBACK(D, /mob/living/carbon/human/.Knockdown, 20))
+ D.throw_at(T, 10, 4, A, TRUE, TRUE, callback = CALLBACK(D, /mob/living/carbon/human.proc/Knockdown, 20))
log_combat(A, D, "has thrown with wrestling")
return 0
@@ -433,8 +448,8 @@
/datum/martial_art/wrestling/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(check_streak(A,D))
return 1
- if(A.pulling == D)
- return 1
+ if(A.pulling == D || A == D) // don't stun grab yoursel
+ return FALSE
A.start_pulling(D)
D.visible_message("[A] gets [D] in a cinch!", \
"[A] gets [D] in a cinch!")
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 68efe93254..d1b4e51a7d 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -41,8 +41,6 @@
var/special_role
var/list/restricted_roles = list()
- var/list/datum/objective/objectives = list()
-
var/list/spell_list = list() // Wizard mode & "Give Spell" badmin button.
var/linglink
@@ -90,10 +88,16 @@
/datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0)
var/old_character = current
+ var/signals = SEND_SIGNAL(new_character, COMSIG_MOB_PRE_PLAYER_CHANGE, new_character, old_character) | SEND_SIGNAL(src, COMSIG_PRE_MIND_TRANSFER, new_character, old_character)
+ if(signals & COMPONENT_STOP_MIND_TRANSFER)
+ return
if(current) // remove ourself from our old body's mind variable
current.mind = null
SStgui.on_transfer(current, new_character)
-
+ if(iscarbon(current))
+ var/mob/living/carbon/C = current
+ if(C.combatmode)
+ C.toggle_combat_mode(TRUE, TRUE)
if(!language_holder)
var/datum/language_holder/mob_holder = new_character.get_language_holder(shadow = FALSE)
language_holder = mob_holder.copy(src)
@@ -124,7 +128,6 @@
transfer_martial_arts(new_character)
if(active || force_key_move)
new_character.key = key //now transfer the key to link the client to our new body
- SEND_SIGNAL(src, COMSIG_MIND_TRANSFER, new_character, old_character)
//CIT CHANGE - makes arousal update when transfering bodies
if(isliving(new_character)) //New humans and such are by default enabled arousal. Let's always use the new mind's prefs.
@@ -133,6 +136,8 @@
L.canbearoused = L.client.prefs.arousable //Technically this should make taking over a character mean the body gain the new minds setting...
L.update_arousal_hud() //Removes the old icon
+ SEND_SIGNAL(src, COMSIG_MIND_TRANSFER, new_character, old_character)
+
/datum/mind/proc/store_memory(new_text)
if((length(memory) + length(new_text)) <= MAX_MESSAGE_LEN)
memory += "[new_text]
"
@@ -360,13 +365,15 @@
output += memory
+ var/list/all_objectives = list()
for(var/datum/antagonist/A in antag_datums)
output += A.antag_memory
+ all_objectives |= A.objectives
- if(objectives.len)
+ if(all_objectives.len)
output += "Objectives:"
var/obj_count = 1
- for(var/datum/objective/objective in objectives)
+ for(var/datum/objective/objective in all_objectives)
output += "
Objective #[obj_count++]: [objective.explanation_text]"
var/list/datum/mind/other_owners = objective.get_owners() - src
if(other_owners.len)
@@ -377,7 +384,7 @@
if(window)
recipient << browse(output,"window=memory")
- else if(objectives.len || memory)
+ else if(all_objectives.len || memory)
to_chat(recipient, "[output]")
/datum/mind/Topic(href, href_list)
@@ -408,34 +415,24 @@
memory = new_memo
else if (href_list["obj_edit"] || href_list["obj_add"])
- var/datum/objective/objective
- var/objective_pos
+ var/objective_pos //Edited objectives need to keep same order in antag objective list
var/def_value
-
var/datum/antagonist/target_antag
+ var/datum/objective/old_objective //The old objective we're replacing/editing
+ var/datum/objective/new_objective //New objective we're be adding
- if (href_list["obj_edit"])
- objective = locate(href_list["obj_edit"])
- if (!objective)
+ if(href_list["obj_edit"])
+ for(var/datum/antagonist/A in antag_datums)
+ old_objective = locate(href_list["obj_edit"]) in A.objectives
+ if(old_objective)
+ target_antag = A
+ objective_pos = A.objectives.Find(old_objective)
+ break
+ if(!old_objective)
+ to_chat(usr,"Invalid objective.")
return
- for(var/datum/antagonist/A in antag_datums)
- if(objective in A.objectives)
- target_antag = A
- objective_pos = A.objectives.Find(objective)
- break
-
- if(!target_antag) //Shouldn't happen anymore
- stack_trace("objective without antagonist found")
- objective_pos = objectives.Find(objective)
-
- //Text strings are easy to manipulate. Revised for simplicity.
- var/temp_obj_type = "[objective.type]"//Convert path into a text string.
- def_value = copytext(temp_obj_type, 19)//Convert last part of path into an objective keyword.
- if(!def_value)//If it's a custom objective, it will be an empty string.
- def_value = "custom"
else
- //We're adding this objective
if(href_list["target_antag"])
var/datum/antagonist/X = locate(href_list["target_antag"]) in antag_datums
if(X)
@@ -447,7 +444,7 @@
if(1)
target_antag = antag_datums[1]
else
- var/datum/antagonist/target = input("Which antagonist gets the objective:", "Antagonist", def_value) as null|anything in antag_datums + "(new custom antag)"
+ var/datum/antagonist/target = input("Which antagonist gets the objective:", "Antagonist", "(new custom antag)") as null|anything in antag_datums + "(new custom antag)"
if (QDELETED(target))
return
else if(target == "(new custom antag)")
@@ -455,149 +452,88 @@
else
target_antag = target
- var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "maroon", "debrain", "protect", "destroy", "prevent", "hijack", "escape", "survive", "martyr", "steal", "download", "nuclear", "capture", "absorb", "custom")
- if (!new_obj_type)
+ var/static/list/choices
+ if(!choices)
+ choices = list()
+
+ var/list/allowed_types = list(
+ /datum/objective/assassinate,
+ /datum/objective/maroon,
+ /datum/objective/debrain,
+ /datum/objective/protect,
+ /datum/objective/destroy,
+ /datum/objective/hijack,
+ /datum/objective/escape,
+ /datum/objective/survive,
+ /datum/objective/martyr,
+ /datum/objective/steal,
+ /datum/objective/download,
+ /datum/objective/nuclear,
+ /datum/objective/capture,
+ /datum/objective/absorb,
+ /datum/objective/custom
+ )
+
+ for(var/T in allowed_types)
+ var/datum/objective/X = T
+ choices[initial(X.name)] = T
+
+ if(old_objective)
+ if(old_objective.name in choices)
+ def_value = old_objective.name
+
+ var/selected_type = input("Select objective type:", "Objective type", def_value) as null|anything in choices
+ selected_type = choices[selected_type]
+ if (!selected_type)
return
- var/datum/objective/new_objective = null
+ if(!old_objective)
+ //Add new one
+ new_objective = new selected_type
+ new_objective.owner = src
+ new_objective.admin_edit(usr)
+ target_antag.objectives += new_objective
- switch (new_obj_type)
- if ("assassinate","protect","debrain","maroon")
- var/list/possible_targets = list("Free objective")
- for(var/datum/mind/possible_target in SSticker.minds)
- if ((possible_target != src) && ishuman(possible_target.current))
- possible_targets += possible_target.current
-
- var/mob/def_target = null
- var/list/objective_list = typecacheof(list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain, /datum/objective/maroon))
- if (is_type_in_typecache(objective, objective_list) && objective.target)
- def_target = objective.target.current
-
- var/mob/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets
- if (!new_target)
- return
-
- var/objective_path = text2path("/datum/objective/[new_obj_type]")
- if (new_target == "Free objective")
- new_objective = new objective_path
- new_objective.owner = src
- new_objective.target = null
- new_objective.explanation_text = "Free objective"
- else
- new_objective = new objective_path
- new_objective.owner = src
- new_objective.target = new_target.mind
- //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops.
- new_objective.update_explanation_text()
-
- if ("destroy")
- var/list/possible_targets = active_ais(1)
- if(possible_targets.len)
- var/mob/new_target = input("Select target:", "Objective target") as null|anything in possible_targets
- new_objective = new /datum/objective/destroy
- new_objective.target = new_target.mind
- new_objective.owner = src
- new_objective.update_explanation_text()
- else
- to_chat(usr, "No active AIs with minds")
-
- if ("prevent")
- new_objective = new /datum/objective/block
- new_objective.owner = src
-
- if ("hijack")
- new_objective = new /datum/objective/hijack
- new_objective.owner = src
-
- if ("escape")
- new_objective = new /datum/objective/escape
- new_objective.owner = src
-
- if ("survive")
- new_objective = new /datum/objective/survive
- new_objective.owner = src
-
- if("martyr")
- new_objective = new /datum/objective/martyr
- new_objective.owner = src
-
- if ("nuclear")
- new_objective = new /datum/objective/nuclear
- new_objective.owner = src
-
- if ("steal")
- if (!istype(objective, /datum/objective/steal))
- new_objective = new /datum/objective/steal
- new_objective.owner = src
- else
- new_objective = objective
- var/datum/objective/steal/steal = new_objective
- if (!steal.select_target())
- return
-
- if("download","capture","absorb")
- var/def_num
- if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]"))
- def_num = objective.target_amount
-
- var/target_number = input("Input target number:", "Objective", def_num) as num | null
- if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist.
- return
-
- switch(new_obj_type)
- if("download")
- new_objective = new /datum/objective/download
- new_objective.explanation_text = "Download [target_number] research node\s."
- if("capture")
- new_objective = new /datum/objective/capture
- new_objective.explanation_text = "Capture [target_number] lifeforms with an energy net. Live, rare specimens are worth more."
- if("absorb")
- new_objective = new /datum/objective/absorb
- new_objective.explanation_text = "Absorb [target_number] compatible genomes."
- new_objective.owner = src
- new_objective.target_amount = target_number
-
- if ("custom")
- var/expl = stripped_input(usr, "Custom objective:", "Objective", objective ? objective.explanation_text : "")
- if (!expl)
- return
- new_objective = new /datum/objective
- new_objective.owner = src
- new_objective.explanation_text = expl
-
- if (!new_objective)
- return
-
- if (objective)
- if(target_antag)
- target_antag.objectives -= objective
- objectives -= objective
- target_antag.objectives.Insert(objective_pos, new_objective)
- message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]")
- log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]")
- else
- if(target_antag)
- target_antag.objectives += new_objective
- objectives += new_objective
message_admins("[key_name_admin(usr)] added a new objective for [current]: [new_objective.explanation_text]")
log_admin("[key_name(usr)] added a new objective for [current]: [new_objective.explanation_text]")
+ else
+ if(old_objective.type == selected_type)
+ //Edit the old
+ old_objective.admin_edit(usr)
+ new_objective = old_objective
+ else
+ //Replace the old
+ new_objective = new selected_type
+ new_objective.owner = src
+ new_objective.admin_edit(usr)
+ target_antag.objectives -= old_objective
+ target_antag.objectives.Insert(objective_pos, new_objective)
+ message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]")
+ log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]")
else if (href_list["obj_delete"])
- var/datum/objective/objective = locate(href_list["obj_delete"])
- if(!istype(objective))
- return
+ var/datum/objective/objective
for(var/datum/antagonist/A in antag_datums)
- if(objective in A.objectives)
- A.objectives -= objective
+ objective = locate(href_list["obj_delete"]) in A.objectives
+ if(istype(objective))
break
- objectives -= objective
+ if(!objective)
+ to_chat(usr,"Invalid objective.")
+ return
+ //qdel(objective) Needs cleaning objective destroys
message_admins("[key_name_admin(usr)] removed an objective for [current]: [objective.explanation_text]")
log_admin("[key_name(usr)] removed an objective for [current]: [objective.explanation_text]")
else if(href_list["obj_completed"])
- var/datum/objective/objective = locate(href_list["obj_completed"])
- if(!istype(objective))
+ var/datum/objective/objective
+ for(var/datum/antagonist/A in antag_datums)
+ objective = locate(href_list["obj_completed"]) in A.objectives
+ if(istype(objective))
+ objective = objective
+ break
+ if(!objective)
+ to_chat(usr,"Invalid objective.")
return
objective.completed = !objective.completed
log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective.explanation_text]")
@@ -652,10 +588,16 @@
usr = current
traitor_panel()
+/datum/mind/proc/get_all_objectives()
+ var/list/all_objectives = list()
+ for(var/datum/antagonist/A in antag_datums)
+ all_objectives |= A.objectives
+ return all_objectives
+
/datum/mind/proc/announce_objectives()
var/obj_count = 1
to_chat(current, "Your current objectives:")
- for(var/objective in objectives)
+ for(var/objective in get_all_objectives())
var/datum/objective/O = objective
to_chat(current, "Objective #[obj_count]: [O.explanation_text]")
obj_count++
diff --git a/code/datums/mood_events/drug_events.dm b/code/datums/mood_events/drug_events.dm
index 469bf80979..1a681a8a4d 100644
--- a/code/datums/mood_events/drug_events.dm
+++ b/code/datums/mood_events/drug_events.dm
@@ -53,3 +53,63 @@
mood_change = -20
timeout = 300
//special_screen_obj = "mood_happiness_bad" Originally in tg
+
+/datum/mood_event/eigenstate
+ mood_change = -3
+ description = "Where the hell am I? Is this an alternative dimension ?\n"
+
+/datum/mood_event/enthrall
+ mood_change = 5
+
+/datum/mood_event/enthrall/add_effects(message)
+ description = "[message]\n"
+
+/datum/mood_event/enthrallpraise
+ mood_change = 10
+ timeout = 1 MINUTES
+
+/datum/mood_event/enthrallpraise/add_effects(message)
+ description = "[message]\n"
+
+/datum/mood_event/enthrallscold
+ mood_change = -10
+ timeout = 1 MINUTES
+
+/datum/mood_event/enthrallscold/add_effects(message)
+ description = "[message]\n"//aaa I'm not kinky enough for this
+
+/datum/mood_event/enthrallmissing1
+ mood_change = -5
+
+/datum/mood_event/enthrallmissing1/add_effects(message)
+ description = "[message]\n"
+
+/datum/mood_event/enthrallmissing2
+ mood_change = -10
+
+/datum/mood_event/enthrallmissing2/add_effects(message)
+ description = "[message]\n"
+
+/datum/mood_event/enthrallmissing3
+ mood_change = -15
+
+/datum/mood_event/enthrallmissing3/add_effects(message)
+ description = "[message]\n"
+
+/datum/mood_event/enthrallmissing4
+ mood_change = -25
+
+/datum/mood_event/enthrallmissing4/add_effects(message)
+ description = "[message]\n"
+
+/datum/mood_event/InLove
+ mood_change = 10
+
+/datum/mood_event/InLove/add_effects(message)
+ description = "[message]\n"
+
+/datum/mood_event/MissingLove
+ mood_change = -10
+
+/datum/mood_event/MissingLove/add_effects(message)
+ description = "[message]\n"
diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm
index f747c563ad..a6e4c8ed4f 100644
--- a/code/datums/mood_events/generic_negative_events.dm
+++ b/code/datums/mood_events/generic_negative_events.dm
@@ -5,8 +5,8 @@
mood_change = -1
/datum/mood_event/broken_vow //Used for when mimes break their vow of silence
- description = "I have brought shame upon my name, and betrayed my fellow mimes by breaking our sacred vow...\n"
- mood_change = -8
+ description = "I have brought shame upon my name, and betrayed my fellow mimes by breaking our sacred vow...\n"
+ mood_change = -8
/datum/mood_event/on_fire
description = "I'M ON FIRE!!!\n"
@@ -55,14 +55,14 @@
timeout = 2 MINUTES
/datum/mood_event/shameful_suicide //suicide_acts that return SHAME, like sord
- description = "I can't even end it all!\n"
- mood_change = -10
- timeout = 1 MINUTES
+ description = "I can't even end it all!\n"
+ mood_change = -10
+ timeout = 1 MINUTES
/datum/mood_event/dismembered
- description = "AHH! I WAS USING THAT LIMB!\n"
- mood_change = -8
- timeout = 2400
+ description = "AHH! I WAS USING THAT LIMB!\n"
+ mood_change = -8
+ timeout = 2400
/datum/mood_event/noshoes
description = "I am a disgrace to comedy everywhere!\n"
@@ -92,20 +92,20 @@
mood_change = 2
/datum/mood_event/brain_damage
- mood_change = -3
+ mood_change = -3
/datum/mood_event/brain_damage/add_effects()
- var/damage_message = pick_list_replacements(BRAIN_DAMAGE_FILE, "brain_damage")
- description = "Hurr durr... [damage_message]\n"
+ var/damage_message = pick_list_replacements(BRAIN_DAMAGE_FILE, "brain_damage")
+ description = "Hurr durr... [damage_message]\n"
/datum/mood_event/hulk //Entire duration of having the hulk mutation
- description = "HULK SMASH!\n"
- mood_change = -4
+ description = "HULK SMASH!\n"
+ mood_change = -4
/datum/mood_event/epilepsy //Only when the mutation causes a seizure
- description = "I should have paid attention to the epilepsy warning.\n"
- mood_change = -3
- timeout = 3000
+ description = "I should have paid attention to the epilepsy warning.\n"
+ mood_change = -3
+ timeout = 3000
/datum/mood_event/nyctophobia
description = "It sure is dark around here...\n"
@@ -176,3 +176,70 @@
/datum/mood_event/revenant_blight/add_effects()
description = "Just give up, [pick("no one will miss you", "there is nothing you can do to help", "even a clown would be more useful than you", "does it even matter in the end?")]...\n"
+
+/datum/mood_event/plushjack
+ description = "I have butchered a plush recently.\n"
+ mood_change = -1
+ timeout = 2 MINUTES
+
+/datum/mood_event/plush_nostuffing
+ description = "A plush I tried to pet had no stuffing...\n"
+ mood_change = -1
+ timeout = 2 MINUTES
+
+//Cursed stuff below
+
+/datum/mood_event/emptypred
+ description = "I had to let someone out.\n"
+ mood_change = -2
+ timeout = 1 MINUTES
+
+/datum/mood_event/emptyprey
+ description = "It feels quite cold out here.\n"
+ mood_change = -2
+ timeout = 1 MINUTES
+
+/datum/mood_event/vampcandle
+ description = "Something is making your mind feel... loose...\n"
+ mood_change = -10
+ timeout = 1 MINUTES
+
+/datum/mood_event/drankblood_bad
+ description = "I drank the blood of a lesser creature. Disgusting.\n"
+ mood_change = -4
+ timeout = 900
+
+/datum/mood_event/drankblood_dead
+ description = "I drank dead blood. I am better than this.\n"
+ mood_change = -7
+ timeout = 900
+
+/datum/mood_event/drankblood_synth
+ description = "I drank synthetic blood. What is wrong with me?\n"
+ mood_change = -7
+ timeout = 900
+
+/datum/mood_event/drankkilled
+ description = "I drank from my victim until they died. I feel...less human.\n"
+ mood_change = -12
+ timeout = 6000
+
+/datum/mood_event/madevamp
+ description = "A soul has been cursed to undeath by my own hand.\n"
+ mood_change = -10
+ timeout = 10000
+
+/datum/mood_event/vampatefood
+ description = "Mortal nourishment no longer sustains me. I feel unwell.\n"
+ mood_change = -6
+ timeout = 1000
+
+/datum/mood_event/daylight_1
+ description = "I slept poorly in a makeshift coffin during the day.\n"
+ mood_change = -3
+ timeout = 1000
+
+/datum/mood_event/daylight_2
+ description = "I have been scorched by the unforgiving rays of the sun.\n"
+ mood_change = -6
+ timeout = 1200
diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm
index 422ec4476c..94fd08535f 100644
--- a/code/datums/mood_events/generic_positive_events.dm
+++ b/code/datums/mood_events/generic_positive_events.dm
@@ -80,12 +80,12 @@
description = "Heh...hehehe...hehe...\n"
mood_change = 4
- /datum/mood_event/chemical_laughter
+/datum/mood_event/chemical_laughter
description = "Laughter really is the best medicine! Or is it?\n"
mood_change = 4
timeout = 3 MINUTES
- /datum/mood_event/chemical_superlaughter
+/datum/mood_event/chemical_superlaughter
description = "*WHEEZE*\n"
mood_change = 12
timeout = 3 MINUTES
@@ -113,3 +113,59 @@
/datum/mood_event/happy_empath/add_effects(var/mob/happytarget)
description = "[happytarget.name]'s happiness is infectious!\n"
+
+/datum/mood_event/headpat
+ description = "Headpats are nice.\n"
+ mood_change = 2
+ timeout = 2 MINUTES
+
+/datum/mood_event/hugbox
+ description = "I hugged a box of hugs recently.\n"
+ mood_change = 1
+ timeout = 2 MINUTES
+
+/datum/mood_event/plushpet
+ description = "I pet a plush recently.\n"
+ mood_change = 1
+ timeout = 3000
+
+/datum/mood_event/plushplay
+ description = "I've played with plushes recently.\n"
+ mood_change = 3
+ timeout = 3000
+
+/datum/mood_event/breakfast
+ description = "Nothing like a hearty breakfast to start the shift.\n"
+ mood_change = 2
+ timeout = 15 MINUTES
+
+//Power gamer stuff below
+/datum/mood_event/drankblood
+ description = "I have fed greedly from that which nourishes me.\n"
+ mood_change = 10
+ timeout = 900
+
+/datum/mood_event/coffinsleep
+ description = "I slept in a coffin during the day. I feel whole again.\n"
+ mood_change = 8
+ timeout = 1200
+
+//Cursed stuff below.
+
+/datum/mood_event/orgasm
+ description = "I came!\n" //funny meme haha
+ mood_change = 3
+ timeout = 100 SECONDS
+
+/datum/mood_event/fedpred
+ description = "I've devoured someone!\n"
+ mood_change = 3
+
+/datum/mood_event/fedprey
+ description = "It feels quite cozy in here.\n"
+ mood_change = 3
+
+/datum/mood_event/hope_lavaland
+ description = "What a peculiar emblem. It makes me feel hopeful for my future.\n"
+ mood_change = 5
+
diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm
index efa248b4f0..f689ff903e 100644
--- a/code/datums/mutations.dm
+++ b/code/datums/mutations.dm
@@ -30,7 +30,7 @@ GLOBAL_LIST_EMPTY(mutations_list)
. = on_losing(owner)
/datum/mutation/human/proc/set_se(se_string, on = 1)
- if(!se_string || lentext(se_string) < DNA_STRUC_ENZYMES_BLOCKS * DNA_BLOCK_SIZE)
+ if(!se_string || length(se_string) < DNA_STRUC_ENZYMES_BLOCKS * DNA_BLOCK_SIZE)
return
var/before = copytext(se_string, 1, ((dna_block - 1) * DNA_BLOCK_SIZE) + 1)
var/injection = num2hex(on ? rand(lowest_value, (256 * 16) - 1) : rand(0, lowest_value - 1), DNA_BLOCK_SIZE)
@@ -42,7 +42,7 @@ GLOBAL_LIST_EMPTY(mutations_list)
owner.dna.struc_enzymes = set_se(owner.dna.struc_enzymes, on)
/datum/mutation/human/proc/check_block_string(se_string)
- if(!se_string || lentext(se_string) < DNA_STRUC_ENZYMES_BLOCKS * DNA_BLOCK_SIZE)
+ if(!se_string || length(se_string) < DNA_STRUC_ENZYMES_BLOCKS * DNA_BLOCK_SIZE)
return 0
if(hex2num(getblock(se_string, dna_block)) >= lowest_value)
return 1
diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm
index 85cecca489..c536196e95 100644
--- a/code/datums/mutations/hulk.dm
+++ b/code/datums/mutations/hulk.dm
@@ -5,7 +5,7 @@
get_chance = 15
lowest_value = 256 * 12
text_gain_indication = "Your muscles hurt!"
- species_allowed = list("human") //no skeleton/lizard hulk
+ species_allowed = list("fly") //no skeleton/lizard hulk
health_req = 25
/datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner)
@@ -13,6 +13,7 @@
return
ADD_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_HULK)
ADD_TRAIT(owner, TRAIT_PUSHIMMUNE, TRAIT_HULK)
+ ADD_TRAIT(owner, TRAIT_CHUNKYFINGERS, TRAIT_HULK)
owner.update_body_parts()
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk)
RegisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech)
@@ -31,6 +32,7 @@
return
REMOVE_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_HULK)
REMOVE_TRAIT(owner, TRAIT_PUSHIMMUNE, TRAIT_HULK)
+ ADD_TRAIT(owner, TRAIT_CHUNKYFINGERS, TRAIT_HULK)
owner.update_body_parts()
SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "hulk")
UnregisterSignal(owner, COMSIG_MOB_SAY)
diff --git a/code/datums/mutations/speech.dm b/code/datums/mutations/speech.dm
index f02b7f185f..82138e6e34 100644
--- a/code/datums/mutations/speech.dm
+++ b/code/datums/mutations/speech.dm
@@ -95,6 +95,7 @@
message = replacetext(message," ugly "," beautiful ")
message = replacetext(message," douchbag "," nice guy ")
message = replacetext(message," whore "," lady ")
+ message = replacetext(message," gamer "," intellectual ")
message = replacetext(message," nerd "," smarty pants ")
message = replacetext(message," moron "," fun person ")
message = replacetext(message," IT'S LOOSE "," EVERYTHING IS FINE ")
diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm
index 8386b59d97..da379b9851 100755
--- a/code/datums/outfit.dm
+++ b/code/datums/outfit.dm
@@ -28,16 +28,16 @@
var/can_be_admin_equipped = TRUE // Set to FALSE if your outfit requires runtime parameters
var/list/chameleon_extras //extra types for chameleon outfit changes, mostly guns
-/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
//to be overridden for customization depending on client prefs,species etc
return
-/datum/outfit/proc/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/proc/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
//to be overridden for toggling internals, id binding, access etc
return
-/datum/outfit/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- pre_equip(H, visualsOnly)
+/datum/outfit/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+ pre_equip(H, visualsOnly, preference_source)
//Start with uniform,suit,backpack for additional slots
if(uniform)
@@ -103,7 +103,7 @@
var/obj/item/clothing/suit/space/hardsuit/HS = H.wear_suit
HS.ToggleHelmet()
- post_equip(H, visualsOnly)
+ post_equip(H, visualsOnly, preference_source)
if(!visualsOnly)
apply_fingerprints(H)
diff --git a/code/datums/radiation_wave.dm b/code/datums/radiation_wave.dm
index 6118428547..8555e4cf3f 100644
--- a/code/datums/radiation_wave.dm
+++ b/code/datums/radiation_wave.dm
@@ -66,6 +66,8 @@
place = cmaster_turf
for(var/i in 1 to distance)
place = get_step(place, dir)
+ if(!place)
+ break
atoms += get_rad_contents(place)
return atoms
@@ -108,7 +110,7 @@
if(!can_contaminate || blacklisted[thing.type])
continue
if(prob(contamination_chance)) // Only stronk rads get to have little baby rads
- if(SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
+ if(CHECK_BITFIELD(thing.rad_flags, RAD_NO_CONTAMINATE) || SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
continue
var/rad_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT
thing.AddComponent(/datum/component/radioactive, rad_strength, source)
diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm
index 18efae955e..7ea2d2615d 100644
--- a/code/datums/ruins/lavaland.dm
+++ b/code/datums/ruins/lavaland.dm
@@ -163,6 +163,13 @@
suffix = "lavaland_surface_xeno_nest.dmm"
cost = 20 */
+/datum/map_template/ruin/lavaland/alien_nest
+ name = "Alien Nest"
+ id = "alien-nest"
+ description = "Not even Necropolis is safe from alien infestation. The competition for hosts has locked the legion and aliens in an endless conflict that can only be resolved by a PKA."
+ suffix = "lavaland_surface_alien_nest.dmm"
+ cost = 20
+
/datum/map_template/ruin/lavaland/fountain
name = "Fountain Hall"
id = "fountain"
@@ -222,4 +229,13 @@
id = "puzzle"
description = "Mystery to be solved."
suffix = "lavaland_surface_puzzle.dmm"
- cost = 5
\ No newline at end of file
+ cost = 5
+
+/datum/map_template/ruin/lavaland/elite_tumor
+ name = "Pulsating Tumor"
+ id = "tumor"
+ description = "A strange tumor which houses a powerful beast..."
+ suffix = "lavaland_surface_elite_tumor.dmm"
+ cost = 5
+ always_place = TRUE
+ allow_duplicates = TRUE
diff --git a/code/datums/ruins/station.dm b/code/datums/ruins/station.dm
new file mode 100644
index 0000000000..56b3faff89
--- /dev/null
+++ b/code/datums/ruins/station.dm
@@ -0,0 +1,21 @@
+/datum/map_template/ruin/station
+ prefix = "_maps/RandomRuins/StationRuins/"
+ cost = 0
+
+// Boxstation
+ // Engine
+
+/datum/map_template/ruin/station/box/engine
+ id = "engine_sm"
+ suffix = "Box/Engine/engine_sm.dmm"
+ name = "Engine SM"
+
+/datum/map_template/ruin/station/box/engine/singulo
+ id = "engine_singulo"
+ suffix = "Box/Engine/engine_singulo.dmm"
+ name = "Engine Singulo"
+
+/datum/map_template/ruin/station/box/engine/tesla
+ id = "engine_tesla"
+ suffix = "Box/Engine/engine_tesla.dmm"
+ name = "Engine Tesla"
\ No newline at end of file
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index 563d06ca57..5c4fc61827 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -170,7 +170,7 @@
tick_interval = 4
alert_type = /obj/screen/alert/status_effect/his_grace
var/bloodlust = 0
-
+
/obj/screen/alert/status_effect/his_grace
name = "His Grace"
desc = "His Grace hungers, and you must feed Him."
@@ -356,7 +356,7 @@
var/new_staminaloss = owner.getStaminaLoss()
if(new_staminaloss < last_staminaloss)
var/heal_amount = -5 // CIT CHANGE - makes blood drunk status effect not exhaust you
- owner.adjustStaminaLoss(heal_amount, updating_health = FALSE)
+ owner.adjustStaminaLoss(heal_amount, FALSE)
new_staminaloss = owner.getStaminaLoss()
needs_health_update = TRUE
last_staminaloss = new_staminaloss
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index fb636f6911..f5f012e7f9 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -80,34 +80,55 @@
desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are."
icon_state = "asleep"
-//TASER
-/datum/status_effect/electrode
- id = "tased"
+/datum/status_effect/no_combat_mode/
+ id = "no_combat_mode"
blocks_combatmode = TRUE
- status_type = STATUS_EFFECT_REPLACE
alert_type = null
+ status_type = STATUS_EFFECT_REPLACE
-/datum/status_effect/electrode/on_creation(mob/living/new_owner, set_duration)
+/datum/status_effect/no_combat_mode/on_creation(mob/living/new_owner, set_duration)
if(isnum(set_duration))
duration = set_duration
. = ..()
+ if(iscarbon(owner))
+ var/mob/living/carbon/C = owner
+ if(C.combatmode)
+ C.toggle_combat_mode(TRUE)
+
+/datum/status_effect/no_combat_mode/mesmerize
+ id = "Mesmerize"
+ alert_type = /obj/screen/alert/status_effect/mesmerized
+
+/obj/screen/alert/status_effect/mesmerized
+ name = "Mesmerized"
+ desc = "You cant tear your sight from who is in front of you...Their gaze is simply too enthralling.."
+ icon = 'icons/mob/actions/bloodsucker.dmi'
+ icon_state = "power_mez"
+
+/datum/status_effect/no_combat_mode/electrode
+ id = "tased"
+
+/datum/status_effect/no_combat_mode/electrode/on_creation(mob/living/new_owner, set_duration)
+ if(isnum(set_duration)) //TODO, figure out how to grab from subtype
+ duration = set_duration
+ . = ..()
if(iscarbon(owner))
var/mob/living/carbon/C = owner
if(C.combatmode)
C.toggle_combat_mode(TRUE)
C.add_movespeed_modifier(MOVESPEED_ID_TASED_STATUS, TRUE, override = TRUE, multiplicative_slowdown = 8)
-/datum/status_effect/electrode/on_remove()
+/datum/status_effect/no_combat_mode/electrode/on_remove()
if(iscarbon(owner))
var/mob/living/carbon/C = owner
C.remove_movespeed_modifier(MOVESPEED_ID_TASED_STATUS)
. = ..()
-/datum/status_effect/electrode/tick()
+/datum/status_effect/no_combat_mode/electrode/tick()
if(owner)
owner.adjustStaminaLoss(5) //if you really want to try to stamcrit someone with a taser alone, you can, but it'll take time and good timing.
-/datum/status_effect/electrode/nextmove_modifier() //why is this a proc. its no big deal since this doesnt get called often at all but literally w h y
+/datum/status_effect/no_combat_mode/electrode/nextmove_modifier() //why is this a proc. its no big deal since this doesnt get called often at all but literally w h y
return 2
//OTHER DEBUFFS
@@ -388,6 +409,19 @@
else
new /obj/effect/temp_visual/bleed(get_turf(owner))
+/datum/status_effect/neck_slice
+ id = "neck_slice"
+ status_type = STATUS_EFFECT_UNIQUE
+ alert_type = null
+ duration = -1
+
+/datum/status_effect/neck_slice/tick()
+ var/mob/living/carbon/human/H = owner
+ if(H.stat == DEAD || H.bleed_rate <= 8)
+ H.remove_status_effect(/datum/status_effect/neck_slice)
+ if(prob(10))
+ H.emote(pick("gasp", "gag", "choke"))
+
/mob/living/proc/apply_necropolis_curse(set_curse, duration = 10 MINUTES)
var/datum/status_effect/necropolis_curse/C = has_status_effect(STATUS_EFFECT_NECROPOLIS_CURSE)
if(!set_curse)
@@ -481,7 +515,7 @@
deltimer(timerid)
-//Kindle: Used by servants of Ratvar. 10-second knockdown, reduced by 1 second per 5 damage taken while the effect is active.
+//Kindle: Used by servants of Ratvar. 10-second knockdown, reduced by 1 second per 5 damage taken while the effect is active. Does not take into account Oxy-damage
/datum/status_effect/kindle
id = "kindle"
status_type = STATUS_EFFECT_UNIQUE
@@ -489,6 +523,7 @@
duration = 100
alert_type = /obj/screen/alert/status_effect/kindle
var/old_health
+ var/old_oxyloss
/datum/status_effect/kindle/tick()
owner.Knockdown(15, TRUE, FALSE, 15)
@@ -498,7 +533,9 @@
C.stuttering = max(5, C.stuttering)
if(!old_health)
old_health = owner.health
- var/health_difference = old_health - owner.health
+ if(!old_oxyloss)
+ old_oxyloss = owner.getOxyLoss()
+ var/health_difference = old_health - owner.health - CLAMP(owner.getOxyLoss() - old_oxyloss,0, owner.getOxyLoss())
if(!health_difference)
return
owner.visible_message("The light in [owner]'s eyes dims as [owner.p_theyre()] harmed!", \
@@ -506,6 +543,7 @@
health_difference *= 2 //so 10 health difference translates to 20 deciseconds of stun reduction
duration -= health_difference
old_health = owner.health
+ old_oxyloss = owner.getOxyLoss()
/datum/status_effect/kindle/on_remove()
owner.visible_message("The light in [owner]'s eyes fades!", \
@@ -541,6 +579,38 @@
icon_state = "ichorial_stain"
alerttooltipstyle = "clockcult"
+
+//GOLEM GANG
+
+/datum/status_effect/strandling //get it, strand as in durathread strand + strangling = strandling hahahahahahahahahahhahahaha i want to die
+ id = "strandling"
+ status_type = STATUS_EFFECT_UNIQUE
+ alert_type = /obj/screen/alert/status_effect/strandling
+
+/datum/status_effect/strandling/on_apply()
+ ADD_TRAIT(owner, TRAIT_MAGIC_CHOKE, "dumbmoron")
+ return ..()
+
+/datum/status_effect/strandling/on_remove()
+ REMOVE_TRAIT(owner, TRAIT_MAGIC_CHOKE, "dumbmoron")
+ return ..()
+
+/obj/screen/alert/status_effect/strandling
+ name = "Choking strand"
+ desc = "A magical strand of Durathread is wrapped around your neck, preventing you from breathing! Click this icon to remove the strand."
+ icon_state = "his_grace"
+ alerttooltipstyle = "hisgrace"
+
+/obj/screen/alert/status_effect/strandling/Click(location, control, params)
+ . = ..()
+ to_chat(mob_viewer, "You attempt to remove the durathread strand from around your neck.")
+ if(do_after(mob_viewer, 35, null, mob_viewer))
+ if(isliving(mob_viewer))
+ var/mob/living/L = mob_viewer
+ to_chat(mob_viewer, "You succesfuly remove the durathread strand.")
+ L.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND)
+
+
datum/status_effect/pacify
id = "pacify"
status_type = STATUS_EFFECT_REPLACE
@@ -567,8 +637,7 @@ datum/status_effect/pacify
tick_interval = 10
examine_text = "SUBJECTPRONOUN seems slow and unfocused."
var/stun = TRUE
- var/triggered = FALSE
- alert_type = null
+ alert_type = /obj/screen/alert/status_effect/trance
/obj/screen/alert/status_effect/trance
name = "Trance"
@@ -576,17 +645,6 @@ datum/status_effect/pacify
icon_state = "high"
/datum/status_effect/trance/tick()
- if(HAS_TRAIT(owner, "hypnotherapy"))
- if(triggered == TRUE)
- UnregisterSignal(owner, COMSIG_MOVABLE_HEAR)
- RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/hypnotize)
- ADD_TRAIT(owner, TRAIT_MUTE, "trance")
- if(!owner.has_quirk(/datum/quirk/monochromatic))
- owner.add_client_colour(/datum/client_colour/monochrome)
- to_chat(owner, "[pick("You feel your thoughts slow down...", "You suddenly feel extremely dizzy...", "You feel like you're in the middle of a dream...","You feel incredibly relaxed...")]")
- triggered = FALSE
- else
- return
if(stun)
owner.Stun(60, TRUE, TRUE)
owner.dizziness = 20
@@ -594,47 +652,88 @@ datum/status_effect/pacify
/datum/status_effect/trance/on_apply()
if(!iscarbon(owner))
return FALSE
- if(HAS_TRAIT(owner, "hypnotherapy"))
- RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/listen)
- return TRUE
- alert_type = /obj/screen/alert/status_effect/trance
RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/hypnotize)
ADD_TRAIT(owner, TRAIT_MUTE, "trance")
- if(!owner.has_quirk(/datum/quirk/monochromatic))
- owner.add_client_colour(/datum/client_colour/monochrome)
+ owner.add_client_colour(/datum/client_colour/monochrome/trance)
owner.visible_message("[stun ? "[owner] stands still as [owner.p_their()] eyes seem to focus on a distant point." : ""]", \
"[pick("You feel your thoughts slow down...", "You suddenly feel extremely dizzy...", "You feel like you're in the middle of a dream...","You feel incredibly relaxed...")]")
return TRUE
-/datum/status_effect/trance/on_creation(mob/living/new_owner, _duration, _stun = TRUE, source_quirk = FALSE)//hypnoquirk makes no visible message, prevents self antag messages, and places phrase below objectives.
+/datum/status_effect/trance/on_creation(mob/living/new_owner, _duration, _stun = TRUE)
duration = _duration
stun = _stun
- if(source_quirk == FALSE && HAS_TRAIT(owner, "hypnotherapy"))
- REMOVE_TRAIT(owner, "hypnotherapy", ROUNDSTART_TRAIT)
return ..()
/datum/status_effect/trance/on_remove()
UnregisterSignal(owner, COMSIG_MOVABLE_HEAR)
REMOVE_TRAIT(owner, TRAIT_MUTE, "trance")
owner.dizziness = 0
- if(!owner.has_quirk(/datum/quirk/monochromatic))
- owner.remove_client_colour(/datum/client_colour/monochrome)
+ owner.remove_client_colour(/datum/client_colour/monochrome/trance)
to_chat(owner, "You snap out of your trance!")
-/datum/status_effect/trance/proc/listen(datum/source, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
- to_chat(owner, "[speaker] accidentally sets off your implanted trigger, sending you into a hypnotic daze!")
- triggered = TRUE
-
-/datum/status_effect/trance/proc/hypnotize(datum/source, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
+/datum/status_effect/trance/proc/hypnotize(datum/source, list/hearing_args)
if(!owner.can_hear())
return
- if(speaker == owner)
+ if(hearing_args[HEARING_SPEAKER] == owner)
return
var/mob/living/carbon/C = owner
C.cure_trauma_type(/datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY) //clear previous hypnosis
- if(HAS_TRAIT(C, "hypnotherapy"))
- addtimer(CALLBACK(C, /mob/living/carbon.proc/gain_trauma, /datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY, raw_message, TRUE), 10)
- else
- addtimer(CALLBACK(C, /mob/living/carbon.proc/gain_trauma, /datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY, raw_message), 10)
+ addtimer(CALLBACK(C, /mob/living/carbon.proc/gain_trauma, /datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY, hearing_args[HEARING_RAW_MESSAGE]), 10)
addtimer(CALLBACK(C, /mob/living.proc/Stun, 60, TRUE, TRUE), 15) //Take some time to think about it
qdel(src)
+
+/datum/status_effect/spasms
+ id = "spasms"
+ status_type = STATUS_EFFECT_MULTIPLE
+ alert_type = null
+
+/datum/status_effect/spasms/tick()
+ if(prob(15))
+ switch(rand(1,5))
+ if(1)
+ if((!owner.lying && !owner.buckled) && isturf(owner.loc))
+ to_chat(owner, "Your leg spasms!")
+ step(owner, pick(GLOB.cardinals))
+ if(2)
+ if(owner.incapacitated())
+ return
+ var/obj/item/I = owner.get_active_held_item()
+ if(I)
+ to_chat(owner, "Your fingers spasm!")
+ owner.log_message("used [I] due to a Muscle Spasm", LOG_ATTACK)
+ I.attack_self(owner)
+ if(3)
+ var/prev_intent = owner.a_intent
+ owner.a_intent = INTENT_HARM
+
+ var/range = 1
+ if(istype(owner.get_active_held_item(), /obj/item/gun)) //get targets to shoot at
+ range = 7
+
+ var/list/mob/living/targets = list()
+ for(var/mob/M in oview(owner, range))
+ if(isliving(M))
+ targets += M
+ if(LAZYLEN(targets))
+ to_chat(owner, "Your arm spasms!")
+ owner.log_message(" attacked someone due to a Muscle Spasm", LOG_ATTACK) //the following attack will log itself
+ owner.ClickOn(pick(targets))
+ owner.a_intent = prev_intent
+ if(4)
+ var/prev_intent = owner.a_intent
+ owner.a_intent = INTENT_HARM
+ to_chat(owner, "Your arm spasms!")
+ owner.log_message("attacked [owner.p_them()]self to a Muscle Spasm", LOG_ATTACK)
+ owner.ClickOn(owner)
+ owner.a_intent = prev_intent
+ if(5)
+ if(owner.incapacitated())
+ return
+ var/obj/item/I = owner.get_active_held_item()
+ var/list/turf/targets = list()
+ for(var/turf/T in oview(owner, 3))
+ targets += T
+ if(LAZYLEN(targets) && I)
+ to_chat(owner, "Your arm spasms!")
+ owner.log_message("threw [I] due to a Muscle Spasm", LOG_ATTACK)
+ owner.throw_item(pick(targets))
diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm
index 655863e0e0..cb2b4174b5 100644
--- a/code/datums/status_effects/neutral.dm
+++ b/code/datums/status_effects/neutral.dm
@@ -69,3 +69,17 @@
/datum/status_effect/in_love/tick()
if(date)
new /obj/effect/temp_visual/love_heart/invisible(get_turf(date.loc), owner)
+
+/datum/status_effect/throat_soothed
+ id = "throat_soothed"
+ duration = 60 SECONDS
+ status_type = STATUS_EFFECT_REFRESH
+ alert_type = null
+
+/datum/status_effect/throat_soothed/on_apply()
+ . = ..()
+ ADD_TRAIT(owner, TRAIT_SOOTHED_THROAT, "[STATUS_EFFECT_TRAIT]_[id]")
+
+/datum/status_effect/throat_soothed/on_remove()
+ . = ..()
+ REMOVE_TRAIT(owner, TRAIT_SOOTHED_THROAT, "[STATUS_EFFECT_TRAIT]_[id]")
\ No newline at end of file
diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm
index bc1cfba112..0d84aab763 100644
--- a/code/datums/status_effects/status_effect.dm
+++ b/code/datums/status_effects/status_effect.dm
@@ -64,6 +64,12 @@
owner = null
qdel(src)
+/datum/status_effect/proc/refresh()
+ var/original_duration = initial(duration)
+ if(original_duration == -1)
+ return
+ duration = world.time + original_duration
+
//clickdelay/nextmove modifiers!
/datum/status_effect/proc/nextmove_modifier()
return 1
@@ -92,6 +98,9 @@
if(S.id == initial(S1.id) && S.status_type)
if(S.status_type == STATUS_EFFECT_REPLACE)
S.be_replaced()
+ else if(S.status_type == STATUS_EFFECT_REFRESH)
+ S.refresh()
+ return
else
return
var/list/arguments = args.Copy()
diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm
index 80a5f24250..b74f24c469 100644
--- a/code/datums/traits/good.dm
+++ b/code/datums/traits/good.dm
@@ -8,12 +8,14 @@
mob_trait = TRAIT_ALCOHOL_TOLERANCE
gain_text = "You feel like you could drink a whole keg!"
lose_text = "You don't feel as resistant to alcohol anymore. Somehow."
+ medical_record_text = "Patient demonstrates a high tolerance for alcohol."
/datum/quirk/apathetic
name = "Apathetic"
desc = "You just don't care as much as other people. That's nice to have in a place like this, I guess."
value = 1
mood_quirk = TRUE
+ medical_record_text = "Patient was administered the Apathy Evaluation Scale but did not bother to complete it."
/datum/quirk/apathetic/add()
var/datum/component/mood/mood = quirk_holder.GetComponent(/datum/component/mood)
@@ -42,6 +44,7 @@
mob_trait = TRAIT_EMPATH
gain_text = "You feel in tune with those around you."
lose_text = "You feel isolated from others."
+ medical_record_text = "Patient is highly perceptive of and sensitive to social cues, or may possibly have ESP. Further testing needed."
/datum/quirk/freerunning
name = "Freerunning"
@@ -50,6 +53,7 @@
mob_trait = TRAIT_FREERUNNING
gain_text = "You feel lithe on your feet!"
lose_text = "You feel clumsy again."
+ medical_record_text = "Patient scored highly on cardio tests."
/datum/quirk/friendly
name = "Friendly"
@@ -59,6 +63,7 @@
gain_text = "You want to hug someone."
lose_text = "You no longer feel compelled to hug others."
mood_quirk = TRUE
+ medical_record_text = "Patient demonstrates low-inhibitions for physical contact and well-developed arms. Requesting another doctor take over this case."
/datum/quirk/jolly
name = "Jolly"
@@ -66,6 +71,11 @@
value = 1
mob_trait = TRAIT_JOLLY
mood_quirk = TRUE
+ medical_record_text = "Patient demonstrates constant euthymia irregular for environment. It's a bit much, to be honest."
+
+/datum/quirk/jolly/on_process()
+ if(prob(0.05))
+ SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "jolly", /datum/mood_event/jolly)
/datum/quirk/light_step
name = "Light Step"
@@ -74,6 +84,7 @@
mob_trait = TRAIT_LIGHT_STEP
gain_text = "You walk with a little more litheness."
lose_text = "You start tromping around like a barbarian."
+ medical_record_text = "Patient's dexterity belies a strong capacity for stealth."
/datum/quirk/quick_step
name = "Quick Step"
@@ -82,6 +93,7 @@
mob_trait = TRAIT_SPEEDY_STEP
gain_text = "You feel determined. No time to lose."
lose_text = "You feel less determined. What's the rush, man?"
+ medical_record_text = "Patient scored highly on racewalking tests."
/datum/quirk/musician
name = "Musician"
@@ -90,6 +102,7 @@
mob_trait = TRAIT_MUSICIAN
gain_text = "You know everything about musical instruments."
lose_text = "You forget how musical instruments work."
+ medical_record_text = "Patient brain scans show a highly-developed auditory pathway."
/datum/quirk/musician/on_spawn()
var/mob/living/carbon/human/H = quirk_holder
@@ -101,21 +114,6 @@
H.equip_to_slot(musicaltuner, SLOT_IN_BACKPACK)
H.regenerate_icons()
-/datum/quirk/night_vision
- name = "Night Vision"
- desc = "You can see slightly more clearly in full darkness than most people."
- value = 1
- mob_trait = TRAIT_NIGHT_VISION
- gain_text = "The shadows seem a little less dark."
- lose_text = "Everything seems a little darker."
-
-/datum/quirk/night_vision/on_spawn()
- var/mob/living/carbon/human/H = quirk_holder
- var/obj/item/organ/eyes/eyes = H.getorgan(/obj/item/organ/eyes)
- if(!eyes || eyes.lighting_alpha)
- return
- eyes.Insert(H) //refresh their eyesight and vision
-
/datum/quirk/photographer
name = "Photographer"
desc = "You know how to handle a camera, shortening the delay between each shot."
@@ -123,6 +121,7 @@
mob_trait = TRAIT_PHOTOGRAPHER
gain_text = "You know everything about photography."
lose_text = "You forget how photo cameras work."
+ medical_record_text = "Patient mentions photography as a stress-relieving hobby."
/datum/quirk/photographer/on_spawn()
var/mob/living/carbon/human/H = quirk_holder
@@ -136,12 +135,14 @@
desc = "You know your body well, and can accurately assess the extent of your wounds."
value = 2
mob_trait = TRAIT_SELF_AWARE
+ medical_record_text = "Patient demonstrates an uncanny knack for self-diagnosis."
/datum/quirk/skittish
name = "Skittish"
desc = "You can conceal yourself in danger. Ctrl-shift-click a closed locker to jump into it, as long as you have access."
value = 2
mob_trait = TRAIT_SKITTISH
+ medical_record_text = "Patient demonstrates a high aversion to danger and has described hiding in containers out of fear."
/datum/quirk/spiritual
name = "Spiritual"
@@ -150,6 +151,7 @@
mob_trait = TRAIT_SPIRITUAL
gain_text = "You feel a little more faithful to the gods today."
lose_text = "You feel less faithful in the gods."
+ medical_record_text = "Patient reports a belief in a higher power."
/datum/quirk/tagger
name = "Tagger"
@@ -158,6 +160,7 @@
mob_trait = TRAIT_TAGGER
gain_text = "You know how to tag walls efficiently."
lose_text = "You forget how to tag walls properly."
+ medical_record_text = "Patient was recently seen for possible paint huffing incident."
/datum/quirk/tagger/on_spawn()
var/mob/living/carbon/human/H = quirk_holder
@@ -173,6 +176,7 @@
mob_trait = TRAIT_VORACIOUS
gain_text = "You feel HONGRY."
lose_text = "You no longer feel HONGRY."
+ medical_record_text = "Patient demonstrates a disturbing capacity for eating."
/datum/quirk/trandening
name = "High Luminosity Eyes"
@@ -194,6 +198,7 @@
mob_trait = TRAIT_HIGH_BLOOD
gain_text = "You feel full of blood!"
lose_text = "You feel like your blood pressure went down."
+ medical_record_text = "Patient's blood tests report an abnormal concentration of red blood cells in their bloodstream."
/datum/quirk/bloodpressure/add()
var/mob/living/M = quirk_holder
@@ -203,3 +208,15 @@
/datum/quirk/bloodpressure/remove()
var/mob/living/M = quirk_holder
M.blood_ratio = 1
+
+/datum/quirk/night_vision
+ name = "Night Vision"
+ desc = "You can see slightly more clearly in full darkness than most people."
+ value = 1
+ mob_trait = TRAIT_NIGHT_VISION
+ gain_text = "The shadows seem a little less dark."
+ lose_text = "Everything seems a little darker."
+
+/datum/quirk/night_vision/on_spawn()
+ var/mob/living/carbon/human/H = quirk_holder
+ H.update_sight()
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index 178e1aaeb0..3319259381 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -22,14 +22,19 @@
value = -1
gain_text = "You start feeling depressed."
lose_text = "You no longer feel depressed." //if only it were that easy!
- medical_record_text = "Patient has a severe mood disorder causing them to experience sudden moments of sadness."
+ medical_record_text = "Patient has a severe mood disorder, causing them to experience acute episodes of depression."
mood_quirk = TRUE
+/datum/quirk/depression/on_process()
+ if(prob(0.05))
+ SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "depression", /datum/mood_event/depression)
+
/datum/quirk/family_heirloom
name = "Family Heirloom"
desc = "You are the current owner of an heirloom, passed down for generations. You have to keep it safe!"
value = -1
mood_quirk = TRUE
+ medical_record_text = "Patient demonstrates an unnatural attachment to a family heirloom."
var/obj/item/heirloom
var/where
@@ -143,6 +148,7 @@
name = "Nyctophobia"
desc = "As far as you can remember, you've always been afraid of the dark. While in the dark without a light source, you instinctually act careful, and constantly feel a sense of dread."
value = -1
+ medical_record_text = "Patient demonstrates a fear of the dark. (Seriously?)"
/datum/quirk/nyctophobia/on_process()
var/mob/living/carbon/human/H = quirk_holder
@@ -163,7 +169,8 @@
desc = "Bright lights irritate you. Your eyes start to water, your skin feels itchy against the photon radiation, and your hair gets dry and frizzy. Maybe it's a medical condition. If only Nanotrasen was more considerate of your needs..."
value = -1
gain_text = "The safty of light feels off..."
- lose_text = "Enlighing."
+ lose_text = "Enlightening."
+ medical_record_text = "Despite my warnings, the patient refuses turn on the lights, only to end up rolling down a full flight of stairs and into the cellar."
/datum/quirk/lightless/on_process()
var/turf/T = get_turf(quirk_holder)
@@ -332,16 +339,19 @@
medical_record_text = "Patient has an extreme or irrational fear and aversion to an undefined stimuli."
var/datum/brain_trauma/mild/phobia/phobia
-/datum/quirk/phobia/add()
+/datum/quirk/phobia/post_add()
var/mob/living/carbon/human/H = quirk_holder
phobia = new
- H.gain_trauma(phobia, TRAUMA_RESILIENCE_SURGERY)
+ H.gain_trauma(phobia, TRAUMA_RESILIENCE_ABSOLUTE)
+
+/datum/quirk/phobia/remove()
+ var/mob/living/carbon/human/H = quirk_holder
+ H?.cure_trauma_type(phobia, TRAUMA_RESILIENCE_ABSOLUTE)
/datum/quirk/mute
name = "Mute"
desc = "Due to some accident, medical condition, or simply by choice, you are completely unable to speak."
value = -2 //HALP MAINTS
- mob_trait = TRAIT_MUTE
gain_text = "You find yourself unable to speak!"
lose_text = "You feel a growing strength in your vocal chords."
medical_record_text = "Functionally mute, patient is unable to use their voice in any capacity."
@@ -350,14 +360,17 @@
/datum/quirk/mute/add()
var/mob/living/carbon/human/H = quirk_holder
mute = new
- H.gain_trauma(mute, TRAUMA_RESILIENCE_SURGERY)
+ H.gain_trauma(mute, TRAUMA_RESILIENCE_ABSOLUTE)
+
+/datum/quirk/mute/remove()
+ var/mob/living/carbon/human/H = quirk_holder
+ H?.cure_trauma_type(mute, TRAUMA_RESILIENCE_ABSOLUTE)
/datum/quirk/mute/on_process()
if(quirk_holder.mind && LAZYLEN(quirk_holder.mind.antag_datums))
to_chat(quirk_holder, "Your antagonistic nature has caused your voice to be heard.")
qdel(src)
-
/datum/quirk/unstable
name = "Unstable"
desc = "Due to past troubles, you are unable to recover your sanity if you lose it. Be very careful managing your mood!"
@@ -373,7 +386,7 @@
value = -4
gain_text = "You can't see anything."
lose_text = "You miraculously gain back your vision."
- medical_record_text = "Subject has permanent blindness."
+ medical_record_text = "Patient has permanent blindness."
/datum/quirk/blindness/add()
quirk_holder.become_blind(ROUNDSTART_TRAIT)
@@ -384,3 +397,6 @@
if(!H.equip_to_slot_if_possible(glasses, SLOT_GLASSES, bypass_equip_delay_self = TRUE)) //if you can't put it on the user's eyes, put it in their hands, otherwise put it on their eyes eyes
H.put_in_hands(glasses)
H.regenerate_icons()
+
+/datum/quirk/blindness/remove()
+ quirk_holder?.cure_blind(ROUNDSTART_TRAIT)
diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm
index c015dba5ec..eae2db6a5f 100644
--- a/code/datums/traits/neutral.dm
+++ b/code/datums/traits/neutral.dm
@@ -16,6 +16,7 @@
value = 0
gain_text = "You feel an intense craving for pineapple."
lose_text = "Your feelings towards pineapples seem to return to a lukewarm state."
+ medical_record_text = "Patient demonstrates a pathological love of pineapple."
/datum/quirk/pineapple_liker/add()
var/mob/living/carbon/human/H = quirk_holder
@@ -34,6 +35,7 @@
value = 0
gain_text = "You find yourself pondering what kind of idiot actually enjoys pineapples..."
lose_text = "Your feelings towards pineapples seem to return to a lukewarm state."
+ medical_record_text = "Patient is correct to think that pineapple is disgusting."
/datum/quirk/pineapple_hater/add()
var/mob/living/carbon/human/H = quirk_holder
@@ -52,6 +54,7 @@
value = 0
gain_text = "You start craving something that tastes strange."
lose_text = "You feel like eating normal food again."
+ medical_record_text = "Patient demonstrates irregular nutrition preferences."
/datum/quirk/deviant_tastes/add()
var/mob/living/carbon/human/H = quirk_holder
@@ -92,7 +95,7 @@
value = 0
gain_text = "You feel more prudish."
lose_text = "You don't feel as prudish as before."
- medical_record_text = "Patient exhibits a special gene that makes them immune to Crocin and Hexacrocin."
+ medical_record_text = "Patient exhibits a special gene that makes them immune to aphrodisiacs."
/datum/quirk/libido
name = "Nymphomania"
@@ -103,14 +106,13 @@
lose_text = "You don't feel that burning sensation anymore."
/datum/quirk/libido/add()
- var/mob/living/M = quirk_holder
- M.min_arousal = 16
- M.arousal_rate = 3
+ quirk_holder.min_arousal = 16
+ quirk_holder.arousal_rate = 3
/datum/quirk/libido/remove()
- var/mob/living/M = quirk_holder
- M.min_arousal = initial(M.min_arousal)
- M.arousal_rate = initial(M.arousal_rate)
+ if(quirk_holder)
+ quirk_holder.min_arousal = initial(quirk_holder.min_arousal)
+ quirk_holder.arousal_rate = initial(quirk_holder.arousal_rate)
/datum/quirk/maso
name = "Masochism"
@@ -135,6 +137,7 @@
value = 0
mob_trait = TRAIT_PHARMA
lose_text = "Your liver feels different."
+ medical_record_text = "Non-invasive tests report that the patient's metabolism is indeed incompatible with a certain \"stimulants\"."
var/active = FALSE
var/power = 0
var/cachedmoveCalc = 1
diff --git a/code/datums/verbs.dm b/code/datums/verbs.dm
index 79fe256bb4..d8d7ee7433 100644
--- a/code/datums/verbs.dm
+++ b/code/datums/verbs.dm
@@ -11,7 +11,7 @@
//do things for each entry in Generate_list
//return value sets Generate_list[verbpath]
-/datum/verbs/proc/HandleVerb(list/entry, atom/verb/verbpath, ...)
+/datum/verbs/proc/HandleVerb(list/entry, procpath/verbpath, ...)
return entry
/datum/verbs/New()
@@ -82,7 +82,7 @@
. += childlist
for (var/thing in verblist)
- var/atom/verb/verbpath = thing
+ var/procpath/verbpath = thing
if (!verbpath)
stack_trace("Bad VERB in [type] verblist: [english_list(verblist)]")
var/list/entry = list()
diff --git a/code/datums/weather/weather_types/ash_storm.dm b/code/datums/weather/weather_types/ash_storm.dm
index 345212cc1b..3247b890c6 100644
--- a/code/datums/weather/weather_types/ash_storm.dm
+++ b/code/datums/weather/weather_types/ash_storm.dm
@@ -80,7 +80,7 @@
return TRUE
if(ishuman(L)) //Are you immune?
var/mob/living/carbon/human/H = L
- var/thermal_protection = H.get_thermal_protection()
+ var/thermal_protection = H.easy_thermal_protection()
if(thermal_protection >= FIRE_IMMUNITY_MAX_TEMP_PROTECT)
return TRUE
if(isliving(L))// if we're a non immune mob inside an immune mob we have to reconsider if that mob is immune to protect ourselves
diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm
index 6765cdf2cd..0d763aa5ad 100644
--- a/code/datums/weather/weather_types/radiation_storm.dm
+++ b/code/datums/weather/weather_types/radiation_storm.dm
@@ -22,27 +22,17 @@
target_trait = ZTRAIT_STATION
immunity_type = "rad"
+
+ var/radiation_intensity = 100
/datum/weather/rad_storm/telegraph()
..()
status_alarm(TRUE)
-
/datum/weather/rad_storm/weather_act(mob/living/L)
var/resist = L.getarmor(null, "rad")
- if(prob(40))
- if(ishuman(L))
- var/mob/living/carbon/human/H = L
- if(H.dna && !HAS_TRAIT(H, TRAIT_RADIMMUNE))
- if(prob(max(0,100-resist)))
- H.randmuti()
- if(prob(50))
- if(prob(90))
- H.randmutb()
- else
- H.randmutg()
- H.domutcheck()
- L.rad_act(20)
+ var/ratio = 1 - (min(resist, 100) / 100)
+ L.rad_act(radiation_intensity * ratio)
/datum/weather/rad_storm/end()
if(..())
diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm
index 26942a1ba6..db6d80f9bb 100644
--- a/code/datums/wires/airlock.dm
+++ b/code/datums/wires/airlock.dm
@@ -1,10 +1,35 @@
/datum/wires/airlock
holder_type = /obj/machinery/door/airlock
- proper_name = "Airlock"
+ proper_name = "Generic Airlock"
+ var/wiretype
/datum/wires/airlock/secure
randomize = TRUE
+/datum/wires/airlock/command
+ proper_name = "Command Airlock"
+ wiretype = "commandairlock"
+
+/datum/wires/airlock/security
+ proper_name = "Security Airlock"
+ wiretype = "securityairlock"
+
+/datum/wires/airlock/engineering
+ proper_name = "Engineering Airlock"
+ wiretype = "engineeringairlock"
+
+/datum/wires/airlock/science
+ proper_name = "Science Airlock"
+ wiretype = "scienceairlock"
+
+/datum/wires/airlock/medical
+ proper_name = "Medical Airlock"
+ wiretype = "medicalairlock"
+
+/datum/wires/airlock/cargo
+ proper_name = "Cargo Airlock"
+ wiretype = "cargoairlock"
+
/datum/wires/airlock/New(atom/holder)
wires = list(
WIRE_POWER1, WIRE_POWER2,
@@ -14,7 +39,16 @@
WIRE_ZAP1, WIRE_ZAP2
)
add_duds(2)
- ..()
+ . = ..()
+ if(randomize || !wiretype)
+ return
+ if(!GLOB.wire_color_directory[wiretype])
+ colors = list()
+ randomize()
+ GLOB.wire_color_directory[wiretype] = colors
+ GLOB.wire_name_directory[wiretype] = proper_name
+ else
+ colors = GLOB.wire_color_directory[wiretype]
/datum/wires/airlock/interactable(mob/user)
var/obj/machinery/door/airlock/A = holder
diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm
index 798cd9c026..fa66306302 100644
--- a/code/game/area/Space_Station_13_areas.dm
+++ b/code/game/area/Space_Station_13_areas.dm
@@ -250,7 +250,12 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/maintenance/disposal/incinerator
name = "Incinerator"
icon_state = "disposal"
+/area/maintenance/bar
+ name = "Maintenance Bar"
+ icon_state = "maintbar"
+/area/maintenance/bar/cafe
+ name = "Abandoned Cafe"
//Hallway
@@ -499,6 +504,16 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "Abandoned Theatre"
icon_state = "Theatre"
+/area/crew_quarters/theatre/clown
+ name = "Clown's Office"
+
+/area/crew_quarters/theatre/mime
+ name = "Mime's Office"
+
+/area/crew_quarters/cryopod
+ name = "Cryogenics"
+ icon_state = "cryosleep"
+
/area/library
name = "Library"
icon_state = "library"
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index dfbb59811b..f5e285a5c2 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -53,8 +53,6 @@
var/parallax_movedir = 0
- var/global/global_uid = 0
- var/uid
var/list/ambientsounds = GENERIC
flags_1 = CAN_BE_DIRTY_1
@@ -96,7 +94,6 @@ GLOBAL_LIST_EMPTY(teleportlocs)
/area/Initialize()
icon_state = ""
layer = AREA_LAYER
- uid = ++global_uid
map_name = name // Save the initial (the name set in the map) name of the area.
canSmoothWithAreas = typecacheof(canSmoothWithAreas)
@@ -330,7 +327,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
for(var/obj/machinery/light/L in src)
L.update()
-/area/proc/updateicon()
+/area/proc/update_icon()
var/weather_icon
for(var/V in SSweather.processing)
var/datum/weather/W = V
@@ -340,7 +337,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
if(!weather_icon)
icon_state = null
-/area/space/updateicon()
+/area/space/update_icon()
icon_state = null
/*
@@ -373,7 +370,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
/area/proc/power_change()
for(var/obj/machinery/M in src) // for each machine in the area
M.power_change() // reverify power status (to update icons etc.)
- updateicon()
+ update_icon()
/area/proc/usage(chan)
var/used = 0
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 68f22242e1..7de5707032 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -186,6 +186,10 @@
else
M.forceMove(src)
+//common name
+/atom/proc/update_multiz(prune_on_fail = FALSE)
+ return FALSE
+
/atom/proc/assume_air(datum/gas_mixture/giver)
qdel(giver)
return null
@@ -266,7 +270,7 @@
if(SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED)
should_override = TRUE
-
+
if(blood_DNA && !istype(src, /obj/effect/decal))
override[EXAMINE_POSITION_BEFORE] = " blood-stained "
should_override = TRUE
@@ -276,35 +280,35 @@
///Generate the full examine string of this atom (including icon for goonchat)
/atom/proc/get_examine_string(mob/user, thats = FALSE)
- . = "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]"
+ return "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]"
/atom/proc/examine(mob/user)
- to_chat(user, "[get_examine_string(user, TRUE)].")
+ . = list("[get_examine_string(user, TRUE)].")
if(desc)
- to_chat(user, desc)
+ . += desc
if(reagents)
if(reagents.reagents_holder_flags & TRANSPARENT)
- to_chat(user, "It contains:")
- if(reagents.reagent_list.len)
+ . += "It contains:"
+ if(length(reagents.reagent_list))
if(user.can_see_reagents()) //Show each individual reagent
for(var/datum/reagent/R in reagents.reagent_list)
- to_chat(user, "[R.volume] units of [R.name]")
+ . += "[R.volume] units of [R.name]"
else //Otherwise, just show the total volume
var/total_volume = 0
for(var/datum/reagent/R in reagents.reagent_list)
total_volume += R.volume
- to_chat(user, "[total_volume] units of various reagents")
+ . += "[total_volume] units of various reagents"
else
- to_chat(user, "Nothing.")
+ . += "Nothing."
else if(reagents.reagents_holder_flags & AMOUNT_VISIBLE)
if(reagents.total_volume)
- to_chat(user, "It has [reagents.total_volume] unit\s left.")
+ . += "It has [reagents.total_volume] unit\s left."
else
- to_chat(user, "It's empty.")
+ . += "It's empty."
- SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user)
+ SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .)
/atom/proc/relaymove(mob/user)
if(buckle_message_cooldown <= world.time)
@@ -312,9 +316,6 @@
to_chat(user, "You can't move while buckled to [src]!")
return
-/atom/proc/prevent_content_explosion()
- return FALSE
-
/atom/proc/contents_explosion(severity, target)
return //For handling the effects of explosions on contents that would not normally be effected
@@ -563,7 +564,7 @@
//Hook for running code when a dir change occurs
-/atom/proc/setDir(newdir)
+/atom/proc/setDir(newdir, ismousemovement=FALSE)
SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir)
dir = newdir
@@ -656,7 +657,7 @@
var/atom/L = loc
if(!L)
return null
- return L.AllowDrop() ? L : get_turf(L)
+ return L.AllowDrop() ? L : L.drop_location()
/atom/Entered(atom/movable/AM, atom/oldLoc)
SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, AM, oldLoc)
@@ -808,8 +809,7 @@ Proc for attack log creation, because really why not
// Filter stuff
/atom/movable/proc/add_filter(name,priority,list/params)
- if(!filter_data)
- filter_data = list()
+ LAZYINITLIST(filter_data)
var/list/p = params.Copy()
p["priority"] = priority
filter_data[name] = p
@@ -817,7 +817,7 @@ Proc for attack log creation, because really why not
/atom/movable/proc/update_filters()
filters = null
- sortTim(filter_data,associative = TRUE)
+ filter_data = sortTim(filter_data, /proc/cmp_filter_data_priority, TRUE)
for(var/f in filter_data)
var/list/data = filter_data[f]
var/list/arguments = data.Copy()
@@ -832,4 +832,7 @@ Proc for attack log creation, because really why not
if(filter_data && filter_data[name])
filter_data -= name
update_filters()
- return TRUE
\ No newline at end of file
+ return TRUE
+
+/atom/proc/intercept_zImpact(atom/movable/AM, levels = 1)
+ . |= SEND_SIGNAL(src, COMSIG_ATOM_INTERCEPT_Z_FALL, AM, levels)
\ No newline at end of file
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 0957db5fcb..ef20b6e35e 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -34,6 +34,51 @@
var/datum/component/orbiter/orbiting
var/can_be_z_moved = TRUE
+ var/zfalling = FALSE
+
+/atom/movable/proc/can_zFall(turf/source, levels = 1, turf/target, direction)
+ if(!direction)
+ direction = DOWN
+ if(!source)
+ source = get_turf(src)
+ if(!source)
+ return FALSE
+ if(!target)
+ target = get_step_multiz(source, direction)
+ if(!target)
+ return FALSE
+ return !(movement_type & FLYING) && has_gravity(source) && !throwing
+
+/atom/movable/proc/onZImpact(turf/T, levels)
+ var/atom/highest = T
+ for(var/i in T.contents)
+ var/atom/A = i
+ if(!A.density)
+ continue
+ if(isobj(A) || ismob(A))
+ if(A.layer > highest.layer)
+ highest = A
+ INVOKE_ASYNC(src, .proc/SpinAnimation, 5, 2)
+ throw_impact(highest)
+ return TRUE
+
+//For physical constraints to travelling up/down.
+/atom/movable/proc/can_zTravel(turf/destination, direction)
+ var/turf/T = get_turf(src)
+ if(!T)
+ return FALSE
+ if(!direction)
+ if(!destination)
+ return FALSE
+ direction = get_dir(T, destination)
+ if(direction != UP && direction != DOWN)
+ return FALSE
+ if(!destination)
+ destination = get_step_multiz(src, direction)
+ if(!destination)
+ return FALSE
+ return T.zPassOut(src, direction, destination) && destination.zPassIn(src, direction, T)
+
/atom/movable/vv_edit_var(var_name, var_value)
var/static/list/banned_edits = list("step_x", "step_y", "step_size")
var/static/list/careful_edits = list("bound_x", "bound_y", "bound_width", "bound_height")
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index 65a7c6a954..1a57cf5051 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -189,7 +189,13 @@
if(tod)
var/tdelta = round(world.time - timeofdeath)
if(tdelta < (DEFIB_TIME_LIMIT * 10))
- holder.icon_state = "huddefib"
+ var/obj/item/organ/heart/He = getorgan(/obj/item/organ/heart)
+ if(He)
+ holder.icon_state = "huddefib"
+ if(He.organ_flags & ORGAN_FAILING)
+ holder.icon_state = "huddefibheart"
+ else
+ holder.icon_state = "huddefibheart"
return
holder.icon_state = "huddead"
else
diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm
new file mode 100644
index 0000000000..e784fd836d
--- /dev/null
+++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm
@@ -0,0 +1,292 @@
+
+/datum/game_mode
+ var/list/datum/mind/bloodsuckers = list() // List of minds belonging to this game mode.
+ var/list/datum/mind/vassals = list() // List of minds that have been turned into Vassals.
+ //var/list/datum/mind/vamphunters = list() // List of minds hunting vampires. Disabled at the moment
+ var/obj/effect/sunlight/bloodsucker_sunlight // Sunlight Timer. Created on first Bloodsucker assign. Destroyed on last removed Bloodsucker.
+
+ // LISTS //
+ var/list/vassal_allowed_antags = list(/datum/antagonist/brother, /datum/antagonist/traitor, /datum/antagonist/traitor/internal_affairs, /datum/antagonist/survivalist, \
+ /datum/antagonist/rev, /datum/antagonist/nukeop, /datum/antagonist/pirate, /datum/antagonist/cult, /datum/antagonist/abductee)
+ // The antags you're allowed to be if turning Vassal.
+
+/datum/game_mode/bloodsucker
+ name = "bloodsucker"
+ config_tag = "bloodsucker"
+ traitor_name = "Bloodsucker"
+ antag_flag = ROLE_BLOODSUCKER
+ false_report_weight = 1
+ restricted_jobs = list("AI","Cyborg")
+ protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ required_players = 20
+ required_enemies = 2
+ recommended_enemies = 4
+ reroll_friendly = FALSE
+ enemy_minimum_age = 7
+ round_ends_with_antag_death = FALSE
+
+
+ announce_span = "danger"
+ announce_text = "Filthy, bloodsucking vampires are crawling around disguised as crewmembers!\n\
+ Bloodsuckers: The crew are cattle, while you are both shepherd and slaughterhouse.\n\
+ Crew: Put an end to the undead infestation before the station is overcome!"
+
+/datum/game_mode/bloodsucker/generate_report()
+ return "Reports indicate that some of your crew may have toppled statues in the past week, angering the gods and becoming cursed with undeath and a desire for blood. Watch out for crewmembers that seem to shun the light or are found pale and delirious."
+
+// Seems to be run by game ONCE, and finds all potential players to be antag.
+/datum/game_mode/bloodsucker/pre_setup()
+
+ // Set Restricted Jobs
+ if(CONFIG_GET(flag/protect_roles_from_antagonist))
+ restricted_jobs += protected_jobs
+
+ if(CONFIG_GET(flag/protect_assistant_from_antagonist))
+ restricted_jobs += "Assistant"
+
+ // Set number of Vamps
+ recommended_enemies = CLAMP(round(num_players()/10), 1, 6);
+
+ // Select Antags
+ for(var/i = 0, i < recommended_enemies, i++)
+ if (!antag_candidates.len)
+ break
+ var/datum/mind/bloodsucker = pick(antag_candidates)
+ // Can we even BE a bloodsucker?
+ //if (can_make_bloodsucker(bloodsucker, display_warning=FALSE))
+ bloodsuckers += bloodsucker
+ bloodsucker.restricted_roles = restricted_jobs
+ log_game("[bloodsucker.key] (ckey) has been selected as a Bloodsucker.")
+ antag_candidates.Remove(bloodsucker) // Apparently you can also write antag_candidates -= bloodsucker
+
+ // Assign Hunters (as many as monsters, plus one)
+ //assign_monster_hunters(bloodsuckers.len, TRUE, bloodsuckers) // Disabled for now
+
+ // Do we have enough vamps to continue?
+ return bloodsuckers.len >= required_enemies
+
+
+// Gamemode is all done being set up. We have all our Vamps. We now pick objectives and let them know what's happening.
+/datum/game_mode/bloodsucker/post_setup()
+
+ // Sunlight (Creating Bloodsuckers manually will check to create this, too)
+ check_start_sunlight()
+
+ // Vamps
+ for(var/datum/mind/bloodsucker in bloodsuckers)
+ // spawn() --> Run block of code but game continues on past it.
+ // sleep() --> Run block of code and freeze code there (including whoever called us) until it's resolved.
+
+ //Clean Bloodsucker Species (racist?)
+ //clean_invalid_species(bloodsucker)
+ // TO-DO !!!
+
+ // Add Bloodsucker Antag Datum (or remove from list on Fail)
+ if (!make_bloodsucker(bloodsucker))
+ bloodsuckers -= bloodsucker
+
+ // NOTE: Hunters are done in ..() parent proc
+
+ return ..()
+
+// Checking for ACTUALLY Dead Vamps
+/datum/game_mode/bloodsucker/are_special_antags_dead()
+ // Bloodsucker not Final Dead
+ for(var/datum/mind/bloodsucker in bloodsuckers)
+ if(!bloodsucker.AmFinalDeath())
+ return FALSE
+ return TRUE
+
+
+// Init Sunlight (called from datum_bloodsucker.on_gain(), in case game mode isn't even Bloodsucker
+/datum/game_mode/proc/check_start_sunlight()
+ // Already Sunlight (and not about to cancel)
+ if (istype(bloodsucker_sunlight) && !bloodsucker_sunlight.cancel_me)
+ return
+ bloodsucker_sunlight = new ()
+
+// End Sun (last bloodsucker removed)
+/datum/game_mode/proc/check_cancel_sunlight()
+ // No Sunlight
+ if (!istype(bloodsucker_sunlight))
+ return
+ if (bloodsuckers.len <= 0)
+ bloodsucker_sunlight.cancel_me = TRUE
+ qdel(bloodsucker_sunlight)
+ bloodsucker_sunlight = null
+
+/datum/game_mode/proc/is_daylight()
+ return istype(bloodsucker_sunlight) && bloodsucker_sunlight.amDay
+
+//////////////////////////////////////////////////////////////////////////////
+
+
+/datum/game_mode/proc/can_make_bloodsucker(datum/mind/bloodsucker, datum/mind/creator, display_warning=TRUE) // Creator is just here so we can display fail messages to whoever is turning us.
+ // No Mind
+ if(!bloodsucker || !bloodsucker.key) // KEY is client login?
+ //if(creator) // REMOVED. You wouldn't see their name if there is no mind, so why say anything?
+ // to_chat(creator, "[bloodsucker] isn't self-aware enough to be raised as a Bloodsucker!")
+ return FALSE
+ // Current body is invalid
+ if(!ishuman(bloodsucker.current))// && !ismonkey(bloodsucker.current))
+ if(display_warning && creator)
+ to_chat(creator, "[bloodsucker] isn't evolved enough to be raised as a Bloodsucker!")
+ return FALSE
+ // Species Must have a HEART (Sorry Plasmabois)
+ var/mob/living/carbon/human/H = bloodsucker.current
+ if(NOBLOOD in H.dna.species.species_traits)
+ if(display_warning && creator)
+ to_chat(creator, "[bloodsucker]'s DNA isn't compatible!")
+ return FALSE
+ // Already a Non-Human Antag
+ if(bloodsucker.has_antag_datum(/datum/antagonist/abductor) || bloodsucker.has_antag_datum(/datum/antagonist/devil) || bloodsucker.has_antag_datum(/datum/antagonist/changeling))
+ return FALSE
+ // Already a vamp
+ if(bloodsucker.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ if(display_warning && creator)
+ to_chat(creator, "[bloodsucker] is already a Bloodsucker!")
+ return FALSE
+ // Not High Enough
+ if(creator)
+ var/datum/antagonist/bloodsucker/creator_bloodsucker = creator.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(!istype(creator_bloodsucker) || creator_bloodsucker.vamplevel < BLOODSUCKER_LEVEL_TO_EMBRACE)
+ to_chat(creator, "Your blood is too thin to turn this corpse!")
+ return FALSE
+ return TRUE
+
+
+/datum/game_mode/proc/make_bloodsucker(datum/mind/bloodsucker, datum/mind/creator = null) // NOTE: This is a game_mode/proc, NOT a game_mode/bloodsucker/proc! We need to access this function despite the game mode.
+ if (!can_make_bloodsucker(bloodsucker))
+ return FALSE
+
+ // Create Datum: Fledgling
+ var/datum/antagonist/bloodsucker/A
+
+ // [FLEDGLING]
+ if (creator)
+ A = new (bloodsucker)
+ A.creator = creator
+ bloodsucker.add_antag_datum(A)
+ // Log
+ message_admins("[bloodsucker] has become a Bloodsucker, and was created by [creator].")
+ log_admin("[bloodsucker] has become a Bloodsucker, and was created by [creator].")
+
+ // [MASTER]
+ else
+ A = bloodsucker.add_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+
+
+ return TRUE
+
+
+/datum/game_mode/proc/remove_bloodsucker(datum/mind/bloodsucker)
+ bloodsucker.remove_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+
+
+/datum/game_mode/proc/clean_invalid_species(datum/mind/bloodsucker)
+ // Only checking for Humans here
+ if (!ishuman(bloodsucker.current) || !bloodsucker.current.client)
+ return
+ var/am_valid = TRUE
+ var/mob/living/carbon/human/H = bloodsucker.current
+
+ // Check if PLASMAMAN?
+ if(NOBLOOD in H.dna.species.species_traits)
+ am_valid = FALSE
+
+ // PROBLEM:
+ //
+ // Setting species leaves clothes on. If you were a plasmaman, we need to reassign your entire outfit. Otherwise
+ // everyone will wonder why you're a human with Plasma clothes (jk they'll know you're antag)
+
+ // Convert to HUMAN (along with ID and PDA)
+ if (!am_valid)
+ H.set_species(/datum/species/human)
+ H.real_name = H.client.prefs.custom_names["human"]
+ var/obj/item/card/id/ID = H.wear_id?.GetID()
+ if(ID)
+ ID.registered_name = H.real_name
+ ID.update_label()
+
+
+/datum/game_mode/proc/can_make_vassal(mob/living/target, datum/mind/creator, display_warning=TRUE)//, check_antag_or_loyal=FALSE)
+ // Not Correct Type: Abort
+ if (!iscarbon(target) || !creator)
+ return FALSE
+ if (target.stat > UNCONSCIOUS)
+ return FALSE
+ // Check Overdose: Am I even addicted to blood? Do I even have any in me?
+ //if (!target.reagents.addiction_list || !target.reagents.reagent_list)
+ //message_admins("DEBUG2: can_make_vassal() Abort: No reagents")
+ // return 0
+ // Check Overdose: Did my current volume go over the Overdose threshold?
+ //var/am_addicted = 0
+ //for (var/datum/reagent/blood/vampblood/blood in target.reagents.addiction_list) // overdosed is tracked in reagent_list, not addiction_list.
+ //message_admins("DEBUG3: can_make_vassal() Found Blood! [blood] [blood.overdose]")
+ //if (blood.overdosed)
+ // am_addicted = 1 // Blood is present in addiction? That's all we need.
+ // break
+
+ //if (!am_addicted)
+ //message_admins("DEBUG4: can_make_vassal() Abort: No Blood")
+ // return 0
+ // No Mind!
+ if (!target.mind || !target.mind.key)
+ if (display_warning)
+ to_chat(creator, "[target] isn't self-aware enough to be made into a Vassal.")
+ return FALSE
+ // Already MY Vassal
+ var/datum/antagonist/vassal/V = target.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ if (istype(V) && V.master)
+ if (V.master.owner == creator)
+ if (display_warning)
+ to_chat(creator, "[target] is already your loyal Vassal!")
+ else
+ if (display_warning)
+ to_chat(creator, "[target] is the loyal Vassal of another Bloodsucker!")
+ return FALSE
+ // Already Antag or Loyal (Vamp Hunters count as antags)
+ if (target.mind.enslaved_to || AmInvalidAntag(target.mind)) //!VassalCheckAntagValid(target.mind, check_antag_or_loyal)) // HAS_TRAIT(target, TRAIT_MINDSHIELD, "implant") ||
+ if (display_warning)
+ to_chat(creator, "[target] resists the power of your blood to dominate their mind!")
+ return FALSE
+ return TRUE
+
+
+/datum/game_mode/proc/AmValidAntag(datum/mind/M)
+ // No List?
+ if(!islist(M.antag_datums) || M.antag_datums.len == 0)
+ return FALSE
+ // Am I NOT an invalid Antag? NOTE: We already excluded non-antags above. Don't worry about the "No List?" check in AmInvalidIntag()
+ return !AmInvalidAntag(M)
+
+/datum/game_mode/proc/AmInvalidAntag(datum/mind/M)
+ // No List?
+ if(!islist(M.antag_datums) || M.antag_datums.len == 0)
+ return FALSE
+ // Does even ONE antag appear in this mind that isn't in the list? Then FAIL!
+ for(var/datum/antagonist/antag_datum in M.antag_datums)
+ if (!(antag_datum.type in vassal_allowed_antags)) // vassal_allowed_antags is a list stored in the game mode, above.
+ //message_admins("DEBUG VASSAL: Found Invalid: [antag_datum] // [antag_datum.type]")
+ return TRUE
+ //message_admins("DEBUG VASSAL: Valid Antags! (total of [M.antag_datums.len])")
+ // WHEN YOU DELETE THE ABOVE: Remove the 3 second timer on converting the vassal too.
+ return FALSE
+
+/datum/game_mode/proc/make_vassal(mob/living/target, datum/mind/creator)
+ if (!can_make_vassal(target,creator))
+ return FALSE
+ // Make Vassal
+ var/datum/antagonist/vassal/V = new (target.mind)
+ var/datum/antagonist/bloodsucker/B = creator.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ V.master = B
+ target.mind.add_antag_datum(V, V.master.get_team())
+ // Update Bloodsucker Title (we're a daddy now)
+ B.SelectTitle(am_fledgling = FALSE) // Only works if you have no title yet.
+ // Log
+ message_admins("[target] has become a Vassal, and is enslaved to [creator].")
+ log_admin("[target] has become a Vassal, and is enslaved to [creator].")
+ return TRUE
+
+/datum/game_mode/proc/remove_vassal(datum/mind/vassal)
+ vassal.remove_antag_datum(ANTAG_DATUM_VASSAL)
diff --git a/code/game/gamemodes/bloodsucker/hunter.dm b/code/game/gamemodes/bloodsucker/hunter.dm
new file mode 100644
index 0000000000..cec990e9c3
--- /dev/null
+++ b/code/game/gamemodes/bloodsucker/hunter.dm
@@ -0,0 +1,50 @@
+
+
+/*
+// Called from game mode pre_setup()
+/datum/game_mode/proc/assign_monster_hunters(monster_count = 4, guaranteed_hunters = FALSE, list/datum/mind/exclude_from_hunter)
+
+ // Not all game modes GUARANTEE a hunter
+ if (rand(0,2) == 0) // 50% of the time, we get fewer or NO Hunters
+ if (!guaranteed_hunters)
+ return
+ else
+ monster_count /= 2
+
+ var/list/no_hunter_jobs = list("AI","Cyborg")
+
+ // Set Restricted Jobs
+ if(CONFIG_GET(flag/protect_roles_from_antagonist))
+ no_hunter_jobs += list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+
+ if(CONFIG_GET(flag/protect_assistant_from_antagonist))
+ no_hunter_jobs += "Assistant"
+
+ // Find Valid Hunters
+ var/list/datum/mind/hunter_candidates = get_players_for_role(ROLE_MONSTERHUNTER)
+
+ // Assign Hunters (as many as vamps, plus one)
+ for(var/i = 1, i < monster_count, i++) // Start at 1 so we skip Hunters if there's only one sucker.
+ if (!hunter_candidates.len)
+ break
+ // Assign Hunter
+ var/datum/mind/hunter = pick(hunter_candidates)
+ hunter_candidates.Remove(hunter) // Remove Either Way
+ // Already Antag? Skip
+ if (islist(exclude_from_hunter) && (locate(hunter) in exclude_from_hunter)) //if (islist(hunter.antag_datums) && hunter.antag_datums.len)
+ i --
+ continue
+ // NOTE:
+ vamphunters += hunter
+ hunter.restricted_roles = no_hunter_jobs
+ log_game("[hunter.key] (ckey) has been selected as a Hunter.")
+
+// Called from game mode post_setup()
+/datum/game_mode/proc/finalize_monster_hunters(monster_count = 4)
+ var/amEvil = TRUE // First hunter is always an evil boi
+ for(var/datum/mind/hunter in vamphunters)
+ var/datum/antagonist/vamphunter/A = new (hunter)
+ A.bad_dude = amEvil
+ hunter.add_antag_datum(A)
+ amEvil = FALSE // Every other hunter is just a boring greytider
+*/
diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm
index 51a34f4194..a76e8234ba 100644
--- a/code/game/gamemodes/clock_cult/clock_cult.dm
+++ b/code/game/gamemodes/clock_cult/clock_cult.dm
@@ -167,6 +167,7 @@ Credit where due:
number_players -= 30
starter_servants += round(number_players / 10)
starter_servants = min(starter_servants, 8) //max 8 servants (that sould only happen with a ton of players)
+ GLOB.clockwork_vitality += 50 * starter_servants //some starter Vitality to help recover from initial fuck ups
while(starter_servants)
var/datum/mind/servant = antag_pick(antag_candidates)
servants_to_serve += servant
@@ -338,10 +339,6 @@ Credit where due:
CLOCKCULTCHANGELOG\
\
\
- Zelus oil: A new reagent. It can be used to heal the faithful to Ratvar, or kill heretics and moreso stun blood cultists,\
- or splashed onto metal sheets to make brass. This chemical can be found in minimal quantities by grinding brass sheets.\
- Brass Flasks:Intended to store Zelus Oil in, but can also be used as fragile single use throwing weapons in a pinch! \
- These are crafted with a single sheet of brass and fit in the Clockwork Cuirass' suit storage.\
Good luck!"
/obj/item/paper/servant_primer/Initialize()
@@ -352,7 +349,7 @@ Credit where due:
changelog_contents += "[entry]"
info = replacetext(info, "CLOCKCULTCHANGELOG", changelog_contents)
-/obj/item/paper/servant_primer/examine(mob/user)
- if(!is_servant_of_ratvar(user) && !isobserver(user))
- to_chat(user, "You can't understand any of the words on [src].")
- ..()
+/obj/item/paper/servant_primer/oui_getcontent(mob/target)
+ if(!is_servant_of_ratvar(target) && !isobserver(target))
+ return "[name][stars(info)]
[stamps]"
+ return ..()
diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm
index 66de72bad2..49a336e16a 100644
--- a/code/game/gamemodes/clown_ops/clown_ops.dm
+++ b/code/game/gamemodes/clown_ops/clown_ops.dm
@@ -53,7 +53,7 @@
/datum/outfit/syndicate/clownop/no_crystals
tc = 0
-/datum/outfit/syndicate/clownop/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/syndicate/clownop/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
..()
if(visualsOnly)
return
diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm
index 79890e4cdd..9b52ddda1e 100644
--- a/code/game/gamemodes/clown_ops/clown_weapons.dm
+++ b/code/game/gamemodes/clown_ops/clown_weapons.dm
@@ -138,7 +138,7 @@
var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery)
slipper.signal_enabled = active
-/obj/item/shield/energy/bananium/throw_at(atom/target, range, speed, mob/thrower, spin=1)
+/obj/item/shield/energy/bananium/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
if(active)
if(iscarbon(thrower))
var/mob/living/carbon/C = thrower
@@ -265,6 +265,7 @@
armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
max_temperature = 35000
operation_req_access = list(ACCESS_SYNDICATE)
+ internals_req_access = list(ACCESS_SYNDICATE)
wreckage = /obj/structure/mecha_wreckage/honker/dark
max_equip = 3
spawn_tracked = FALSE
diff --git a/code/game/gamemodes/devil/devil agent/devil_agent.dm b/code/game/gamemodes/devil/devil agent/devil_agent.dm
index ec09bfc739..789cff5c8f 100644
--- a/code/game/gamemodes/devil/devil agent/devil_agent.dm
+++ b/code/game/gamemodes/devil/devil agent/devil_agent.dm
@@ -34,11 +34,12 @@
//If you override this method, have it return the number of objectives added.
if(devil_target_list.len && devil_target_list[devil]) // Is a double agent
var/datum/mind/target_mind = devil_target_list[devil]
+ var/datum/antagonist/devil/D = target_mind.has_antag_datum(/datum/antagonist/devil)
var/datum/objective/devil/outsell/outsellobjective = new
outsellobjective.owner = devil
outsellobjective.target = target_mind
outsellobjective.update_explanation_text()
- devil.objectives += outsellobjective
+ D.objectives += outsellobjective
return 1
return 0
diff --git a/code/game/gamemodes/devil/game_mode.dm b/code/game/gamemodes/devil/game_mode.dm
index 2255766e74..208a24f3e5 100644
--- a/code/game/gamemodes/devil/game_mode.dm
+++ b/code/game/gamemodes/devil/game_mode.dm
@@ -4,11 +4,12 @@
/datum/game_mode/proc/add_devil_objectives(datum/mind/devil_mind, quantity)
var/list/validtypes = list(/datum/objective/devil/soulquantity, /datum/objective/devil/soulquality, /datum/objective/devil/sintouch, /datum/objective/devil/buy_target)
+ var/datum/antagonist/devil/D = devil_mind.has_antag_datum(/datum/antagonist/devil)
for(var/i = 1 to quantity)
var/type = pick(validtypes)
var/datum/objective/devil/objective = new type(null)
objective.owner = devil_mind
- devil_mind.objectives += objective
+ D.objectives += objective
if(!istype(objective, /datum/objective/devil/buy_target))
validtypes -= type //prevent duplicate objectives, EXCEPT for buy_target.
else
diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm
index ca009f76ad..075184046d 100644
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ b/code/game/gamemodes/dynamic/dynamic.dm
@@ -11,15 +11,26 @@
#define RULESET_STOP_PROCESSING 1
// -- Injection delays
-GLOBAL_VAR_INIT(dynamic_latejoin_delay_min, (5 MINUTES))
-GLOBAL_VAR_INIT(dynamic_latejoin_delay_max, (25 MINUTES))
+GLOBAL_VAR_INIT(dynamic_latejoin_delay_min, (10 MINUTES))
+GLOBAL_VAR_INIT(dynamic_latejoin_delay_max, (30 MINUTES))
-GLOBAL_VAR_INIT(dynamic_midround_delay_min, (15 MINUTES))
-GLOBAL_VAR_INIT(dynamic_midround_delay_max, (35 MINUTES))
+GLOBAL_VAR_INIT(dynamic_midround_delay_min, (10 MINUTES))
+GLOBAL_VAR_INIT(dynamic_midround_delay_max, (30 MINUTES))
+
+GLOBAL_VAR_INIT(dynamic_event_delay_min, (10 MINUTES))
+GLOBAL_VAR_INIT(dynamic_event_delay_max, (30 MINUTES)) // this is on top of regular events, so can't be quite as often
+
+
+// -- Roundstart injection delays
+GLOBAL_VAR_INIT(dynamic_first_latejoin_delay_min, (2 MINUTES))
+GLOBAL_VAR_INIT(dynamic_first_latejoin_delay_max, (30 MINUTES))
+
+GLOBAL_VAR_INIT(dynamic_first_midround_delay_min, (20 MINUTES))
+GLOBAL_VAR_INIT(dynamic_first_midround_delay_max, (30 MINUTES))
// Are HIGHLANDER_RULESETs allowed to stack?
GLOBAL_VAR_INIT(dynamic_no_stacking, TRUE)
-// A number between -5 and +5.
+// A number between -5 and +5.
// A negative value will give a more peaceful round and
// a positive value will give a round with higher threat.
GLOBAL_VAR_INIT(dynamic_curve_centre, 0)
@@ -27,7 +38,7 @@ GLOBAL_VAR_INIT(dynamic_curve_centre, 0)
// Higher value will favour extreme rounds and
// lower value rounds closer to the average.
GLOBAL_VAR_INIT(dynamic_curve_width, 1.8)
-// If enabled only picks a single starting rule and executes only autotraitor midround ruleset.
+// If enabled only picks a single starting rule and executes only autotraitor midround ruleset.
GLOBAL_VAR_INIT(dynamic_classic_secret, FALSE)
// How many roundstart players required for high population override to take effect.
GLOBAL_VAR_INIT(dynamic_high_pop_limit, 55)
@@ -38,7 +49,7 @@ GLOBAL_VAR_INIT(dynamic_forced_extended, FALSE)
GLOBAL_VAR_INIT(dynamic_stacking_limit, 90)
// List of forced roundstart rulesets.
GLOBAL_LIST_EMPTY(dynamic_forced_roundstart_ruleset)
-// Forced threat level, setting this to zero or higher forces the roundstart threat to the value.
+// Forced threat level, setting this to zero or higher forces the roundstart threat to the value.
GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
/datum/game_mode/dynamic
@@ -49,20 +60,28 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
announce_text = "Dynamic mode!" // This needs to be changed maybe
reroll_friendly = FALSE;
-
+
// Threat logging vars
/// The "threat cap", threat shouldn't normally go above this and is used in ruleset calculations
- var/threat_level = 0
+ var/threat_level = 0
/// Set at the beginning of the round. Spent by the mode to "purchase" rules.
var/threat = 0
+ /// Starting threat level, for things that increase it but can bring it back down.
+ var/initial_threat_level = 0
+ /// Things that cause a rolling threat adjustment to be displayed at roundend.
+ var/list/threat_tallies = list()
/// Running information about the threat. Can store text or datum entries.
var/list/threat_log = list()
+ /// As above, but with info such as refunds.
+ var/list/threat_log_verbose = list()
/// List of roundstart rules used for selecting the rules.
var/list/roundstart_rules = list()
/// List of latejoin rules used for selecting the rules.
var/list/latejoin_rules = list()
/// List of midround rules used for selecting the rules.
var/list/midround_rules = list()
+ /// List of events used for reducing threat without causing antag injection (necessarily).
+ var/list/events = list()
/** # Pop range per requirement.
* If the value is five the range is:
* 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-54, 45+
@@ -71,15 +90,21 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
* If it is seven the range is:
* 0-6, 7-13, 14-20, 21-27, 28-34, 35-41, 42-48, 49-55, 56-62, 63+
*/
- var/pop_per_requirement = 6
- /// The requirement used for checking if a second rule should be selected.
+ var/pop_per_requirement = 9
+ /// The requirement used for checking if a second rule should be selected. Index based on pop_per_requirement.
var/list/second_rule_req = list(100, 100, 80, 70, 60, 50, 30, 20, 10, 0)
- /// The requirement used for checking if a third rule should be selected.
+ /// The probability for a second ruleset with index being every ten threat.
+ var/list/second_rule_prob = list(0,0,60,80,80,80,100,100,100,100)
+ /// The requirement used for checking if a third rule should be selected. Index based on pop_per_requirement.
var/list/third_rule_req = list(100, 100, 100, 90, 80, 70, 60, 50, 40, 30)
- /// Threat requirement for a second ruleset when high pop override is in effect.
+ /// The probability for a third ruleset with index being every ten threat.
+ var/list/third_rule_prob = list(0,0,0,0,60,60,80,90,100,100)
+ /// Threat requirement for a second ruleset when high pop override is in effect.
var/high_pop_second_rule_req = 40
- /// Threat requirement for a third ruleset when high pop override is in effect.
+ /// Threat requirement for a third ruleset when high pop override is in effect.
var/high_pop_third_rule_req = 60
+ /// The amount of additional rulesets waiting to be picked.
+ var/extra_rulesets_amount = 0
/// Number of players who were ready on roundstart.
var/roundstart_pop_ready = 0
/// List of candidates used on roundstart rulesets.
@@ -94,6 +119,8 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
var/latejoin_injection_cooldown = 0
/// When world.time is over this number the mode tries to inject a midround ruleset.
var/midround_injection_cooldown = 0
+ /// When wor.dtime is over this number the mode tries to do an event.
+ var/event_injection_cooldown = 0
/// When TRUE GetInjectionChance returns 100.
var/forced_injection = FALSE
/// Forced ruleset to be executed for the next latejoin.
@@ -106,19 +133,33 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
var/highlander_executed = FALSE
/// If a only ruleset has been executed.
var/only_ruleset_executed = FALSE
+ /// Antags rolled by rules so far, to keep track of and discourage scaling past a certain ratio of crew/antags especially on lowpop.
+ var/antags_rolled = 0
/datum/game_mode/dynamic/New() // i have NO IDEA if this is the proper way to do this.
..()
pop_per_requirement = CONFIG_GET(number/dynamic_pop_per_requirement)
+ second_rule_req = CONFIG_GET(number_list/dynamic_second_rule_requirements)
+ third_rule_req = CONFIG_GET(number_list/dynamic_third_rule_requirements)
+ if(second_rule_req.len<10)
+ second_rule_req = list(101, 101, 101, 101, 100, 90, 80, 70, 60, 50)
+ if(third_rule_req.len<10)
+ third_rule_req = list(101, 101, 101, 101, 101, 100, 90, 80, 70, 60)
+ high_pop_second_rule_req = CONFIG_GET(number/dynamic_second_rule_high_pop_requirement)
+ high_pop_third_rule_req = CONFIG_GET(number/dynamic_third_rule_high_pop_requirement)
GLOB.dynamic_high_pop_limit = CONFIG_GET(number/dynamic_high_pop_limit)
GLOB.dynamic_latejoin_delay_min = CONFIG_GET(number/dynamic_latejoin_delay_min)*600
GLOB.dynamic_latejoin_delay_max = CONFIG_GET(number/dynamic_latejoin_delay_max)*600
GLOB.dynamic_midround_delay_min = CONFIG_GET(number/dynamic_midround_delay_min)*600
GLOB.dynamic_midround_delay_max = CONFIG_GET(number/dynamic_midround_delay_max)*600
+ GLOB.dynamic_first_latejoin_delay_min = CONFIG_GET(number/dynamic_first_latejoin_delay_min)*600
+ GLOB.dynamic_first_latejoin_delay_max = CONFIG_GET(number/dynamic_first_latejoin_delay_max)*600
+ GLOB.dynamic_first_midround_delay_min = CONFIG_GET(number/dynamic_first_midround_delay_min)*600
+ GLOB.dynamic_first_midround_delay_max = CONFIG_GET(number/dynamic_first_midround_delay_max)*600
/datum/game_mode/dynamic/admin_panel()
var/list/dat = list("Game Mode PanelGame Mode Panel
")
- dat += "Dynamic Mode \[VV\]
"
+ dat += "Dynamic Mode \[VV\]\[Refresh\]
"
dat += "Threat Level: [threat_level]
"
dat += "Threat to Spend: [threat] \[Adjust\] \[View Log\]
"
@@ -140,6 +181,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
dat += "
Injection Timers: ([get_injection_chance(TRUE)]% chance)
"
dat += "Latejoin: [(latejoin_injection_cooldown-world.time)>60*10 ? "[round((latejoin_injection_cooldown-world.time)/60/10,0.1)] minutes" : "[(latejoin_injection_cooldown-world.time)] seconds"] \[Now!\]
"
dat += "Midround: [(midround_injection_cooldown-world.time)>60*10 ? "[round((midround_injection_cooldown-world.time)/60/10,0.1)] minutes" : "[(midround_injection_cooldown-world.time)] seconds"] \[Now!\]
"
+ dat += "Event: [(event_injection_cooldown-world.time)>60*10 ? "[round((event_injection_cooldown-world.time)/60/10,0.1)] minutes" : "[(event_injection_cooldown-world.time)] seconds"] \[Now!\]
"
usr << browse(dat.Join(), "window=gamemode_panel;size=500x500")
/datum/game_mode/dynamic/Topic(href, href_list)
@@ -171,11 +213,15 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
midround_injection_cooldown = 0
forced_injection = TRUE
message_admins("[key_name(usr)] forced a midround injection.", 1)
+ else if (href_list["forceevent"])
+ event_injection_cooldown = 0
+ // events always happen anyway
+ message_admins("[key_name(usr)] forced an event.", 1)
else if (href_list["threatlog"])
show_threatlog(usr)
else if (href_list["stacking_limit"])
GLOB.dynamic_stacking_limit = input(usr,"Change the threat limit at which round-endings rulesets will start to stack.", "Change stacking limit", null) as num
-
+
admin_panel() // Refreshes the window
// Checks if there are HIGHLANDER_RULESETs and calls the rule's round_result() proc
@@ -190,33 +236,39 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
return rule.round_result()
return ..()
+/datum/game_mode/dynamic/generate_report()
+ return "Mysterious signals that demonstrate strange dynamics have been detected in your sector. Watch out for oddities."
+
/datum/game_mode/dynamic/send_intercept()
. = "Central Command Status Summary
"
switch(round(threat_level))
- if(0 to 19)
- update_playercounts()
- if(!current_players[CURRENT_LIVING_ANTAGS].len)
- . += "Peaceful Waypoint
"
- . += "Your station orbits deep within controlled, core-sector systems and serves as a waypoint for routine traffic through Nanotrasen's trade empire. Due to the combination of high security, interstellar traffic, and low strategic value, it makes any direct threat of violence unlikely. Your primary enemies will be incompetence and bored crewmen: try to organize team-building events to keep staffers interested and productive."
- else
+ if(0 to 20)
+ . += "Peaceful Waypoint
"
+ . += "Your station orbits deep within controlled, core-sector systems and serves as a waypoint for routine traffic through Nanotrasen's trade empire. Due to the combination of high security, interstellar traffic, and low strategic value, it makes any direct threat of violence unlikely. Your primary enemies will be incompetence and bored crewmen: try to organize team-building events to keep staffers interested and productive. However, even deep in our territory there may be subversive elements, especially for such a high-value target as your station. Keep an eye out, but don't expect much trouble."
+ set_security_level(SEC_LEVEL_GREEN)
+ if(21 to 79)
+ var/perc_green = 100-round(100*((threat_level-21)/(79-21)))
+ if(prob(perc_green))
. += "Core Territory
"
. += "Your station orbits within reliably mundane, secure space. Although Nanotrasen has a firm grip on security in your region, the valuable resources and strategic position aboard your station make it a potential target for infiltrations. Monitor crew for non-loyal behavior, but expect a relatively tame shift free of large-scale destruction. We expect great things from your station."
- if(20 to 39)
- . += "Anomalous Exogeology
"
- . += "Although your station lies within what is generally considered Nanotrasen-controlled space, the course of its orbit has caused it to cross unusually close to exogeological features with anomalous readings. Although these features offer opportunities for our research department, it is known that these little understood readings are often correlated with increased activity from competing interstellar organizations and individuals, among them the Wizard Federation and Cult of the Geometer of Blood - all known competitors for Anomaly Type B sites. Exercise elevated caution."
- if(40 to 65)
- . += "Contested System
"
- . += "Your station's orbit passes along the edge of Nanotrasen's sphere of influence. While subversive elements remain the most likely threat against your station, hostile organizations are bolder here, where our grip is weaker. Exercise increased caution against elite Syndicate strike forces, or Executives forbid, some kind of ill-conceived unionizing attempt."
- if(66 to 79)
- . += "Uncharted Space
"
- . += "Congratulations and thank you for participating in the NT 'Frontier' space program! Your station is actively orbiting a high value system far from the nearest support stations. Little is known about your region of space, and the opportunity to encounter the unknown invites greater glory. You are encouraged to elevate security as necessary to protect Nanotrasen assets."
+ set_security_level(SEC_LEVEL_GREEN)
+ else if(prob(perc_green))
+ . += "Contested System
"
+ . += "Your station's orbit passes along the edge of Nanotrasen's sphere of influence. While subversive elements remain the most likely threat against your station, hostile organizations are bolder here, where our grip is weaker. Exercise increased caution against elite Syndicate strike forces, or Executives forbid, some kind of ill-conceived unionizing attempt."
+ set_security_level(SEC_LEVEL_BLUE)
+ else
+ . += "Uncharted Space
"
+ . += "Congratulations and thank you for participating in the NT 'Frontier' space program! Your station is actively orbiting a high value system far from the nearest support stations. Little is known about your region of space, and the opportunity to encounter the unknown invites greater glory. You are encouraged to elevate security as necessary to protect Nanotrasen assets."
+ set_security_level(SEC_LEVEL_BLUE)
if(80 to 99)
. += "Black Orbit
"
. += "As part of a mandatory security protocol, we are required to inform you that as a result of your orbital pattern directly behind an astrological body (oriented from our nearest observatory), your station will be under decreased monitoring and support. It is anticipated that your extreme location and decreased surveillance could pose security risks. Avoid unnecessary risks and attempt to keep your station in one piece."
+ set_security_level(SEC_LEVEL_AMBER)
if(100)
. += "Impending Doom
"
. += "Your station is somehow in the middle of hostile territory, in clear view of any enemy of the corporation. Your likelihood to survive is low, and station destruction is expected and almost inevitable. Secure any sensitive material and neutralize any enemy you will come across. It is important that you at least try to maintain the station.
"
. += "Good luck."
+ set_security_level(SEC_LEVEL_RED)
if(station_goals.len)
. += "
Special Orders for [station_name()]:"
@@ -225,9 +277,10 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
. += G.get_report()
print_command_report(., "Central Command Status Summary", announce=FALSE)
- priority_announce("A summary has been copied and printed to all communications consoles.", "Security level elevated.", "intercept")
- if(GLOB.security_level < SEC_LEVEL_BLUE)
- set_security_level(SEC_LEVEL_BLUE)
+ if(GLOB.security_level >= SEC_LEVEL_BLUE)
+ priority_announce("A summary has been copied and printed to all communications consoles.", "Security level elevated.", "intercept")
+ else
+ priority_announce("Thanks to the tireless efforts of our security and intelligence divisions, there are currently no likely threats to [station_name()]. Have a secure shift!", "Security Report", "commandreport")
// Yes, this is copy pasted from game_mode
/datum/game_mode/dynamic/check_finished(force_ending)
@@ -245,6 +298,12 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
if(rule.flags & HIGHLANDER_RULESET)
return rule.check_finished()
+/datum/game_mode/dynamic/proc/log_threat(var/log_str,var/verbose = FALSE)
+ threat_log_verbose += ("[worldtime2text()]: "+log_str)
+ SSblackbox.record_feedback("tally","dynamic_threat_log",1,log_str)
+ if(!verbose)
+ threat_log += log_str
+
/datum/game_mode/dynamic/proc/show_threatlog(mob/admin)
if(!SSticker.HasRoundStarted())
alert("The round hasn't started yet!")
@@ -253,9 +312,9 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
if(!check_rights(R_ADMIN))
return
- var/list/out = list("Threat LogThreat Log
Starting Threat: [threat_level]
")
+ var/list/out = list("Threat LogThreat Log
Starting Threat: [initial_threat_level]
")
- for(var/entry in threat_log)
+ for(var/entry in threat_log_verbose)
if(istext(entry))
out += "[entry]
"
@@ -271,17 +330,12 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
peaceful_percentage = round(LORENTZ_CUMULATIVE_DISTRIBUTION(relative_threat, GLOB.dynamic_curve_centre, GLOB.dynamic_curve_width), 0.01)*100
threat = threat_level
+ SSblackbox.record_feedback("tally","dynamic_threat",threat_level,"Initial threat level")
+ SSblackbox.record_feedback("tally","dynamic_threat",GLOB.dynamic_curve_centre,"Curve centre")
+ SSblackbox.record_feedback("tally","dynamic_threat",GLOB.dynamic_curve_width,"Curve width")
+ SSblackbox.record_feedback("tally","dynamic_threat",peaceful_percentage,"Percent of same-vote rounds that are more peaceful")
/datum/game_mode/dynamic/can_start()
- /* Disabled for now, had some changes that need to be tested and this might interfere with that.
- if(GLOB.dynamic_curve_centre == 0)
- // 10 is when the centre starts to decrease
- // 6 is just 1 + 5 (from the maximum value and the one decreased)
- // 1 just makes the curve look better, I don't know.
- // Limited between 1 and 5 then inverted and rounded
- // With this you get a centre curve that stays at -5 until 10 then first rapidly decreases but slows down at the end
- GLOB.dynamic_curve_centre = round(-CLAMP((10*6/GLOB.player_list.len)-1, 0, 5), 0.5)
- */
message_admins("Dynamic mode parameters for the round:")
message_admins("Centre is [GLOB.dynamic_curve_centre], Width is [GLOB.dynamic_curve_width], Forced extended is [GLOB.dynamic_forced_extended ? "Enabled" : "Disabled"], No stacking is [GLOB.dynamic_no_stacking ? "Enabled" : "Disabled"].")
message_admins("Stacking limit is [GLOB.dynamic_stacking_limit], Classic secret is [GLOB.dynamic_classic_secret ? "Enabled" : "Disabled"], High population limit is [GLOB.dynamic_high_pop_limit].")
@@ -291,15 +345,21 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
if(GLOB.dynamic_forced_threat_level >= 0)
threat_level = round(GLOB.dynamic_forced_threat_level, 0.1)
threat = threat_level
+ SSblackbox.record_feedback("tally","dynamic_threat",threat_level,"Threat level (forced by admins)")
else
generate_threat()
- var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_latejoin_delay_max + GLOB.dynamic_latejoin_delay_min)
- latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) + world.time
+ var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_latejoin_delay_max + GLOB.dynamic_first_latejoin_delay_min)
+ latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_first_latejoin_delay_min, GLOB.dynamic_first_latejoin_delay_max)) + world.time
- var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_midround_delay_max + GLOB.dynamic_midround_delay_min)
- midround_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max)) + world.time
+ var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_midround_delay_min + GLOB.dynamic_first_midround_delay_max)
+ midround_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_first_midround_delay_min, GLOB.dynamic_first_midround_delay_max)) + world.time
+
+ var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min)
+ event_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time)
+
log_game("DYNAMIC: Dynamic Mode initialized with a Threat Level of... [threat_level]!")
+ initial_threat_level = threat_level
return TRUE
/datum/game_mode/dynamic/pre_setup()
@@ -316,24 +376,31 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
if ("Midround")
if (ruleset.weight)
midround_rules += ruleset
+ if("Event")
+ if(ruleset.weight)
+ events += ruleset
for(var/mob/dead/new_player/player in GLOB.player_list)
if(player.ready == PLAYER_READY_TO_PLAY && player.mind)
roundstart_pop_ready++
candidates.Add(player)
log_game("DYNAMIC: Listing [roundstart_rules.len] round start rulesets, and [candidates.len] players ready.")
if (candidates.len <= 0)
+ log_game("DYNAMIC: [candidates.len] candidates.")
return TRUE
if (roundstart_rules.len <= 0)
+ log_game("DYNAMIC: [roundstart_rules.len] rules.")
return TRUE
-
+ SSblackbox.record_feedback("tally","dynamic",roundstart_rules.len,"Roundstart rules considered")
+ SSblackbox.record_feedback("tally","dynamic",roundstart_rules.len,"Players readied up")
if(GLOB.dynamic_forced_roundstart_ruleset.len > 0)
rigged_roundstart()
- else
+ else
roundstart()
var/starting_rulesets = ""
for (var/datum/dynamic_ruleset/roundstart/DR in executed_rules)
starting_rulesets += "[DR.name], "
+ log_game("DYNAMIC: Picked the following roundstart rules: [starting_rulesets]")
candidates.Cut()
return TRUE
@@ -341,9 +408,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
update_playercounts()
for(var/datum/dynamic_ruleset/roundstart/rule in executed_rules)
- rule.candidates.Cut() // The rule should not use candidates at this point as they all are null.
- if(!rule.execute())
- stack_trace("The starting rule \"[rule.name]\" failed to execute.")
+ addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/execute_roundstart_rule, rule), rule.delay)
..()
/// A simple roundstart proc used when dynamic_forced_roundstart_ruleset has rules in it.
@@ -354,6 +419,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
message_admins("Drafting players for forced ruleset [rule.name].")
log_game("DYNAMIC: Drafting players for forced ruleset [rule.name].")
rule.mode = src
+ rule.acceptable(roundstart_pop_ready, threat_level) // Assigns some vars in the modes, running it here for consistency
rule.candidates = candidates.Copy()
rule.trim_candidates()
if (rule.ready(TRUE))
@@ -370,9 +436,11 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
rule.trim_candidates()
if (rule.ready() && rule.candidates.len > 0)
drafted_rules[rule] = rule.weight
-
+ if(!drafted_rules.len)
+ message_admins("Not enough threat level for roundstart antags!")
+ log_game("DYNAMIC: Not enough threat level for roundstart antags!")
var/indice_pop = min(10,round(roundstart_pop_ready/pop_per_requirement)+1)
- var/extra_rulesets_amount = 0
+ extra_rulesets_amount = 0
if (GLOB.dynamic_classic_secret)
extra_rulesets_amount = 0
else
@@ -384,23 +452,28 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
if (threat_level > high_pop_third_rule_req)
extra_rulesets_amount++
else
- if (threat_level >= second_rule_req[indice_pop])
+ var/threat_indice = min(10, max(round(threat_level ? threat_level/10 : 1), 1)) // 0-9 threat = 1, 10-19 threat = 2 ...
+ if (threat_level >= second_rule_req[indice_pop] && prob(second_rule_prob[threat_indice]))
extra_rulesets_amount++
- if (threat_level >= third_rule_req[indice_pop])
+ if (threat_level >= third_rule_req[indice_pop] && prob(third_rule_prob[threat_indice]))
extra_rulesets_amount++
+ log_game("DYNAMIC: Trying to roll [extra_rulesets_amount + 1] roundstart rulesets. Picking from [drafted_rules.len] eligible rulesets.")
if (drafted_rules.len > 0 && picking_roundstart_rule(drafted_rules))
- if (extra_rulesets_amount > 0) // We've got enough population and threat for a second rulestart rule
+ log_game("DYNAMIC: First ruleset picked successfully. [extra_rulesets_amount] remaining.")
+ while(extra_rulesets_amount > 0 && drafted_rules.len > 0) // We had enough threat for one or two more rulesets
for (var/datum/dynamic_ruleset/roundstart/rule in drafted_rules)
if (rule.cost > threat)
drafted_rules -= rule
- if (drafted_rules.len > 0 && picking_roundstart_rule(drafted_rules))
- if (extra_rulesets_amount > 1) // We've got enough population and threat for a third rulestart rule
- for (var/datum/dynamic_ruleset/roundstart/rule in drafted_rules)
- if (rule.cost > threat)
- drafted_rules -= rule
- picking_roundstart_rule(drafted_rules)
+ if(drafted_rules.len)
+ picking_roundstart_rule(drafted_rules)
+ extra_rulesets_amount--
+ log_game("DYNAMIC: Additional ruleset picked successfully, now [executed_rules.len] picked. [extra_rulesets_amount] remaining.")
else
+
+ if(threat >= 50)
+ message_admins("DYNAMIC: Picking first roundstart ruleset failed. You should report this.")
+ log_game("DYNAMIC: Picking first roundstart ruleset failed. drafted_rules.len = [drafted_rules.len] and threat = [threat]/[threat_level]")
return FALSE
return TRUE
@@ -408,68 +481,75 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
/datum/game_mode/dynamic/proc/picking_roundstart_rule(list/drafted_rules = list(), forced = FALSE)
var/datum/dynamic_ruleset/roundstart/starting_rule = pickweight(drafted_rules)
if(!starting_rule)
+ log_game("DYNAMIC: Couldn't pick a starting ruleset. No rulesets available")
return FALSE
if(!forced)
if(only_ruleset_executed)
return FALSE
// Check if a blocking ruleset has been executed.
- else if(check_blocking(starting_rule.blocking_rules, executed_rules))
+ else if(check_blocking(starting_rule.blocking_rules, executed_rules)) // Should already be filtered out, but making sure. Check filtering at end of proc if reported.
drafted_rules -= starting_rule
if(drafted_rules.len <= 0)
+ log_game("DYNAMIC: Picking [starting_rule.name] failed due to blocking_rules and no more rulesets available. Report this.")
return FALSE
starting_rule = pickweight(drafted_rules)
// Check if the ruleset is highlander and if a highlander ruleset has been executed
- else if(starting_rule.flags & HIGHLANDER_RULESET)
- if(threat < GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
+ else if(starting_rule.flags & HIGHLANDER_RULESET) // Should already be filtered out, but making sure. Check filtering at end of proc if reported.
+ if(threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
if(highlander_executed)
drafted_rules -= starting_rule
if(drafted_rules.len <= 0)
+ log_game("DYNAMIC: Picking [starting_rule.name] failed due to no highlander stacking and no more rulesets available. Report this.")
return FALSE
starting_rule = pickweight(drafted_rules)
+ // With low pop and high threat there might be rulesets that get executed with no valid candidates.
+ else if(!starting_rule.ready()) // Should already be filtered out, but making sure. Check filtering at end of proc if reported.
+ drafted_rules -= starting_rule
+ if(drafted_rules.len <= 0)
+ log_game("DYNAMIC: Picking [starting_rule.name] failed because there were not enough candidates and no more rulesets available. Report this.")
+ return FALSE
+ starting_rule = pickweight(drafted_rules)
- log_game("DYNAMIC: Picking a [istype(starting_rule, /datum/dynamic_ruleset/roundstart/delayed/) ? " delayed " : ""] ruleset [starting_rule.name]")
+ log_game("DYNAMIC: Picked a ruleset: [starting_rule.name]")
roundstart_rules -= starting_rule
drafted_rules -= starting_rule
- if (istype(starting_rule, /datum/dynamic_ruleset/roundstart/delayed/))
- var/datum/dynamic_ruleset/roundstart/delayed/rule = starting_rule
- addtimer(CALLBACK(src, .proc/execute_delayed, rule), rule.delay)
-
starting_rule.trim_candidates()
+ var/added_threat = starting_rule.scale_up(extra_rulesets_amount, threat)
if (starting_rule.pre_execute())
- spend_threat(starting_rule.cost)
- threat_log += "[worldtime2text()]: Roundstart [starting_rule.name] spent [starting_rule.cost]"
+ spend_threat(starting_rule.cost + added_threat)
+ log_threat("[starting_rule.ruletype] - [starting_rule.name] -[starting_rule.cost + starting_rule.scaled_times * starting_rule.scaling_cost] threat", verbose = TRUE)
if(starting_rule.flags & HIGHLANDER_RULESET)
highlander_executed = TRUE
else if(starting_rule.flags & ONLY_RULESET)
only_ruleset_executed = TRUE
executed_rules += starting_rule
- if (starting_rule.persistent)
- current_rules += starting_rule
- for(var/mob/M in starting_rule.assigned)
- for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules)
- if (!rule.ready())
- drafted_rules -= rule // And removing rules that are no longer elligible
+ for(var/datum/dynamic_ruleset/roundstart/rule in drafted_rules)
+ if(check_blocking(rule.blocking_rules, executed_rules))
+ drafted_rules -= rule
+ if(highlander_executed && rule.flags & HIGHLANDER_RULESET)
+ drafted_rules -= rule
+ if(!rule.ready())
+ drafted_rules -= rule // And removing rules that are no longer eligible
return TRUE
else
stack_trace("The starting rule \"[starting_rule.name]\" failed to pre_execute.")
return FALSE
-/// Executes delayed roundstart rules and has a hack in it.
-/datum/game_mode/dynamic/proc/execute_delayed(datum/dynamic_ruleset/roundstart/delayed/rule)
- update_playercounts()
- rule.candidates = current_players[CURRENT_LIVING_PLAYERS].Copy()
- rule.trim_candidates()
+/// Mainly here to facilitate delayed rulesets. All roundstart rulesets are executed with a timered callback to this proc.
+/datum/game_mode/dynamic/proc/execute_roundstart_rule(sent_rule)
+ var/datum/dynamic_ruleset/rule = sent_rule
if(rule.execute())
- executed_rules += rule
- if (rule.persistent)
+ if(rule.persistent)
current_rules += rule
+ SSblackbox.record_feedback("associative","dynamic_rulesets",1,rule.get_blackbox_info())
return TRUE
- else
- stack_trace("The delayed roundstart rule \"[rule.name]\" failed to execute.")
- return FALSE
+ rule.clean_up() // Refund threat, delete teams and so on.
+ executed_rules -= rule
+ stack_trace("The starting rule \"[rule.name]\" failed to execute.")
+ return FALSE
/// Picks a random midround OR latejoin rule from the list given as an argument and executes it.
/// Also this could be named better.
@@ -477,7 +557,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
var/datum/dynamic_ruleset/rule = pickweight(drafted_rules)
if(!rule)
return FALSE
-
+
if(!forced)
if(only_ruleset_executed)
return FALSE
@@ -489,39 +569,22 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
rule = pickweight(drafted_rules)
// Check if the ruleset is highlander and if a highlander ruleset has been executed
else if(rule.flags & HIGHLANDER_RULESET)
- if(threat < GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
+ if(threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
if(highlander_executed)
drafted_rules -= rule
if(drafted_rules.len <= 0)
return FALSE
rule = pickweight(drafted_rules)
-
+
if(!rule.repeatable)
if(rule.ruletype == "Latejoin")
latejoin_rules = remove_from_list(latejoin_rules, rule.type)
- else if(rule.type == "Midround")
+ else if(rule.ruletype == "Midround")
midround_rules = remove_from_list(midround_rules, rule.type)
-
- if (rule.execute())
- log_game("DYNAMIC: Injected a [rule.ruletype == "latejoin" ? "latejoin" : "midround"] ruleset [rule.name].")
- spend_threat(rule.cost)
- threat_log += "[worldtime2text()]: [rule.ruletype] [rule.name] spent [rule.cost]"
- if(rule.flags & HIGHLANDER_RULESET)
- highlander_executed = TRUE
- else if(rule.flags & ONLY_RULESET)
- only_ruleset_executed = TRUE
- if(rule.ruletype == "Latejoin")
- var/mob/M = pick(rule.candidates)
- message_admins("[key_name(M)] joined the station, and was selected by the [rule.name] ruleset.")
- log_game("DYNAMIC: [key_name(M)] joined the station, and was selected by the [rule.name] ruleset.")
- executed_rules += rule
- rule.candidates.Cut()
- if (rule.persistent)
- current_rules += rule
- return TRUE
- else
- stack_trace("The [rule.ruletype] rule \"[rule.name]\" failed to execute.")
- return FALSE
+ else if(rule.ruletype == "Event")
+ events = remove_from_list(events,rule.type)
+ addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/execute_midround_latejoin_rule, rule), rule.delay)
+ return TRUE
/// An experimental proc to allow admins to call rules on the fly or have rules call other rules.
/datum/game_mode/dynamic/proc/picking_specific_rule(ruletype, forced = FALSE)
@@ -532,10 +595,10 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
new_rule = ruletype
else
return FALSE
-
+
if(!new_rule)
return FALSE
-
+
if(!forced)
if(only_ruleset_executed)
return FALSE
@@ -544,29 +607,54 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
return FALSE
// Check if the ruleset is highlander and if a highlander ruleset has been executed
else if(new_rule.flags & HIGHLANDER_RULESET)
- if(threat < GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
+ if(threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
if(highlander_executed)
return FALSE
-
+
update_playercounts()
if ((forced || (new_rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && new_rule.cost <= threat)))
- new_rule.candidates = current_players.Copy()
new_rule.trim_candidates()
if (new_rule.ready(forced))
spend_threat(new_rule.cost)
- threat_log += "[worldtime2text()]: Forced rule [new_rule.name] spent [new_rule.cost]"
+ log_threat("[new_rule.ruletype] - [new_rule.name] -[new_rule.cost] threat", verbose = TRUE)
if (new_rule.execute()) // This should never fail since ready() returned 1
if(new_rule.flags & HIGHLANDER_RULESET)
highlander_executed = TRUE
else if(new_rule.flags & ONLY_RULESET)
only_ruleset_executed = TRUE
log_game("DYNAMIC: Making a call to a specific ruleset...[new_rule.name]!")
+ SSblackbox.record_feedback("associative","dynamic_rulesets",1,new_rule.get_blackbox_info())
executed_rules += new_rule
if (new_rule.persistent)
current_rules += new_rule
return TRUE
else if (forced)
- log_game("DYNAMIC: The ruleset [new_rule.name] couldn't be executed due to lack of elligible players.")
+ log_game("DYNAMIC: The ruleset [new_rule.name] couldn't be executed due to lack of eligible players.")
+ return FALSE
+
+/// Mainly here to facilitate delayed rulesets. All midround/latejoin rulesets are executed with a timered callback to this proc.
+/datum/game_mode/dynamic/proc/execute_midround_latejoin_rule(sent_rule)
+ var/datum/dynamic_ruleset/rule = sent_rule
+ if (rule.execute())
+ log_game("DYNAMIC: Injected a [rule.ruletype == "latejoin" ? "latejoin" : "midround"] ruleset [rule.name].")
+ spend_threat(rule.cost)
+ log_threat("[rule.ruletype] [rule.name] spent [rule.cost]", verbose = TRUE)
+ if(rule.flags & HIGHLANDER_RULESET)
+ highlander_executed = TRUE
+ else if(rule.flags & ONLY_RULESET)
+ only_ruleset_executed = TRUE
+ if(rule.ruletype == "Latejoin")
+ var/mob/M = pick(rule.candidates)
+ message_admins("[key_name(M)] joined the station, and was selected by the [rule.name] ruleset.")
+ log_game("DYNAMIC: [key_name(M)] joined the station, and was selected by the [rule.name] ruleset.")
+ executed_rules += rule
+ SSblackbox.record_feedback("associative","dynamic_rulesets",1,rule.get_blackbox_info())
+ rule.candidates.Cut()
+ if (rule.persistent)
+ current_rules += rule
+ return TRUE
+ rule.clean_up()
+ stack_trace("The [rule.ruletype] rule \"[rule.name]\" failed to execute.")
return FALSE
/datum/game_mode/dynamic/process()
@@ -577,39 +665,68 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
for (var/datum/dynamic_ruleset/rule in current_rules)
if(rule.rule_process() == RULESET_STOP_PROCESSING) // If rule_process() returns 1 (RULESET_STOP_PROCESSING), stop processing.
current_rules -= rule
+ SSblackbox.record_feedback("tally","dynamic",1,"Rulesets finished")
+ SSblackbox.record_feedback("associative","dynamic_rulesets_finished",1,rule.get_blackbox_info())
if (midround_injection_cooldown < world.time)
if (GLOB.dynamic_forced_extended)
return
-
- // Somehow it manages to trigger midround multiple times so this was moved here.
+
+ // Somehow it managed to trigger midround multiple times so this was moved here.
// There is no way this should be able to trigger an injection twice now.
var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_midround_delay_max + GLOB.dynamic_midround_delay_min)
midround_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max)) + world.time)
-
+
// Time to inject some threat into the round
if(EMERGENCY_ESCAPED_OR_ENDGAMED) // Unless the shuttle is gone
return
+ message_admins("DYNAMIC: Checking for midround injection.")
+ log_game("DYNAMIC: Checking for midround injection.")
- log_game("DYNAMIC: Checking state of the round.")
-
update_playercounts()
-
- if (prob(get_injection_chance()))
+ if (get_injection_chance())
+ SSblackbox.record_feedback("tally","dynamic",1,"Attempted midround injections")
+ var/cur_threat_frac = threat/threat_level
var/list/drafted_rules = list()
+ var/antag_num = current_players[CURRENT_LIVING_ANTAGS].len
for (var/datum/dynamic_ruleset/midround/rule in midround_rules)
+ // if there are antags OR the rule is an antag rule, antag_acceptable will be true.
if (rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost)
// Classic secret : only autotraitor/minor roles
if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)))
continue
- rule.candidates = list()
- rule.candidates = current_players.Copy()
rule.trim_candidates()
- if (rule.ready() && rule.candidates.len > 0)
- drafted_rules[rule] = rule.get_weight()
+ if (rule.ready())
+ if(!antag_num)
+ drafted_rules[rule] = round(rule.get_weight() + (rule.cost * cur_threat_frac))
+ else
+ drafted_rules[rule] = rule.get_weight()
+ else if(threat < rule.cost)
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat to spend")
if (drafted_rules.len > 0)
+ SSblackbox.record_feedback("tally","dynamic",1,"Successful midround injections")
picking_midround_latejoin_rule(drafted_rules)
-
+ else
+ midround_injection_cooldown = (midround_injection_cooldown + world.time)/2
+
+ if(event_injection_cooldown < world.time)
+ SSblackbox.record_feedback("tally","dynamic",1,"Attempted event injections")
+ var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min)
+ event_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time)
+ message_admins("DYNAMIC: Doing event injection.")
+ log_game("DYNAMIC: Doing event injection.")
+ update_playercounts()
+ var/list/drafted_rules = list()
+ for(var/datum/dynamic_ruleset/event/rule in events)
+ if(rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost)
+ if(rule.ready())
+ drafted_rules[rule] = rule.get_weight()
+ else if(threat < rule.cost)
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat to spend")
+ if(drafted_rules.len > 0)
+ SSblackbox.record_feedback("tally","dynamic",1,"Successful event injections")
+ picking_midround_latejoin_rule(drafted_rules)
+
/// Updates current_players.
/datum/game_mode/dynamic/proc/update_playercounts()
current_players[CURRENT_LIVING_PLAYERS] = list()
@@ -641,7 +758,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
var/high_pop_factor = (current_players[CURRENT_LIVING_PLAYERS].len >= GLOB.dynamic_high_pop_limit)
var/max_pop_per_antag = max(5,15 - round(threat_level/10) - round(current_players[CURRENT_LIVING_PLAYERS].len/(high_pop_factor ? 10 : 5)))
if (!current_players[CURRENT_LIVING_ANTAGS].len)
- chance += 50 // No antags at all? let's boost those odds!
+ chance += 80 // No antags at all? let's boost those odds!
else
var/current_pop_per_antag = current_players[CURRENT_LIVING_PLAYERS].len / current_players[CURRENT_LIVING_ANTAGS].len
if (current_pop_per_antag > max_pop_per_antag)
@@ -698,39 +815,47 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
forced_latejoin_rule = null
else if (latejoin_injection_cooldown < world.time && prob(get_injection_chance()))
+ SSblackbox.record_feedback("tally","dynamic",1,"Attempted latejoin injections")
var/list/drafted_rules = list()
for (var/datum/dynamic_ruleset/latejoin/rule in latejoin_rules)
if (rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost)
// Classic secret : only autotraitor/minor roles
if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)))
continue
- // No stacking : only one round-enter, unless > stacking_limit threat.
- if (threat < GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
+ // No stacking : only one round-ender, unless threat level > stacking_limit.
+ if (threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
if(rule.flags & HIGHLANDER_RULESET && highlander_executed)
continue
-
+
rule.candidates = list(newPlayer)
rule.trim_candidates()
if (rule.ready())
drafted_rules[rule] = rule.get_weight()
if (drafted_rules.len > 0 && picking_midround_latejoin_rule(drafted_rules))
+ SSblackbox.record_feedback("tally","dynamic",1,"Successful latejoin injections")
var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_latejoin_delay_max + GLOB.dynamic_latejoin_delay_min)
latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) + world.time
/// Refund threat, but no more than threat_level.
/datum/game_mode/dynamic/proc/refund_threat(regain)
threat = min(threat_level,threat+regain)
+ SSblackbox.record_feedback("tally","dynamic_threat",regain,"Refunded threat")
+ log_threat("[regain] refunded. Threat is now [threat].", verbose = TRUE)
/// Generate threat and increase the threat_level if it goes beyond, capped at 100
/datum/game_mode/dynamic/proc/create_threat(gain)
threat = min(100, threat+gain)
if(threat > threat_level)
threat_level = threat
+ SSblackbox.record_feedback("tally","dynamic_threat",gain,"Created threat")
+ log_threat("[gain] created. Threat is now [threat] and threat level is now [threat_level].", verbose = TRUE)
/// Expend threat, can't fall under 0.
/datum/game_mode/dynamic/proc/spend_threat(cost)
threat = max(threat-cost,0)
+ SSblackbox.record_feedback("tally","dynamic_threat",cost,"Threat spent")
+ log_threat("[cost] spent. Threat is now [threat].", verbose = TRUE)
/// Turns the value generated by lorentz distribution to threat value between 0 and 100.
/datum/game_mode/dynamic/proc/lorentz_to_threat(x)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/game/gamemodes/dynamic/dynamic_rulesets.dm
index 011b6ec251..7f6ea088a1 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets.dm
@@ -1,22 +1,28 @@
+#define EXTRA_RULESET_PENALTY 20 // Changes how likely a gamemode is to scale based on how many other roundstart rulesets are waiting to be rolled.
+#define POP_SCALING_PENALTY 50 // Discourages scaling up rulesets if ratio of antags to crew is high.
+
+#define REVOLUTION_VICTORY 1
+#define STATION_VICTORY 2
+
/datum/dynamic_ruleset
/// For admin logging and round end screen.
var/name = ""
/// For admin logging and round end screen, do not change this unless making a new rule type.
- var/ruletype = ""
+ var/ruletype = ""
/// For config purposes, similar to config_tag for secret game modes.
var/config_tag = null
/// If set to TRUE, the rule won't be discarded after being executed, and dynamic will call rule_process() every time it ticks.
- var/persistent = FALSE
+ var/persistent = FALSE
/// If set to TRUE, dynamic mode will be able to draft this ruleset again later on. (doesn't apply for roundstart rules)
- var/repeatable = FALSE
+ var/repeatable = FALSE
/// If set higher than 0 decreases weight by itself causing the ruleset to appear less often the more it is repeated.
- var/repeatable_weight_decrease = 2
+ var/repeatable_weight_decrease = 2
/// List of players that are being drafted for this rule
- var/list/mob/candidates = list()
+ var/list/mob/candidates = list()
/// List of players that were selected for this rule
- var/list/datum/mind/assigned = list()
+ var/list/datum/mind/assigned = list()
/// Preferences flag such as ROLE_WIZARD that need to be turned on for players to be antag
- var/antag_flag = null
+ var/antag_flag = null
/// The antagonist datum that is assigned to the mobs mind on ruleset execution.
var/datum/antagonist/antag_datum = null
/// The required minimum account age for this ruleset.
@@ -24,19 +30,25 @@
/// If set, and config flag protect_roles_from_antagonist is false, then the rule will not pick players from these roles.
var/list/protected_roles = list()
/// If set, rule will deny candidates from those roles always.
- var/list/restricted_roles = list()
+ var/list/restricted_roles = list()
/// If set, rule will only accept candidates from those roles, IMPORTANT: DOES NOT WORK ON ROUNDSTART RULESETS.
- var/list/exclusive_roles = list()
+ var/list/exclusive_roles = list()
/// If set, there needs to be a certain amount of players doing those roles (among the players who won't be drafted) for the rule to be drafted IMPORTANT: DOES NOT WORK ON ROUNDSTART RULESETS.
- var/list/enemy_roles = list()
+ var/list/enemy_roles = list()
/// If enemy_roles was set, this is the amount of enemy job workers needed per threat_level range (0-10,10-20,etc) IMPORTANT: DOES NOT WORK ON ROUNDSTART RULESETS.
- var/required_enemies = list(1,1,0,0,0,0,0,0,0,0)
+ var/required_enemies = list(1,1,0,0,0,0,0,0,0,0)
/// The rule needs this many candidates (post-trimming) to be executed (example: Cult needs 4 players at round start)
- var/required_candidates = 0
+ var/required_candidates = 0
/// 1 -> 9, probability for this rule to be picked against other rules
- var/weight = 5
+ var/weight = 5
/// Threat cost for this rule, this is decreased from the mode's threat when the rule is executed.
- var/cost = 0
+ var/cost = 0
+ /// Cost per level the rule scales up.
+ var/scaling_cost = 0
+ /// How many times a rule has scaled up upon getting picked.
+ var/scaled_times = 0
+ /// Used for the roundend report
+ var/total_cost = 0
/// A flag that determines how the ruleset is handled
/// HIGHLANDER_RULESET are rulesets can end the round.
/// TRAITOR_RULESET and MINOR_RULESET can't end the round and have no difference right now.
@@ -46,20 +58,31 @@
/// Requirements are the threat level requirements per pop range.
/// With the default values, The rule will never get drafted below 10 threat level (aka: "peaceful extended"), and it requires a higher threat level at lower pops.
var/list/requirements = list(40,30,20,10,10,10,10,10,10,10)
- /// An alternative, static requirement used instead when pop is over mode's high_pop_limit.
+ /// An alternative, static requirement used instead when pop is over mode's high_pop_limit.
var/high_population_requirement = 10
/// Reference to the mode, use this instead of SSticker.mode.
var/datum/game_mode/dynamic/mode = null
/// If a role is to be considered another for the purpose of banning.
- var/antag_flag_override = null
+ var/antag_flag_override = null
/// If a ruleset type which is in this list has been executed, then the ruleset will not be executed.
var/list/blocking_rules = list()
- /// The minimum amount of players required for the rule to be considered.
+ /// The minimum amount of players required for the rule to be considered.
var/minimum_players = 0
/// The maximum amount of players required for the rule to be considered.
- /// Anything below zero or exactly zero is ignored.
+ /// Anything below zero or exactly zero is ignored.
var/maximum_players = 0
-
+ /// Calculated during acceptable(), used in scaling and team sizes.
+ var/indice_pop = 0
+ /// Population scaling. Used by team antags and scaling for solo antags.
+ var/list/antag_cap = list()
+ /// Base probability used in scaling. The higher it is, the more likely to scale. Kept as a var to allow for config editing._SendSignal(sigtype, list/arguments)
+ var/base_prob = 60
+ /// Delay for when execute will get called from the time of post_setup (roundstart) or process (midround/latejoin).
+ /// Make sure your ruleset works with execute being called during the game when using this, and that the clean_up proc reverts it properly in case of faliure.
+ var/delay = 0
+ /// Whether or not recent-round weight values are taken into account for this ruleset.
+ /// Weight reduction uses the same values as secret's recent-round mode weight reduction.
+ var/always_max_weight = FALSE
/datum/dynamic_ruleset/New()
..()
@@ -71,8 +94,15 @@
var/costs = CONFIG_GET(keyed_list/dynamic_cost)
var/requirementses = CONFIG_GET(keyed_list/dynamic_requirements) // can't damn well use requirements
var/high_population_requirements = CONFIG_GET(keyed_list/dynamic_high_population_requirement)
+ var/list/repeated_mode_adjust = CONFIG_GET(number_list/repeated_mode_adjust)
if(config_tag in weights)
- weight = weights[config_tag]
+ var/weight_mult = 1
+ if(!always_max_weight && SSpersistence.saved_dynamic_rules.len == 3 && repeated_mode_adjust.len == 3)
+ var/saved_dynamic_rules = SSpersistence.saved_dynamic_rules
+ for(var/i in 1 to 3)
+ if(config_tag in saved_dynamic_rules[i])
+ weight_mult -= (repeated_mode_adjust[i]/100)
+ weight = weights[config_tag] * weight_mult
if(config_tag in costs)
cost = costs[config_tag]
if(config_tag in requirementses)
@@ -87,10 +117,6 @@
/datum/dynamic_ruleset/roundstart // One or more of those drafted at roundstart
ruletype = "Roundstart"
-/datum/dynamic_ruleset/roundstart/delayed/ // Executed with a 30 seconds delay
- var/delay = 30 SECONDS
- var/required_type = /mob/living/carbon/human // No ghosts, new players or silicons allowed.
-
// Can be drafted when a player joins the server
/datum/dynamic_ruleset/latejoin
ruletype = "Latejoin"
@@ -99,21 +125,56 @@
/// If your rule has extra checks, such as counting security officers, do that in ready() instead
/datum/dynamic_ruleset/proc/acceptable(population = 0, threat_level = 0)
if(minimum_players > population)
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to low pop")
return FALSE
if(maximum_players > 0 && population > maximum_players)
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to high pop")
return FALSE
if (population >= GLOB.dynamic_high_pop_limit)
- return (threat_level >= high_population_requirement)
+ indice_pop = 10
+ if(threat_level < high_population_requirement)
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat level")
+ log_game("DYNAMIC: [name] did not reach threat level threshold: [threat_level]/[high_population_requirement]")
+ return FALSE
+ else
+ return TRUE
else
pop_per_requirement = pop_per_requirement > 0 ? pop_per_requirement : mode.pop_per_requirement
- var/indice_pop = min(10,round(population/pop_per_requirement)+1)
- return (threat_level >= requirements[indice_pop])
+ if(antag_cap.len && requirements.len != antag_cap.len)
+ message_admins("DYNAMIC: requirements and antag_cap lists have different lengths in ruleset [name]. Likely config issue, report this.")
+ log_game("DYNAMIC: requirements and antag_cap lists have different lengths in ruleset [name]. Likely config issue, report this.")
+ indice_pop = min(requirements.len,round(population/pop_per_requirement)+1)
+ if(threat_level < requirements[indice_pop])
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat level")
+ log_game("DYNAMIC: [name] did not reach threat level threshold: [threat_level]/[requirements[indice_pop]]")
+ return FALSE
+ else
+ return TRUE
+
+/// Called when a suitable rule is picked during roundstart(). Will some times attempt to scale a rule up when there is threat remaining. Returns the amount of scaled steps.
+/datum/dynamic_ruleset/proc/scale_up(extra_rulesets = 0, remaining_threat_level = 0)
+ remaining_threat_level -= cost
+ if(scaling_cost && scaling_cost <= remaining_threat_level) // Only attempts to scale the modes with a scaling cost explicitly set.
+ var/new_prob
+ var/pop_to_antags = (mode.antags_rolled + (antag_cap[indice_pop] * (scaled_times + 1))) / mode.roundstart_pop_ready
+ log_game("DYNAMIC: [name] roundstart ruleset attempting to scale up with [extra_rulesets] rulesets waiting and [remaining_threat_level] threat remaining.")
+ for(var/i in 1 to 3) //Can scale a max of 3 times
+ if(remaining_threat_level >= scaling_cost && pop_to_antags < 0.25)
+ new_prob = base_prob + (remaining_threat_level) - (scaled_times * scaling_cost) - (extra_rulesets * EXTRA_RULESET_PENALTY) - (pop_to_antags * POP_SCALING_PENALTY)
+ if (!prob(new_prob))
+ break
+ remaining_threat_level -= scaling_cost
+ scaled_times++
+ pop_to_antags = (mode.antags_rolled + (antag_cap[indice_pop] * (scaled_times + 1))) / mode.roundstart_pop_ready
+ log_game("DYNAMIC: [name] roundstart ruleset failed scaling up at [new_prob ? new_prob : 0]% chance after [scaled_times]/3 successful scaleups. [remaining_threat_level] threat remaining, antag to crew ratio: [pop_to_antags*100]%.")
+ mode.antags_rolled += (1 + scaled_times) * antag_cap[indice_pop]
+ return scaled_times * scaling_cost
/// This is called if persistent variable is true everytime SSTicker ticks.
/datum/dynamic_ruleset/proc/rule_process()
return
-/// Called on game mode pre_setup, used for non-delayed roundstart rulesets only.
+/// Called on game mode pre_setup for roundstart rulesets.
/// Do everything you need to do before job is assigned here.
/// IMPORTANT: ASSIGN special_role HERE
/datum/dynamic_ruleset/proc/pre_execute()
@@ -126,20 +187,21 @@
M.add_antag_datum(antag_datum)
return TRUE
-/// Called after delay set in ruleset.
-/// Give your candidates or assignees equipment and antag datum here.
-/datum/dynamic_ruleset/roundstart/delayed/execute()
- if (SSticker && SSticker.current_state < GAME_STATE_PLAYING)
- CRASH("The delayed ruleset [name] executed before the round started.")
-
/// Here you can perform any additional checks you want. (such as checking the map etc)
/// Remember that on roundstart no one knows what their job is at this point.
/// IMPORTANT: If ready() returns TRUE, that means pre_execute() or execute() should never fail!
-/datum/dynamic_ruleset/proc/ready(forced = 0)
- if (required_candidates > candidates.len)
+/datum/dynamic_ruleset/proc/ready(forced = 0)
+ if (required_candidates > candidates.len)
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough candidates")
return FALSE
return TRUE
+/// Runs from gamemode process() if ruleset fails to start, like delayed rulesets not getting valid candidates.
+/// This one only handles refunding the threat, override in ruleset to clean up the rest.
+/datum/dynamic_ruleset/proc/clean_up()
+ mode.refund_threat(cost + (scaled_times * scaling_cost))
+ mode.log_threat("[ruletype] [name] refunded [cost + (scaled_times * scaling_cost)]",verbose=TRUE)
+
/// Gets weight of the ruleset
/// Note that this decreases weight if repeatable is TRUE and repeatable_weight_decrease is higher than 0
/// Note: If you don't want repeatable rulesets to decrease their weight use the weight variable directly
@@ -156,14 +218,6 @@
/datum/dynamic_ruleset/proc/trim_candidates()
return
-/// Counts how many players are ready at roundstart.
-/// Used only by non-delayed roundstart rulesets.
-/datum/dynamic_ruleset/proc/num_players()
- . = 0
- for(var/mob/dead/new_player/P in GLOB.player_list)
- if(P.client && P.ready == PLAYER_READY_TO_PLAY)
- . ++
-
/// Set mode result and news report here.
/// Only called if ruleset is flagged as HIGHLANDER_RULESET
/datum/dynamic_ruleset/proc/round_result()
@@ -173,6 +227,24 @@
/datum/dynamic_ruleset/proc/check_finished()
return FALSE
+/// Returns a list to be displayed on statbus.
+/datum/dynamic_ruleset/proc/get_blackbox_info()
+ var/list/ruleset_data = list()
+ ruleset_data["name"] = name
+ ruleset_data["rule_type"] = ruletype
+ ruleset_data["cost"] = total_cost
+ ruleset_data["weight"] = weight
+ ruleset_data["scaled_times"] = scaled_times
+ ruleset_data["antagonist_type"] = antag_datum
+ ruleset_data["population_tier"] = indice_pop
+ ruleset_data["assigned"] = list()
+ for (var/datum/mind/M in assigned)
+ var/assigned_data = list()
+ assigned_data["key"] = M.key
+ assigned_data["name"] = M.name
+ ruleset_data["assigned"] += list(assigned_data)
+ return ruleset_data
+
//////////////////////////////////////////////
// //
// ROUNDSTART RULESETS //
@@ -191,32 +263,14 @@
if(P.mind.special_role) // We really don't want to give antag to an antag.
candidates.Remove(P)
continue
- if (!(antag_flag in P.client.prefs.be_special) || jobban_isbanned(P.ckey, list(antag_flag, ROLE_SYNDICATE)) || (antag_flag_override && jobban_isbanned(P.ckey, list(antag_flag_override, ROLE_SYNDICATE))))//are they willing and not antag-banned?
- candidates.Remove(P)
- continue
-
-/// Checks if candidates are required mob type, connected, banned and if the job is exclusive to the role.
-/datum/dynamic_ruleset/roundstart/delayed/trim_candidates()
- . = ..()
- for (var/mob/P in candidates)
- if (!istype(P, required_type))
- candidates.Remove(P) // Can be a new_player, etc.
- continue
- if(!mode.check_age(P.client, minimum_required_age))
- candidates.Remove(P)
- continue
- if (!P.client || !P.mind || !P.mind.assigned_role) // Are they connected?
- candidates.Remove(P)
- continue
- if(P.mind.special_role || P.mind.antag_datums?.len > 0) // Are they an antag already?
- candidates.Remove(P)
- continue
- if (!(antag_flag in P.client.prefs.be_special) || jobban_isbanned(P.ckey, list(antag_flag, ROLE_SYNDICATE)) || (antag_flag_override && jobban_isbanned(P.ckey, list(antag_flag_override, ROLE_SYNDICATE))))//are they willing and not antag-banned?
- candidates.Remove(P)
- continue
- if ((exclusive_roles.len > 0) && !(P.mind.assigned_role in exclusive_roles)) // Is the rule exclusive to their job?
- candidates.Remove(P)
- continue
+ if(antag_flag_override)
+ if(!(antag_flag_override in P.client.prefs.be_special) || jobban_isbanned(P.ckey, antag_flag_override))
+ candidates.Remove(P)
+ continue
+ else
+ if(!(antag_flag in P.client.prefs.be_special) || jobban_isbanned(P.ckey, antag_flag))
+ candidates.Remove(P)
+ continue
/// Do your checks if the ruleset is ready to be executed here.
/// Should ignore certain checks if forced is TRUE
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm
new file mode 100644
index 0000000000..b6cd313bfc
--- /dev/null
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm
@@ -0,0 +1,364 @@
+/datum/dynamic_ruleset/event
+ ruletype = "Event"
+ var/typepath // typepath of the event
+ var/triggering
+
+/datum/dynamic_ruleset/event/get_blackbox_info()
+ var/list/ruleset_data = list()
+ ruleset_data["name"] = name
+ ruleset_data["rule_type"] = ruletype
+ ruleset_data["cost"] = total_cost
+ ruleset_data["weight"] = weight
+ ruleset_data["scaled_times"] = scaled_times
+ ruleset_data["event_type"] = typepath
+ ruleset_data["population_tier"] = indice_pop
+ return ruleset_data
+
+/datum/dynamic_ruleset/event/execute()
+ var/datum/round_event/E = new typepath()
+ E.current_players = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1)
+ // E.control = src // can't be done! we just don't use events that require these, those can be from_ghost almost always
+
+ testing("[time2text(world.time, "hh:mm:ss")] [E.type]")
+ deadchat_broadcast("[name] has just been triggered by dynamic!")
+ log_game("Random Event triggering: [name] ([typepath])")
+
+ return E
+
+/datum/dynamic_ruleset/event/ready(forced = FALSE) // same as midround cause we're still using enemy system
+ if (!forced)
+ var/job_check = 0
+ if (enemy_roles.len > 0)
+ for (var/mob/M in mode.current_players[CURRENT_LIVING_PLAYERS])
+ if (M.stat == DEAD)
+ continue // Dead players cannot count as opponents
+ if (M.mind && M.mind.assigned_role && (M.mind.assigned_role in enemy_roles))
+ job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it
+
+ var/threat = round(mode.threat_level/10)
+ if (job_check < required_enemies[threat])
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles")
+ return FALSE
+ return TRUE
+
+//////////////////////////////////////////////
+// //
+// PIRATES //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/event/pirates
+ name = "Space Pirates"
+ config_tag = "pirates"
+ typepath = /datum/round_event/pirates
+ antag_flag = ROLE_TRAITOR
+ enemy_roles = list("AI","Security Officer","Head of Security","Captain")
+ required_enemies = list(2,2,1,1,0,0,0,0,0,0)
+ weight = 5
+ cost = 10
+ blocking_rules = list(/datum/dynamic_ruleset/roundstart/nuclear,/datum/dynamic_ruleset/midround/from_ghosts/nuclear)
+ requirements = list(70,60,50,50,40,40,40,30,20,15)
+ high_population_requirement = 15
+
+/datum/dynamic_ruleset/event/pirates/ready(forced = FALSE)
+ if (!SSmapping.empty_space)
+ return FALSE
+ return ..()
+
+//////////////////////////////////////////////
+// //
+// SPIDERS //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/event/spiders
+ name = "Spider Infestation"
+ config_tag = "spiders"
+ typepath = /datum/round_event/spider_infestation
+ enemy_roles = list("AI","Security Officer","Head of Security","Captain")
+ required_enemies = list(2,2,1,1,0,0,0,0,0,0)
+ weight = 5
+ cost = 10
+ requirements = list(70,60,50,50,40,40,40,30,20,15)
+ high_population_requirement = 15
+
+//////////////////////////////////////////////
+// //
+// CLOGGED VENTS //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/event/ventclog
+ name = "Clogged Vents"
+ config_tag = "ventclog"
+ typepath = /datum/round_event/vent_clog
+ enemy_roles = list("Chemist","Medical Doctor","Chief Medical Officer")
+ required_enemies = list(1,1,1,0,0,0,0,0,0,0)
+ cost = 2
+ weight = 4
+ repeatable_weight_decrease = 3
+ requirements = list(5,5,5,5,5,5,5,5,5,5) // yes, can happen on fake-extended
+ high_population_requirement = 5
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/event/ventclog/ready()
+ if(mode.threat_level > 30 && mode.threat >= 5 && prob(20))
+ name = "Clogged Vents: Threatening"
+ cost = 5
+ required_enemies = list(3,3,3,2,2,2,1,1,1,1)
+ typepath = /datum/round_event/vent_clog/threatening
+ else if(mode.threat_level > 15 && mode.threat > 15 && prob(30))
+ name = "Clogged Vents: Catastrophic"
+ cost = 15
+ required_enemies = list(2,2,1,1,1,1,0,0,0,0)
+ typepath = /datum/round_event/vent_clog/catastrophic
+ else
+ cost = 2
+ name = "Clogged Vents: Normal"
+ required_enemies = list(1,1,1,0,0,0,0,0,0,0)
+ typepath = /datum/round_event/vent_clog
+ return ..()
+
+//////////////////////////////////////////////
+// //
+// ION STORM //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/event/ion_storm
+ name = "Ion Storm"
+ config_tag = "ion_storm"
+ typepath = /datum/round_event/ion_storm
+ enemy_roles = list("Research Director","Captain","Chief Engineer")
+ required_enemies = list(1,1,0,0,0,0,0,0,0,0)
+ weight = 4
+ // no repeatable weight decrease. too variable to be unfun multiple times in one round
+ cost = 3
+ requirements = list(5,5,5,5,5,5,5,5,5,5)
+ high_population_requirement = 5
+ repeatable = TRUE
+ always_max_weight = TRUE
+
+//////////////////////////////////////////////
+// //
+// METEORS //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/event/meteor_wave
+ name = "Meteor Wave"
+ config_tag = "meteor_wave"
+ typepath = /datum/round_event/meteor_wave
+ enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Captain","Cyborg")
+ required_enemies = list(3,3,3,3,3,3,3,3,3,3)
+ cost = 15
+ weight = 3
+ repeatable_weight_decrease = 2
+ requirements = list(60,50,40,30,30,30,30,30,30,30)
+ high_population_requirement = 30
+
+/datum/dynamic_ruleset/event/meteor_wave/ready()
+ if(mode.threat_level > 40 && mode.threat >= 25 && prob(20))
+ name = "Meteor Wave: Threatening"
+ cost = 25
+ typepath = /datum/round_event/meteor_wave/threatening
+ else if(mode.threat_level > 50 && mode.threat >= 40 && prob(30))
+ name = "Meteor Wave: Catastrophic"
+ cost = 40
+ typepath = /datum/round_event/meteor_wave/catastrophic
+ else
+ name = "Meteor Wave: Normal"
+ cost = 15
+ typepath = /datum/round_event/meteor_wave
+ return ..()
+
+//////////////////////////////////////////////
+// //
+// ANOMALIES //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/event/anomaly_bluespace
+ name = "Anomaly: Bluespace"
+ config_tag = "anomaly_bluespace"
+ typepath = /datum/round_event/anomaly/anomaly_bluespace
+ enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain")
+ required_enemies = list(1,1,1,0,0,0,0,0,0,0)
+ weight = 2
+ repeatable_weight_decrease = 1
+ cost = 3
+ requirements = list(5,5,5,5,5,5,5,5,5,5)
+ high_population_requirement = 5
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/event/anomaly_flux
+ name = "Anomaly: Hyper-Energetic Flux"
+ config_tag = "anomaly_flux"
+ typepath = /datum/round_event/anomaly/anomaly_flux
+ enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain")
+ required_enemies = list(1,1,1,0,0,0,0,0,0,0)
+ weight = 2
+ repeatable_weight_decrease = 1
+ cost = 5
+ requirements = list(5,5,5,5,5,5,5,5,5,5)
+ high_population_requirement = 10
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/event/anomaly_gravitational
+ name = "Anomaly: Gravitational"
+ config_tag = "anomaly_gravitational"
+ typepath = /datum/round_event/anomaly/anomaly_grav
+ weight = 2
+ repeatable_weight_decrease = 1
+ cost = 3
+ requirements = list(5,5,5,5,5,5,5,5,5,5)
+ high_population_requirement = 5
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/event/anomaly_pyroclastic
+ name = "Anomaly: Pyroclastic"
+ config_tag = "anomaly_pyroclastic"
+ typepath = /datum/round_event/anomaly/anomaly_pyro
+ weight = 2
+ repeatable_weight_decrease = 1
+ cost = 5
+ enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain","Cyborg")
+ required_enemies = list(1,1,1,1,1,1,1,1,1,1)
+ requirements = list(10,10,10,10,10,10,10,10,10,10)
+ high_population_requirement = 10
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/event/anomaly_vortex
+ name = "Anomaly: Vortex"
+ config_tag = "anomaly_vortex"
+ typepath = /datum/round_event/anomaly/anomaly_vortex
+ weight = 2
+ repeatable_weight_decrease = 1
+ cost = 5
+ enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain","Cyborg")
+ required_enemies = list(1,1,1,1,1,1,1,1,1,1)
+ requirements = list(10,10,10,10,10,10,10,10,10,10)
+ high_population_requirement = 10
+ repeatable = TRUE
+
+//////////////////////////////////////////////
+// //
+// WOW THAT'S A LOT OF EVENTS //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/event/brand_intelligence
+ name = "Brand Intelligence"
+ config_tag = "brand_intelligence"
+ typepath = /datum/round_event/brand_intelligence
+ weight = 1
+ repeatable_weight_decrease = 1
+ cost = 2
+ enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain","Cyborg")
+ required_enemies = list(1,1,1,1,0,0,0,0,0,0)
+ requirements = list(10,10,10,10,10,10,10,10,10,10)
+ high_population_requirement = 10
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/event/carp_migration
+ name = "Carp Migration"
+ config_tag = "carp_migration"
+ typepath = /datum/round_event/carp_migration
+ weight = 7
+ repeatable_weight_decrease = 3
+ cost = 4
+ requirements = list(10,10,10,10,10,10,10,10,10,10)
+ high_population_requirement = 10
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/event/communications_blackout
+ name = "Communications Blackout"
+ config_tag = "communications_blackout"
+ typepath = /datum/round_event/communications_blackout
+ cost = 4
+ weight = 2
+ repeatable_weight_decrease = 3
+ enemy_roles = list("Chief Engineer","Station Engineer")
+ required_enemies = list(1,1,1,0,0,0,0,0,0,0)
+ requirements = list(5,5,5,5,5,5,5,5,5,5)
+ high_population_requirement = 5
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/event/processor_overload
+ name = "Processor Overload"
+ config_tag = "processor_overload"
+ typepath = /datum/round_event/processor_overload
+ cost = 4
+ weight = 2
+ repeatable_weight_decrease = 3
+ enemy_roles = list("Chief Engineer","Station Engineer")
+ required_enemies = list(1,1,1,0,0,0,0,0,0,0)
+ requirements = list(5,5,5,5,5,5,5,5,5,5)
+ high_population_requirement = 5
+ repeatable = TRUE
+ always_max_weight = TRUE
+
+/datum/dynamic_ruleset/event/space_dust
+ name = "Minor Space Dust"
+ config_tag = "space_dust"
+ typepath = /datum/round_event/space_dust
+ cost = 2
+ weight = 2
+ repeatable_weight_decrease = 1
+ enemy_roles = list("Chief Engineer","Station Engineer")
+ required_enemies = list(1,1,1,0,0,0,0,0,0,0)
+ requirements = list(5,5,5,5,5,5,5,5,5,5)
+ high_population_requirement = 5
+ repeatable = TRUE
+ always_max_weight = TRUE
+
+/datum/dynamic_ruleset/event/major_dust
+ name = "Major Space Dust"
+ config_tag = "major_dust"
+ typepath = /datum/round_event/meteor_wave/major_dust
+ cost = 4
+ weight = 2
+ repeatable_weight_decrease = 1
+ enemy_roles = list("Chief Engineer","Station Engineer")
+ required_enemies = list(2,2,2,2,2,2,2,2,2,2)
+ requirements = list(10,10,10,10,10,10,10,10,10,10)
+ high_population_requirement = 10
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/event/electrical_storm
+ name = "Electrical Storm"
+ config_tag = "electrical_storm"
+ typepath = /datum/round_event/electrical_storm
+ cost = 1
+ weight = 2
+ repeatable_weight_decrease = 1
+ enemy_roles = list("Chief Engineer","Station Engineer")
+ required_enemies = list(1,1,1,0,0,0,0,0,0,0)
+ requirements = list(5,5,5,5,5,5,5,5,5,5)
+ high_population_requirement = 5
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/event/heart_attack
+ name = "Random Heart Attack"
+ config_tag = "heart_attack"
+ typepath = /datum/round_event/heart_attack
+ cost = 3
+ weight = 2
+ repeatable_weight_decrease = 1
+ enemy_roles = list("Medical Doctor","Chief Medical Officer")
+ required_enemies = list(2,2,2,2,2,2,2,2,2,2)
+ requirements = list(101,101,101,5,5,5,5,5,5,5)
+ high_population_requirement = 5
+ repeatable = TRUE
+ always_max_weight = TRUE
+
+/datum/dynamic_ruleset/event/radiation_storm
+ name = "Radiation Storm"
+ config_tag = "radiation_storm"
+ typepath = /datum/round_event/radiation_storm
+ cost = 3
+ weight = 1
+ enemy_roles = list("Chemist","Chief Medical Officer","Geneticist","Medical Doctor","AI","Captain")
+ required_enemies = list(1,1,1,1,1,1,1,1,1,1)
+ requirements = list(5,5,5,5,5,5,5,5,5,5)
+ high_population_requirement = 5
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
index fde020a3ae..fe9347d9d5 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
@@ -12,9 +12,14 @@
if(!mode.check_age(P.client, minimum_required_age))
candidates.Remove(P)
continue
- if (!(antag_flag in P.client.prefs.be_special) || jobban_isbanned(P.ckey, list(antag_flag, ROLE_SYNDICATE)) || (antag_flag_override && jobban_isbanned(P.ckey, list(antag_flag_override))))//are they willing and not antag-banned?
- candidates.Remove(P)
- continue
+ if(antag_flag_override)
+ if(!(antag_flag_override in P.client.prefs.be_special) || jobban_isbanned(P.ckey, list(antag_flag_override)))
+ candidates.Remove(P)
+ continue
+ else
+ if(!(antag_flag in P.client.prefs.be_special) || jobban_isbanned(P.ckey, list(antag_flag, ROLE_SYNDICATE)))
+ candidates.Remove(P)
+ continue
if (P.mind.assigned_role in restricted_roles) // Does their job allow for it?
candidates.Remove(P)
continue
@@ -31,9 +36,9 @@
continue // Dead players cannot count as opponents
if (M.mind && M.mind.assigned_role && (M.mind.assigned_role in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role in restricted_roles)))
job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it
-
var/threat = round(mode.threat_level/10)
if (job_check < required_enemies[threat])
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles")
return FALSE
return ..()
@@ -60,10 +65,11 @@
required_candidates = 1
weight = 7
cost = 5
- requirements = list(40,30,20,10,10,10,10,10,10,10)
- high_population_requirement = 10
+ requirements = list(40,30,20,15,15,15,15,15,15,15)
+ high_population_requirement = 15
repeatable = TRUE
flags = TRAITOR_RULESET
+ always_max_weight = TRUE
//////////////////////////////////////////////
// //
@@ -73,40 +79,138 @@
/datum/dynamic_ruleset/latejoin/provocateur
name = "Provocateur"
+ persistent = TRUE
config_tag = "latejoin_revolution"
antag_datum = /datum/antagonist/rev/head
antag_flag = ROLE_REV_HEAD
antag_flag_override = ROLE_REV
restricted_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
enemy_roles = list("AI", "Cyborg", "Security Officer","Detective","Head of Security", "Captain", "Warden")
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_enemies = list(4,4,3,3,3,3,3,2,2,1)
required_candidates = 1
weight = 2
+ delay = 1 MINUTES // Prevents rule start while head is offstation.
cost = 20
- requirements = list(101,101,70,40,30,20,20,20,20,20)
- high_population_requirement = 50
+ requirements = list(101,101,70,40,40,40,40,40,40,40)
+ high_population_requirement = 40
flags = HIGHLANDER_RULESET
- var/required_heads = 3
+ var/required_heads_of_staff = 3
+ var/finished = FALSE
+ var/datum/team/revolution/revolution
/datum/dynamic_ruleset/latejoin/provocateur/ready(forced=FALSE)
if (forced)
- required_heads = 1
+ required_heads_of_staff = 1
if(!..())
return FALSE
var/head_check = 0
for(var/mob/player in mode.current_players[CURRENT_LIVING_PLAYERS])
if (player.mind.assigned_role in GLOB.command_positions)
head_check++
- return (head_check >= required_heads)
+ return (head_check >= required_heads_of_staff)
/datum/dynamic_ruleset/latejoin/provocateur/execute()
- var/mob/M = pick(candidates)
- assigned += M.mind
- M.mind.special_role = antag_flag
- var/datum/antagonist/rev/head/new_head = new()
- new_head.give_flash = TRUE
- new_head.give_hud = TRUE
- new_head.remove_clumsy = TRUE
- new_head = M.mind.add_antag_datum(new_head)
- new_head.rev_team.max_headrevs = 1 // Only one revhead if it is latejoin.
+ var/mob/M = pick(candidates) // This should contain a single player, but in case.
+ if(check_eligible(M.mind)) // Didnt die/run off z-level/get implanted since leaving shuttle.
+ assigned += M.mind
+ M.mind.special_role = antag_flag
+ revolution = new()
+ var/datum/antagonist/rev/head/new_head = new()
+ new_head.give_flash = TRUE
+ new_head.give_hud = TRUE
+ new_head.remove_clumsy = TRUE
+ new_head = M.mind.add_antag_datum(new_head, revolution)
+ revolution.update_objectives()
+ revolution.update_heads()
+ SSshuttle.registerHostileEnvironment(src)
+ return TRUE
+ else
+ log_game("DYNAMIC: [ruletype] [name] discarded [M.name] from head revolutionary due to ineligibility.")
+ log_game("DYNAMIC: [ruletype] [name] failed to get any eligible headrevs. Refunding [cost] threat.")
+ return FALSE
+
+/datum/dynamic_ruleset/latejoin/provocateur/rule_process()
+ if(check_rev_victory())
+ finished = REVOLUTION_VICTORY
+ return RULESET_STOP_PROCESSING
+ else if (check_heads_victory())
+ finished = STATION_VICTORY
+ SSshuttle.clearHostileEnvironment(src)
+ priority_announce("It appears the mutiny has been quelled. Please return yourself and your colleagues to work. \
+ We have remotely blacklisted the head revolutionaries from your cloning software to prevent accidental cloning.", null, "attention", null, "Central Command Loyalty Monitoring Division")
+ for(var/datum/mind/M in revolution.members) // Remove antag datums and prevent headrev cloning then restarting rebellions.
+ if(M.has_antag_datum(/datum/antagonist/rev/head))
+ var/datum/antagonist/rev/head/R = M.has_antag_datum(/datum/antagonist/rev/head)
+ R.remove_revolutionary(FALSE, "gamemode")
+ var/mob/living/carbon/C = M.current
+ if(C.stat == DEAD)
+ C.makeUncloneable()
+ if(M.has_antag_datum(/datum/antagonist/rev))
+ var/datum/antagonist/rev/R = M.has_antag_datum(/datum/antagonist/rev)
+ R.remove_revolutionary(FALSE, "gamemode")
+ return RULESET_STOP_PROCESSING
+
+/// Checks for revhead loss conditions and other antag datums.
+/datum/dynamic_ruleset/latejoin/provocateur/proc/check_eligible(var/datum/mind/M)
+ var/turf/T = get_turf(M.current)
+ if(!considered_afk(M) && considered_alive(M) && is_station_level(T.z) && !M.antag_datums?.len && !HAS_TRAIT(M, TRAIT_MINDSHIELD))
+ return TRUE
+ return FALSE
+
+/datum/dynamic_ruleset/latejoin/provocateur/check_finished()
+ if(finished == REVOLUTION_VICTORY)
+ return TRUE
+ else
+ return ..()
+
+/datum/dynamic_ruleset/latejoin/provocateur/proc/check_rev_victory()
+ for(var/datum/objective/mutiny/objective in revolution.objectives)
+ if(!(objective.check_completion()))
+ return FALSE
return TRUE
+
+/datum/dynamic_ruleset/latejoin/provocateur/proc/check_heads_victory()
+ for(var/datum/mind/rev_mind in revolution.head_revolutionaries())
+ var/turf/T = get_turf(rev_mind.current)
+ if(!considered_afk(rev_mind) && considered_alive(rev_mind) && is_station_level(T.z))
+ if(ishuman(rev_mind.current) || ismonkey(rev_mind.current))
+ return FALSE
+ return TRUE
+
+/datum/dynamic_ruleset/latejoin/provocateur/round_result()
+ if(finished == REVOLUTION_VICTORY)
+ SSticker.mode_result = "win - heads killed"
+ SSticker.news_report = REVS_WIN
+ else if(finished == STATION_VICTORY)
+ SSticker.mode_result = "loss - rev heads killed"
+ SSticker.news_report = REVS_LOSE
+
+//////////////////////////////////////////////
+// //
+// VAMPIRE //
+// //
+//////////////////////////////////////////////
+
+/*
+/datum/dynamic_ruleset/latejoin/vampire
+ name = "vampire"
+ config_tag = "vampire_latejoin"
+ antag_flag = ROLE_VAMPIRE
+ antag_datum = ANTAG_DATUM_VAMPIRE
+ protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
+ restricted_roles = list("AI", "Cyborg")
+ required_candidates = 1
+ weight = 5
+ cost = 15
+ requirements = list(80,70,60,50,40,20,20,15,15,15)
+ repeatable = TRUE
+ high_population_requirement = 15
+
+/datum/dynamic_ruleset/latejoin/vampire/pre_execute()
+ var/mob/M = pick(candidates)
+ candidates -= M
+ assigned += M.mind
+ M.mind.restricted_roles = restricted_roles
+ M.mind.special_role = ROLE_VAMPIRE
+ return TRUE
+*/
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
index f24301d716..91ac73d142 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -1,3 +1,6 @@
+#define REVENANT_SPAWN_THRESHOLD 20
+#define ABDUCTOR_MAX_TEAMS 4 // blame TG for not using the defines files
+
//////////////////////////////////////////////
// //
// MIDROUND RULESETS //
@@ -8,7 +11,7 @@
ruletype = "Midround"
/// If the ruleset should be restricted from ghost roles.
var/restrict_ghost_roles = TRUE
- /// What type the ruleset is restricted to.
+ /// What mob type the ruleset is restricted to.
var/required_type = /mob/living/carbon/human
var/list/living_players = list()
var/list/living_antags = list()
@@ -17,44 +20,49 @@
/datum/dynamic_ruleset/midround/from_ghosts
weight = 0
+ required_type = /mob/dead/observer
/// Whether the ruleset should call generate_ruleset_body or not.
var/makeBody = TRUE
/datum/dynamic_ruleset/midround/trim_candidates()
- // Unlike the previous two types, these rulesets are not meant for /mob/dead/new_player
- // And since I want those rulesets to be as flexible as possible, I'm not gonna put much here,
//
// All you need to know is that here, the candidates list contains 4 lists itself, indexed with the following defines:
// Candidates = list(CURRENT_LIVING_PLAYERS, CURRENT_LIVING_ANTAGS, CURRENT_DEAD_PLAYERS, CURRENT_OBSERVERS)
// So for example you can get the list of all current dead players with var/list/dead_players = candidates[CURRENT_DEAD_PLAYERS]
// Make sure to properly typecheck the mobs in those lists, as the dead_players list could contain ghosts, or dead players still in their bodies.
// We're still gonna trim the obvious (mobs without clients, jobbanned players, etc)
- living_players = trim_list(mode.current_players[CURRENT_LIVING_PLAYERS])
- living_antags = trim_list(mode.current_players[CURRENT_LIVING_ANTAGS])
- dead_players = trim_list(mode.current_players[CURRENT_DEAD_PLAYERS])
- list_observers = trim_list(mode.current_players[CURRENT_OBSERVERS])
+ living_players = trim_list(mode.current_players[CURRENT_LIVING_PLAYERS])
+ living_antags = trim_list(mode.current_players[CURRENT_LIVING_ANTAGS])
+ list_observers = trim_list(mode.current_players[CURRENT_OBSERVERS])
/datum/dynamic_ruleset/midround/proc/trim_list(list/L = list())
var/list/trimmed_list = L.Copy()
- var/antag_name = initial(antag_flag)
for(var/mob/M in trimmed_list)
if (!istype(M, required_type))
trimmed_list.Remove(M)
continue
+ if (M.GetComponent(/datum/component/virtual_reality))
+ trimmed_list.Remove(M)
+ continue
if (!M.client) // Are they connected?
trimmed_list.Remove(M)
continue
if(!mode.check_age(M.client, minimum_required_age))
trimmed_list.Remove(M)
continue
- if (!(antag_name in M.client.prefs.be_special) || jobban_isbanned(M.ckey, list(antag_name, ROLE_SYNDICATE)))//are they willing and not antag-banned?
- trimmed_list.Remove(M)
- continue
+ if(antag_flag_override)
+ if(!(antag_flag_override in M.client.prefs.be_special) || jobban_isbanned(M.ckey, antag_flag_override))
+ trimmed_list.Remove(M)
+ continue
+ else
+ if(!(antag_flag in M.client.prefs.be_special) || jobban_isbanned(M.ckey, antag_flag))
+ trimmed_list.Remove(M)
+ continue
if (M.mind)
if (restrict_ghost_roles && M.mind.assigned_role in GLOB.exp_specialmap[EXP_TYPE_SPECIAL]) // Are they playing a ghost role?
trimmed_list.Remove(M)
continue
- if (M.mind.assigned_role in restricted_roles || HAS_TRAIT(M, TRAIT_MINDSHIELD)) // Does their job allow it or are they mindshielded?
+ if (M.mind.assigned_role in restricted_roles) // Does their job allow it?
trimmed_list.Remove(M)
continue
if ((exclusive_roles.len > 0) && !(M.mind.assigned_role in exclusive_roles)) // Is the rule exclusive to their job?
@@ -71,7 +79,7 @@
if (!forced)
var/job_check = 0
if (enemy_roles.len > 0)
- for (var/mob/M in living_players)
+ for (var/mob/M in mode.current_players[CURRENT_LIVING_PLAYERS])
if (M.stat == DEAD)
continue // Dead players cannot count as opponents
if (M.mind && M.mind.assigned_role && (M.mind.assigned_role in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role in restricted_roles)))
@@ -79,6 +87,7 @@
var/threat = round(mode.threat_level/10)
if (job_check < required_enemies[threat])
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles")
return FALSE
return TRUE
@@ -86,11 +95,8 @@
var/list/possible_candidates = list()
possible_candidates.Add(dead_players)
possible_candidates.Add(list_observers)
- send_applications(possible_candidates)
- if(assigned.len > 0)
- return TRUE
- else
- return FALSE
+ var/application_successful = send_applications(possible_candidates)
+ return assigned.len > 0 && application_successful
/// This sends a poll to ghosts if they want to be a ghost spawn from a ruleset.
/datum/dynamic_ruleset/midround/from_ghosts/proc/send_applications(list/possible_volunteers = list())
@@ -100,30 +106,23 @@
message_admins("Polling [possible_volunteers.len] players to apply for the [name] ruleset.")
log_game("DYNAMIC: Polling [possible_volunteers.len] players to apply for the [name] ruleset.")
- candidates = pollGhostCandidates("The mode is looking for volunteers to become [antag_flag] for [name]", antag_flag, SSticker.mode, antag_flag, poll_time = 300)
+ candidates = pollGhostCandidates("The mode is looking for volunteers to become a [name]", antag_flag, SSticker.mode, antag_flag, poll_time = 300)
- if(!candidates || candidates.len <= 0)
- message_admins("The ruleset [name] received no applications.")
- log_game("DYNAMIC: The ruleset [name] received no applications.")
- mode.refund_threat(cost)
- mode.threat_log += "[worldtime2text()]: Rule [name] refunded [cost] (no applications)"
- mode.executed_rules -= src
- return
+ if(!candidates || candidates.len <= required_candidates)
+ message_admins("The ruleset [name] did not receive enough applications.")
+ log_game("DYNAMIC: The ruleset [name] did not receive enough applications.")
+ return FALSE
message_admins("[candidates.len] players volunteered for the ruleset [name].")
log_game("DYNAMIC: [candidates.len] players volunteered for [name].")
review_applications()
+ return TRUE
/// Here is where you can check if your ghost applicants are valid for the ruleset.
/// Called by send_applications().
/datum/dynamic_ruleset/midround/from_ghosts/proc/review_applications()
for (var/i = 1, i <= required_candidates, i++)
if(candidates.len <= 0)
- if(i == 1)
- // We have found no candidates so far and we are out of applicants.
- mode.refund_threat(cost)
- mode.threat_log += "[worldtime2text()]: Rule [name] refunded [cost] (all applications invalid)"
- mode.executed_rules -= src
break
var/mob/applicant = pick(candidates)
candidates -= applicant
@@ -145,7 +144,7 @@
finish_setup(new_character, i)
assigned += applicant
- notify_ghosts("[new_character] has been picked for the ruleset [name]!", source = new_character, action = NOTIFY_ORBIT, header="Something Interesting!")
+ notify_ghosts("[new_character] has been picked for the ruleset [name]!", source = new_character, action = NOTIFY_ORBIT)
/datum/dynamic_ruleset/midround/from_ghosts/proc/generate_ruleset_body(mob/applicant)
var/mob/living/carbon/human/new_character = makeBody(applicant)
@@ -177,10 +176,11 @@
required_candidates = 1
weight = 7
cost = 10
- requirements = list(50,40,30,20,10,10,10,10,10,10)
+ requirements = list(30,25,20,15,15,15,15,15,15,15)
repeatable = TRUE
- high_population_requirement = 10
+ high_population_requirement = 15
flags = TRAITOR_RULESET
+ always_max_weight = TRUE
/datum/dynamic_ruleset/midround/autotraitor/acceptable(population = 0, threat = 0)
var/player_count = mode.current_players[CURRENT_LIVING_PLAYERS].len
@@ -225,24 +225,24 @@
/datum/dynamic_ruleset/midround/malf
name = "Malfunctioning AI"
- config_tag = "malf_ai"
+ config_tag = "midround_malf_ai"
antag_datum = /datum/antagonist/traitor
antag_flag = ROLE_MALF
enemy_roles = list("Security Officer", "Warden","Detective","Head of Security", "Captain", "Scientist", "Chemist", "Research Director", "Chief Engineer")
exclusive_roles = list("AI")
- required_enemies = list(4,4,4,4,4,4,2,2,2,0)
+ required_enemies = list(6,6,6,4,4,4,2,2,2,1)
required_candidates = 1
- weight = 3
+ weight = 2
cost = 35
- requirements = list(101,101,80,70,60,60,50,50,40,40)
- high_population_requirement = 35
+ requirements = list(101,101,70,50,50,50,40,30,30,30)
+ high_population_requirement = 30
required_type = /mob/living/silicon/ai
var/ion_announce = 33
var/removeDontImproveChance = 10
/datum/dynamic_ruleset/midround/malf/trim_candidates()
..()
- candidates = candidates[CURRENT_LIVING_PLAYERS]
+ living_players = candidates[CURRENT_LIVING_PLAYERS]
for(var/mob/living/player in candidates)
if(!isAI(player))
candidates -= player
@@ -256,8 +256,7 @@
/datum/dynamic_ruleset/midround/malf/execute()
if(!candidates || !candidates.len)
return FALSE
- var/mob/living/silicon/ai/M = pick(candidates)
- candidates -= M
+ var/mob/living/silicon/ai/M = pick_n_take(candidates)
assigned += M.mind
var/datum/antagonist/traitor/AI = new
M.mind.special_role = antag_flag
@@ -279,19 +278,22 @@
/datum/dynamic_ruleset/midround/from_ghosts/wizard
name = "Wizard"
config_tag = "midround_wizard"
+ persistent = TRUE
antag_datum = /datum/antagonist/wizard
antag_flag = ROLE_WIZARD
enemy_roles = list("Security Officer","Detective","Head of Security", "Captain")
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_enemies = list(4,4,3,2,2,1,1,0,0,0)
required_candidates = 1
weight = 1
cost = 20
- requirements = list(90,90,70,40,30,20,10,10,10,10)
- high_population_requirement = 50
+ requirements = list(90,90,70,50,50,50,50,40,30,30)
+ high_population_requirement = 30
repeatable = TRUE
+ var/datum/mind/wizard
/datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE)
if (required_candidates > (dead_players.len + list_observers.len))
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
return FALSE
if(GLOB.wizardstart.len == 0)
log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.")
@@ -303,6 +305,20 @@
..()
new_character.forceMove(pick(GLOB.wizardstart))
+/datum/dynamic_ruleset/midround/from_ghosts/wizard/rule_process() // i can literally copy this from are_special_antags_dead it's great
+ if(isliving(wizard.current) && wizard.current.stat!=DEAD)
+ return FALSE
+
+ for(var/obj/item/phylactery/P in GLOB.poi_list) //TODO : IsProperlyDead()
+ if(P.mind && P.mind.has_antag_datum(/datum/antagonist/wizard))
+ return FALSE
+
+ if(SSevents.wizardmode) //If summon events was active, turn it off
+ SSevents.toggleWizardmode()
+ SSevents.resetFrequency()
+
+ return RULESET_STOP_PROCESSING
+
//////////////////////////////////////////////
// //
// NUCLEAR OPERATIVES (MIDROUND) //
@@ -315,12 +331,12 @@
antag_flag = ROLE_OPERATIVE
antag_datum = /datum/antagonist/nukeop
enemy_roles = list("AI", "Cyborg", "Security Officer", "Warden","Detective","Head of Security", "Captain")
- required_enemies = list(3,3,3,3,3,2,1,1,0,0)
+ required_enemies = list(5,5,4,3,3,2,2,2,1,1)
required_candidates = 5
weight = 5
cost = 35
- requirements = list(90,90,90,80,60,40,30,20,10,10)
- high_population_requirement = 10
+ requirements = list(90,90,90,80,70,60,50,40,40,40)
+ high_population_requirement = 40
var/operative_cap = list(2,2,3,3,4,5,5,5,5,5)
var/datum/team/nuclear/nuke_team
flags = HIGHLANDER_RULESET
@@ -328,12 +344,19 @@
/datum/dynamic_ruleset/midround/from_ghosts/nuclear/acceptable(population=0, threat=0)
if (locate(/datum/dynamic_ruleset/roundstart/nuclear) in mode.executed_rules)
return FALSE // Unavailable if nuke ops were already sent at roundstart
- var/indice_pop = min(10,round(living_players.len/5)+1)
+ indice_pop = min(10, round(living_players.len/5)+1)
+ /* NOTE: The above line's magic value of "10" is a hack due to the fact that byond was
+ not recognizing operative_cap as a defined variable. It should be operative_cap.len--
+ and yes, this means that if the len is changed, this variable must be changed along with it.
+ One day, once the mystery of why this issue was occuring is figured out,
+ we may change it back, but until this day comes, we must make it simply 10.
+ */
required_candidates = operative_cap[indice_pop]
return ..()
/datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE)
if (required_candidates > (dead_players.len + list_observers.len))
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
return FALSE
return ..()
@@ -359,14 +382,21 @@
antag_datum = /datum/antagonist/blob
antag_flag = ROLE_BLOB
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_enemies = list(3,3,2,2,2,1,1,1,1,0)
required_candidates = 1
+ blocking_rules = list(/datum/dynamic_ruleset/roundstart/clockcult)
weight = 4
cost = 10
- requirements = list(101,101,101,80,60,50,30,20,10,10)
+ requirements = list(101,101,101,80,60,50,50,50,50,50)
high_population_requirement = 50
repeatable = TRUE
+/datum/dynamic_ruleset/midround/from_ghosts/blob/ready(forced = FALSE)
+ if (required_candidates > (dead_players.len + list_observers.len))
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
+ return FALSE
+ return ..()
+
/datum/dynamic_ruleset/midround/from_ghosts/blob/generate_ruleset_body(mob/applicant)
var/body = applicant.become_overmind()
return body
@@ -383,15 +413,22 @@
antag_datum = /datum/antagonist/xeno
antag_flag = ROLE_ALIEN
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_enemies = list(3,3,2,2,1,1,1,1,1,0)
required_candidates = 1
weight = 3
cost = 10
- requirements = list(101,101,101,70,50,40,20,15,10,10)
+ requirements = list(101,101,101,70,50,50,50,50,50,50)
high_population_requirement = 50
+ repeatable_weight_decrease = 2
repeatable = TRUE
var/list/vents = list()
+/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/ready(forced = FALSE)
+ if (required_candidates > (dead_players.len + list_observers.len))
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
+ return FALSE
+ return ..()
+
/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/execute()
// 50% chance of being incremented by one
required_candidates += prob(50)
@@ -435,8 +472,9 @@
required_candidates = 1
weight = 3
cost = 10
- requirements = list(101,101,101,70,50,40,20,15,10,10)
+ requirements = list(101,101,101,70,50,40,20,15,15,15)
high_population_requirement = 50
+ repeatable_weight_decrease = 2
repeatable = TRUE
var/list/spawn_locs = list()
@@ -465,3 +503,273 @@
message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a Nightmare by the midround ruleset.")
log_game("DYNAMIC: [key_name(S)] was spawned as a Nightmare by the midround ruleset.")
return S
+
+//////////////////////////////////////////////
+// //
+// SENTIENT DISEASE //
+// //
+//////////////////////////////////////////////
+
+
+/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease
+ name = "Sentient Disease"
+ config_tag = "sentient_disease"
+ antag_flag = ROLE_ALIEN
+ enemy_roles = list("Virologist","Chief Medical Officer","Captain","Chemist")
+ required_enemies = list(2,1,1,1,0,0,0,0,0,0)
+ required_candidates = 1
+ weight = 4
+ cost = 5
+ requirements = list(30,30,20,20,15,10,10,10,10,5) // yes, it can even happen in "extended"!
+ high_population_requirement = 5
+
+/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/ready(forced = FALSE)
+ if (required_candidates > (dead_players.len + list_observers.len))
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
+ return FALSE
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/generate_ruleset_body(mob/applicant)
+ var/mob/camera/disease/virus = new /mob/camera/disease(SSmapping.get_station_center())
+ applicant.transfer_ckey(virus, FALSE)
+ INVOKE_ASYNC(virus, /mob/camera/disease/proc/pick_name)
+ message_admins("[ADMIN_LOOKUPFLW(virus)] has been made into a sentient disease by the midround ruleset.")
+ log_game("[key_name(virus)] was spawned as a sentient disease by the midround ruleset.")
+ return virus
+
+//////////////////////////////////////////////
+// //
+// REVENANT //
+// //
+//////////////////////////////////////////////
+
+
+/datum/dynamic_ruleset/midround/from_ghosts/revenant
+ name = "Revenant"
+ config_tag = "revenant"
+ antag_flag = ROLE_REVENANT
+ enemy_roles = list("Chief Engineer","Station Engineer","Captain","Chaplain","AI")
+ required_enemies = list(2,1,1,1,0,0,0,0,0,0)
+ required_candidates = 1
+ weight = 4
+ cost = 5
+ requirements = list(30,30,30,30,20,15,15,15,15,15)
+ high_population_requirement = 15
+ var/list/spawn_locs = list()
+
+/datum/dynamic_ruleset/midround/from_ghosts/revenant/ready(forced = FALSE)
+ var/deadMobs = 0
+ for(var/mob/M in GLOB.dead_mob_list)
+ deadMobs++
+ if(deadMobs < REVENANT_SPAWN_THRESHOLD)
+ return FALSE
+ if(required_candidates > (dead_players.len + list_observers.len))
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
+ return FALSE
+ for(var/mob/living/L in GLOB.dead_mob_list) //look for any dead bodies
+ var/turf/T = get_turf(L)
+ if(T && is_station_level(T.z))
+ spawn_locs += T
+ if(!spawn_locs.len || spawn_locs.len < 15) //look for any morgue trays, crematoriums, ect if there weren't alot of dead bodies on the station to pick from
+ for(var/obj/structure/bodycontainer/bc in GLOB.bodycontainers)
+ var/turf/T = get_turf(bc)
+ if(T && is_station_level(T.z))
+ spawn_locs += T
+ if(!spawn_locs.len) //If we can't find any valid spawnpoints, try the carp spawns
+ for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list)
+ if(isturf(L.loc))
+ spawn_locs += L.loc
+ if(!spawn_locs.len) //If we can't find THAT, then just give up and cry
+ return FALSE
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/revenant/generate_ruleset_body(mob/applicant)
+ var/mob/living/simple_animal/revenant/revvie = new(pick(spawn_locs))
+ applicant.transfer_ckey(revvie, FALSE)
+ message_admins("[ADMIN_LOOKUPFLW(revvie)] has been made into a revenant by the midround ruleset.")
+ log_game("[key_name(revvie)] was spawned as a revenant by the midround ruleset.")
+ return revvie
+
+//////////////////////////////////////////////
+// //
+// SLAUGHTER DEMON //
+// //
+//////////////////////////////////////////////
+
+
+/datum/dynamic_ruleset/midround/from_ghosts/slaughter_demon
+ name = "Slaughter Demon"
+ config_tag = "slaughter_demon"
+ antag_flag = ROLE_ALIEN
+ enemy_roles = list("Security Officer","Shaft Miner","Head of Security","Captain","Janitor","AI","Cyborg")
+ required_enemies = list(3,2,2,2,2,1,1,1,1,0)
+ required_candidates = 1
+ weight = 4
+ cost = 15
+ requirements = list(101,101,101,90,80,70,60,50,40,30)
+ high_population_requirement = 30
+ var/list/spawn_locs = list()
+
+/datum/dynamic_ruleset/midround/from_ghosts/slaughter_demon/ready(forced = FALSE)
+ if(required_candidates > (dead_players.len + list_observers.len))
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
+ return FALSE
+ for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list)
+ if(isturf(L.loc))
+ spawn_locs += L.loc
+
+ if(!spawn_locs.len)
+ return FALSE
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/slaughter_demon/generate_ruleset_body(mob/applicant)
+ var/datum/mind/player_mind = new /datum/mind(applicant.key)
+ player_mind.active = 1
+ var/obj/effect/dummy/phased_mob/slaughter/holder = new /obj/effect/dummy/phased_mob/slaughter((pick(spawn_locs)))
+ var/mob/living/simple_animal/slaughter/S = new (holder)
+ S.holder = holder
+ player_mind.transfer_to(S)
+ player_mind.assigned_role = "Slaughter Demon"
+ player_mind.special_role = "Slaughter Demon"
+ player_mind.add_antag_datum(/datum/antagonist/slaughter)
+ to_chat(S, S.playstyle_string)
+ to_chat(S, "You are currently not currently in the same plane of existence as the station. Blood Crawl near a blood pool to manifest.")
+ SEND_SOUND(S, 'sound/magic/demon_dies.ogg')
+ message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a slaughter demon by dynamic.")
+ log_game("[key_name(S)] was spawned as a slaughter demon by dynamic.")
+ return S
+
+//////////////////////////////////////////////
+// //
+// ABDUCTORS //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/midround/from_ghosts/abductors
+ name = "Abductors"
+ config_tag = "abductors"
+ antag_flag = ROLE_ABDUCTOR
+ // Has two antagonist flags, in fact
+ enemy_roles = list("AI", "Cyborg", "Security Officer", "Warden","Detective","Head of Security", "Captain")
+ required_enemies = list(3,3,2,2,1,1,0,0,0,0)
+ required_candidates = 2
+ weight = 8
+ cost = 10
+ requirements = list(101,101,70,50,40,30,30,20,15,15)
+ blocking_rules = list(/datum/dynamic_ruleset/roundstart/nuclear,/datum/dynamic_ruleset/midround/from_ghosts/nuclear)
+ high_population_requirement = 15
+ var/datum/team/abductor_team/team
+ repeatable_weight_decrease = 4
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE)
+ if(required_candidates > (dead_players.len + list_observers.len))
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
+ return FALSE
+ team = new /datum/team/abductor_team
+ if(team.team_number > ABDUCTOR_MAX_TEAMS)
+ return FALSE
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/abductors/finish_setup(mob/new_character, index)
+ switch(index)
+ if(1) // yeah this seems like a baffling anti-pattern but it's actually the best way to do this, shit you not
+ var/mob/living/carbon/human/agent = new_character
+ agent.mind.add_antag_datum(/datum/antagonist/abductor/agent, team)
+ log_game("[key_name(agent)] has been selected as [team.name] abductor agent.")
+ if(2)
+ var/mob/living/carbon/human/scientist = new_character
+ scientist.mind.add_antag_datum(/datum/antagonist/abductor/scientist, team)
+ log_game("[key_name(scientist)] has been selected as [team.name] abductor scientist.")
+
+//////////////////////////////////////////////
+// //
+// SPACE NINJA //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/midround/from_ghosts/ninja
+ name = "Space Ninja"
+ config_tag = "ninja"
+ antag_flag = ROLE_NINJA
+ enemy_roles = list("Security Officer","Head of Security","Captain","AI","Cyborg")
+ required_enemies = list(3,2,2,2,2,1,1,1,1,0)
+ required_candidates = 1
+ weight = 4
+ cost = 15
+ requirements = list(101,101,101,90,80,70,60,50,40,30)
+ high_population_requirement = 30
+ var/list/spawn_locs = list()
+ var/spawn_loc
+
+/datum/dynamic_ruleset/midround/from_ghosts/ninja/ready(forced = FALSE)
+ if(required_candidates > (dead_players.len + list_observers.len))
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
+ return FALSE
+ if(!spawn_loc)
+ var/list/spawn_locs = list()
+ for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list)
+ if(isturf(L.loc))
+ spawn_locs += L.loc
+ if(!spawn_locs.len)
+ return FALSE
+ spawn_loc = pick(spawn_locs)
+ if(!spawn_loc)
+ return FALSE
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/ninja/generate_ruleset_body(mob/applicant)
+ var/key = applicant.key
+
+ //Prepare ninja player mind
+ var/datum/mind/Mind = new /datum/mind(key)
+ Mind.assigned_role = ROLE_NINJA
+ Mind.special_role = ROLE_NINJA
+ Mind.active = 1
+
+ //spawn the ninja and assign the candidate
+ var/mob/living/carbon/human/Ninja = create_space_ninja(spawn_loc)
+ Mind.transfer_to(Ninja)
+ var/datum/antagonist/ninja/ninjadatum = new
+ ninjadatum.helping_station = pick(TRUE,FALSE)
+ if(ninjadatum.helping_station)
+ mode.refund_threat(5)
+ Mind.add_antag_datum(ninjadatum)
+
+ if(Ninja.mind != Mind) //something has gone wrong!
+ throw EXCEPTION("Ninja created with incorrect mind")
+
+ message_admins("[ADMIN_LOOKUPFLW(Ninja)] has been made into a ninja by dynamic.")
+ log_game("[key_name(Ninja)] was spawned as a ninja by dynamic.")
+ return Ninja
+
+#undef ABDUCTOR_MAX_TEAMS
+#undef REVENANT_SPAWN_THRESHOLD
+
+//////////////////////////////////////////////
+// //
+// BLOODSUCKERS //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/latejoin/bloodsucker
+ name = "Bloodsucker Infiltrator"
+ config_tag = "latejoin_bloodsucker"
+ antag_datum = ANTAG_DATUM_BLOODSUCKER
+ antag_flag = ROLE_TRAITOR
+ restricted_roles = list("AI", "Cyborg")
+ protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ required_candidates = 1
+ weight = 3
+ cost = 10
+ requirements = list(90,80,70,60,55,50,45,40,35,30)
+ high_population_requirement = 30
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/latejoin/bloodsucker/execute()
+ var/mob/M = pick(candidates)
+ assigned += M.mind
+ M.mind.special_role = antag_flag
+ if(mode.make_bloodsucker(M.mind))
+ mode.bloodsuckers += M
+ return TRUE
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
index 6a9aefa996..e5bb0af464 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
@@ -13,20 +13,21 @@
antag_datum = /datum/antagonist/traitor/
minimum_required_age = 0
protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster", "Cyborg")
- restricted_roles = list("Cyborg")
+ restricted_roles = list("Cyborg", "AI")
required_candidates = 1
weight = 5
- cost = 10
- requirements = list(10,10,10,10,10,10,10,10,10,10)
- high_population_requirement = 10
+ cost = 10 // Avoid raising traitor threat above 10, as it is the default low cost ruleset.
+ scaling_cost = 10
+ requirements = list(50,50,50,50,50,50,50,50,50,50)
+ high_population_requirement = 40
+ antag_cap = list(1,1,1,1,2,2,2,2,3,3)
+ always_max_weight = TRUE
var/autotraitor_cooldown = 450 // 15 minutes (ticks once per 2 sec)
/datum/dynamic_ruleset/roundstart/traitor/pre_execute()
- var/traitor_scaling_coeff = 10 - max(0,round(mode.threat_level/10)-5) // Above 50 threat level, coeff goes down by 1 for every 10 levels
- var/num_traitors = min(round(mode.candidates.len / traitor_scaling_coeff) + 1, candidates.len)
+ var/num_traitors = antag_cap[indice_pop] * (scaled_times + 1)
for (var/i = 1 to num_traitors)
- var/mob/M = pick(candidates)
- candidates -= M
+ var/mob/M = pick_n_take(candidates)
assigned += M.mind
M.mind.special_role = ROLE_TRAITOR
M.mind.restricted_roles = restricted_roles
@@ -51,32 +52,27 @@
name = "Blood Brothers"
config_tag = "traitorbro"
antag_flag = ROLE_BROTHER
- antag_datum = /datum/antagonist/brother/
+ antag_datum = /datum/antagonist/brother
restricted_roles = list("AI", "Cyborg")
protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_candidates = 2
weight = 4
cost = 10
- requirements = list(40,30,30,20,20,15,15,15,10,10)
- high_population_requirement = 15
+ requirements = list(101,101,101,101,101,101,101,101,101,101)
+ high_population_requirement = 101
+ antag_cap = list(2,2,2,2,2,2,2,2,2,2) // Can pick 3 per team, but rare enough it doesn't matter.
var/list/datum/team/brother_team/pre_brother_teams = list()
- var/const/team_amount = 2 // Hard limit on brother teams if scaling is turned off
var/const/min_team_size = 2
/datum/dynamic_ruleset/roundstart/traitorbro/pre_execute()
- var/num_teams = team_amount
- var/bsc = CONFIG_GET(number/brother_scaling_coeff)
- if(bsc)
- num_teams = max(1, round(num_players() / bsc))
-
+ var/num_teams = (antag_cap[indice_pop]/min_team_size) * (scaled_times + 1) // 1 team per scaling
for(var/j = 1 to num_teams)
if(candidates.len < min_team_size || candidates.len < required_candidates)
break
var/datum/team/brother_team/team = new
var/team_size = prob(10) ? min(3, candidates.len) : 2
for(var/k = 1 to team_size)
- var/mob/bro = pick(candidates)
- candidates -= bro
+ var/mob/bro = pick_n_take(candidates)
assigned += bro.mind
team.add_member(bro.mind)
bro.mind.special_role = "brother"
@@ -109,16 +105,17 @@
protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_candidates = 1
weight = 3
- cost = 30
- requirements = list(80,70,60,50,40,20,20,10,10,10)
+ cost = 15
+ scaling_cost = 15
+ requirements = list(101,101,101,101,101,101,101,101,101,101)
high_population_requirement = 10
+ antag_cap = list(1,1,1,1,1,2,2,2,2,3)
var/team_mode_probability = 30
/datum/dynamic_ruleset/roundstart/changeling/pre_execute()
- var/num_changelings = min(round(mode.candidates.len / 10) + 1, candidates.len)
+ var/num_changelings = antag_cap[indice_pop] * (scaled_times + 1)
for (var/i = 1 to num_changelings)
- var/mob/M = pick(candidates)
- candidates -= M
+ var/mob/M = pick_n_take(candidates)
assigned += M.mind
M.mind.restricted_roles = restricted_roles
M.mind.special_role = ROLE_CHANGELING
@@ -126,7 +123,7 @@
/datum/dynamic_ruleset/roundstart/changeling/execute()
var/team_mode = FALSE
- if(prob(team_mode_probability))
+ if(prob(team_mode_probability))
team_mode = TRUE
var/list/team_objectives = subtypesof(/datum/objective/changeling_team_objective)
var/list/possible_team_objectives = list()
@@ -153,6 +150,7 @@
/datum/dynamic_ruleset/roundstart/wizard
name = "Wizard"
config_tag = "wizard"
+ persistent = TRUE
antag_flag = ROLE_WIZARD
antag_datum = /datum/antagonist/wizard
minimum_required_age = 14
@@ -160,8 +158,8 @@
required_candidates = 1
weight = 1
cost = 30
- requirements = list(90,90,70,40,30,20,10,10,10,10)
- high_population_requirement = 10
+ requirements = list(101,101,101,60,50,50,50,50,50,50)
+ high_population_requirement = 50
var/list/roundstart_wizards = list()
/datum/dynamic_ruleset/roundstart/wizard/acceptable(population=0, threat=0)
@@ -174,22 +172,38 @@
/datum/dynamic_ruleset/roundstart/wizard/pre_execute()
if(GLOB.wizardstart.len == 0)
return FALSE
-
- var/mob/M = pick(candidates)
+ mode.antags_rolled += 1
+ var/mob/M = pick_n_take(candidates)
if (M)
- candidates -= M
assigned += M.mind
M.mind.assigned_role = ROLE_WIZARD
M.mind.special_role = ROLE_WIZARD
-
+
return TRUE
/datum/dynamic_ruleset/roundstart/wizard/execute()
for(var/datum/mind/M in assigned)
M.current.forceMove(pick(GLOB.wizardstart))
M.add_antag_datum(new antag_datum())
+ roundstart_wizards += M
return TRUE
-
+
+/datum/dynamic_ruleset/roundstart/wizard/rule_process() // i can literally copy this from are_special_antags_dead it's great
+ for(var/datum/mind/wizard in roundstart_wizards)
+ if(isliving(wizard.current) && wizard.current.stat!=DEAD)
+ return FALSE
+
+ for(var/obj/item/phylactery/P in GLOB.poi_list) //TODO : IsProperlyDead()
+ if(P.mind && P.mind.has_antag_datum(/datum/antagonist/wizard))
+ return FALSE
+
+ if(SSevents.wizardmode) //If summon events was active, turn it off
+ SSevents.toggleWizardmode()
+ SSevents.resetFrequency()
+
+ return RULESET_STOP_PROCESSING
+
+
//////////////////////////////////////////////
// //
// BLOOD CULT //
@@ -207,26 +221,23 @@
required_candidates = 2
weight = 3
cost = 30
- requirements = list(100,90,80,60,40,30,10,10,10,10)
- high_population_requirement = 10
- pop_per_requirement = 5
+ requirements = list(101,101,101,80,70,60,50,50,50,50)
+ high_population_requirement = 50
flags = HIGHLANDER_RULESET
- var/cultist_cap = list(2,2,2,3,3,4,4,4,4,4)
+ antag_cap = list(2,2,2,3,3,4,4,4,4,4)
var/datum/team/cult/main_cult
/datum/dynamic_ruleset/roundstart/bloodcult/ready(forced = FALSE)
- var/indice_pop = min(10,round(mode.roundstart_pop_ready/pop_per_requirement)+1)
- required_candidates = cultist_cap[indice_pop]
+ required_candidates = antag_cap[indice_pop]
. = ..()
/datum/dynamic_ruleset/roundstart/bloodcult/pre_execute()
- var/indice_pop = min(10,round(mode.roundstart_pop_ready/pop_per_requirement)+1)
- var/cultists = cultist_cap[indice_pop]
+ var/cultists = antag_cap[indice_pop]
+ mode.antags_rolled += cultists
for(var/cultists_number = 1 to cultists)
if(candidates.len <= 0)
break
- var/mob/M = pick(candidates)
- candidates -= M
+ var/mob/M = pick_n_take(candidates)
assigned += M.mind
M.mind.special_role = ROLE_CULTIST
M.mind.restricted_roles = restricted_roles
@@ -238,7 +249,7 @@
var/datum/antagonist/cult/new_cultist = new antag_datum()
new_cultist.cult_team = main_cult
new_cultist.give_equipment = TRUE
- M.add_antag_datum(new_cultist)
+ M.add_antag_datum(new_cultist)
main_cult.setup_objectives()
return TRUE
@@ -268,28 +279,24 @@
required_candidates = 5
weight = 3
cost = 40
- requirements = list(90,90,90,80,60,40,30,20,10,10)
- high_population_requirement = 10
- pop_per_requirement = 5
+ requirements = list(100,90,80,70,60,50,50,50,50,50)
+ high_population_requirement = 50
flags = HIGHLANDER_RULESET
- var/operative_cap = list(2,2,2,3,3,3,4,4,5,5)
+ antag_cap = list(1,1,2,3,4,5,5,5,5,5)
var/datum/team/nuclear/nuke_team
/datum/dynamic_ruleset/roundstart/nuclear/ready(forced = FALSE)
- var/indice_pop = min(10,round(mode.roundstart_pop_ready/pop_per_requirement)+1)
- required_candidates = operative_cap[indice_pop]
+ required_candidates = antag_cap[indice_pop]
. = ..()
/datum/dynamic_ruleset/roundstart/nuclear/pre_execute()
// If ready() did its job, candidates should have 5 or more members in it
-
- var/indice_pop = min(10,round(mode.roundstart_pop_ready/5)+1)
- var/operatives = operative_cap[indice_pop]
+ var/operatives = antag_cap[indice_pop]
+ mode.antags_rolled += operatives
for(var/operatives_number = 1 to operatives)
if(candidates.len <= 0)
break
- var/mob/M = pick(candidates)
- candidates -= M
+ var/mob/M = pick_n_take(candidates)
assigned += M.mind
M.mind.assigned_role = "Nuclear Operative"
M.mind.special_role = "Nuclear Operative"
@@ -347,7 +354,7 @@
// //
//////////////////////////////////////////////
-/datum/dynamic_ruleset/roundstart/delayed/revs
+/datum/dynamic_ruleset/roundstart/revs
name = "Revolution"
config_tag = "revolution"
persistent = TRUE
@@ -358,63 +365,98 @@
restricted_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_candidates = 3
weight = 2
+ delay = 7 MINUTES
cost = 35
- requirements = list(101,101,70,40,30,20,10,10,10,10)
- high_population_requirement = 10
- delay = 5 MINUTES
+ requirements = list(101,101,101,60,50,50,50,50,50,50)
+ high_population_requirement = 50
+ antag_cap = list(3,3,3,3,3,3,3,3,3,3)
flags = HIGHLANDER_RULESET
// I give up, just there should be enough heads with 35 players...
minimum_players = 35
var/datum/team/revolution/revolution
- var/finished = 0
+ var/finished = FALSE
-/datum/dynamic_ruleset/roundstart/delayed/revs/execute()
- var/max_canditates = 4
- revolution = new()
- for(var/i = 1 to max_canditates)
+/datum/dynamic_ruleset/roundstart/revs/pre_execute()
+ var/max_candidates = antag_cap[indice_pop]
+ mode.antags_rolled += max_candidates
+ for(var/i = 1 to max_candidates)
if(candidates.len <= 0)
break
- var/mob/M = pick(candidates)
- candidates -= M
+ var/mob/M = pick_n_take(candidates)
assigned += M.mind
M.mind.restricted_roles = restricted_roles
M.mind.special_role = antag_flag
- var/datum/antagonist/rev/head/new_head = new antag_datum()
- new_head.give_flash = TRUE
- new_head.give_hud = TRUE
- new_head.remove_clumsy = TRUE
- M.mind.add_antag_datum(new_head,revolution)
-
- revolution.update_objectives()
- revolution.update_heads()
- SSshuttle.registerHostileEnvironment(src)
-
return TRUE
-
-/datum/dynamic_ruleset/roundstart/delayed/revs/rule_process()
- if(check_rev_victory())
- finished = 1
- else if(check_heads_victory())
- finished = 2
- return
-/datum/dynamic_ruleset/roundstart/delayed/revs/check_finished()
- if(CONFIG_GET(keyed_list/continuous)["revolution"])
- if(finished)
- SSshuttle.clearHostileEnvironment(src)
- return ..()
- if(finished != 0)
+/datum/dynamic_ruleset/roundstart/revs/execute()
+ var/success = TRUE
+ revolution = new()
+ for(var/datum/mind/M in assigned)
+ if(check_eligible(M))
+ var/datum/antagonist/rev/head/new_head = new antag_datum()
+ new_head.give_flash = TRUE
+ new_head.give_hud = TRUE
+ new_head.remove_clumsy = TRUE
+ M.add_antag_datum(new_head,revolution)
+ else
+ assigned -= M
+ log_game("DYNAMIC: [ruletype] [name] discarded [M.name] from head revolutionary due to ineligibility.")
+ if(!revolution.members.len)
+ success = FALSE
+ log_game("DYNAMIC: [ruletype] [name] failed to get any eligible headrevs. Refunding [cost] threat.")
+ if(success)
+ revolution.update_objectives()
+ revolution.update_heads()
+ SSshuttle.registerHostileEnvironment(src)
+ return TRUE
+ return FALSE
+
+/datum/dynamic_ruleset/roundstart/revs/clean_up()
+ qdel(revolution)
+ ..()
+
+/datum/dynamic_ruleset/roundstart/revs/rule_process()
+ if(check_rev_victory())
+ finished = REVOLUTION_VICTORY
+ return RULESET_STOP_PROCESSING
+ else if (check_heads_victory())
+ finished = STATION_VICTORY
+ SSshuttle.clearHostileEnvironment(src)
+ priority_announce("It appears the mutiny has been quelled. Please return yourself and your incapacitated colleagues to work. \
+ We have remotely blacklisted the head revolutionaries from your cloning software to prevent accidental cloning.", null, "attention", null, "Central Command Loyalty Monitoring Division")
+
+ for(var/datum/mind/M in revolution.members) // Remove antag datums and prevents podcloned or exiled headrevs restarting rebellions.
+ if(M.has_antag_datum(/datum/antagonist/rev/head))
+ var/datum/antagonist/rev/head/R = M.has_antag_datum(/datum/antagonist/rev/head)
+ R.remove_revolutionary(FALSE, "gamemode")
+ var/mob/living/carbon/C = M.current
+ if(C.stat == DEAD)
+ C.makeUncloneable()
+ if(M.has_antag_datum(/datum/antagonist/rev))
+ var/datum/antagonist/rev/R = M.has_antag_datum(/datum/antagonist/rev)
+ R.remove_revolutionary(FALSE, "gamemode")
+ return RULESET_STOP_PROCESSING
+
+/// Checks for revhead loss conditions and other antag datums.
+/datum/dynamic_ruleset/roundstart/revs/proc/check_eligible(var/datum/mind/M)
+ var/turf/T = get_turf(M.current)
+ if(!considered_afk(M) && considered_alive(M) && is_station_level(T.z) && !M.antag_datums?.len && !HAS_TRAIT(M, TRAIT_MINDSHIELD))
+ return TRUE
+ return FALSE
+
+/datum/dynamic_ruleset/roundstart/revs/check_finished()
+ if(finished == REVOLUTION_VICTORY)
return TRUE
else
return ..()
-/datum/dynamic_ruleset/roundstart/delayed/revs/proc/check_rev_victory()
+/datum/dynamic_ruleset/roundstart/revs/proc/check_rev_victory()
for(var/datum/objective/mutiny/objective in revolution.objectives)
if(!(objective.check_completion()))
return FALSE
return TRUE
-/datum/dynamic_ruleset/roundstart/delayed/revs/proc/check_heads_victory()
+/datum/dynamic_ruleset/roundstart/revs/proc/check_heads_victory()
for(var/datum/mind/rev_mind in revolution.head_revolutionaries())
var/turf/T = get_turf(rev_mind.current)
if(!considered_afk(rev_mind) && considered_alive(rev_mind) && is_station_level(T.z))
@@ -422,11 +464,11 @@
return FALSE
return TRUE
-/datum/dynamic_ruleset/roundstart/delayed/revs/round_result()
- if(finished == 1)
+/datum/dynamic_ruleset/roundstart/revs/round_result()
+ if(finished == REVOLUTION_VICTORY)
SSticker.mode_result = "win - heads killed"
SSticker.news_report = REVS_WIN
- else if(finished == 2)
+ else if(finished == STATION_VICTORY)
SSticker.mode_result = "loss - rev heads killed"
SSticker.news_report = REVS_LOSE
@@ -470,10 +512,11 @@
restricted_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_candidates = 4
weight = 3
- cost = 0
- requirements = list(101,101,101,101,101,101,101,101,101,101)
- high_population_requirement = 101
+ cost = 35
+ requirements = list(101,101,101,80,70,60,50,50,50,50)
+ high_population_requirement = 50
flags = HIGHLANDER_RULESET
+ antag_cap = list(2,3,3,4,4,4,4,4,4,4)
var/ark_time
/datum/dynamic_ruleset/roundstart/clockcult/pre_execute()
@@ -486,15 +529,15 @@
for(var/datum/parsed_map/PM in reebes)
PM.initTemplateBounds()
- var/starter_servants = 4
- var/number_players = num_players()
+ var/starter_servants = antag_cap[indice_pop]
+ var/number_players = mode.roundstart_pop_ready
if(number_players > 30)
number_players -= 30
- starter_servants += round(number_players / 10)
- starter_servants = min(starter_servants, 8)
+ starter_servants += min(round(number_players / 10), 5)
+ mode.antags_rolled += starter_servants
+ GLOB.clockwork_vitality += 50 * starter_servants
for (var/i in 1 to starter_servants)
- var/mob/servant = pick(candidates)
- candidates -= servant
+ var/mob/servant = pick_n_take(candidates)
assigned += servant.mind
servant.mind.assigned_role = ROLE_SERVANT_OF_RATVAR
servant.mind.special_role = ROLE_SERVANT_OF_RATVAR
@@ -603,23 +646,16 @@
cost = 0
requirements = list(101,101,101,101,101,101,101,101,101,101)
high_population_requirement = 101
- var/devil_limit = 4 // Hard limit on devils if scaling is turned off
-
-/datum/dynamic_ruleset/roundstart/devil/pre_execute()
- var/tsc = CONFIG_GET(number/traitor_scaling_coeff)
- var/num_devils = 1
-
- if(tsc)
- num_devils = max(required_candidates, min(round(num_players() / (tsc * 3)) + 2, round(num_players() / (tsc * 1.5))))
- else
- num_devils = max(required_candidates, min(num_players(), devil_limit))
+ antag_cap = list(1,1,1,2,2,2,3,3,3,4)
+/datum/dynamic_ruleset/roundstart/devil/pre_execute()
+ var/num_devils = antag_cap[indice_pop]
+ mode.antags_rolled += num_devils
for(var/j = 0, j < num_devils, j++)
if (!candidates.len)
break
- var/mob/devil = pick(candidates)
- assigned += devil
- candidates -= devil
+ var/mob/devil = pick_n_take(candidates)
+ assigned += devil.mind
devil.mind.special_role = ROLE_DEVIL
devil.mind.restricted_roles = restricted_roles
@@ -668,13 +704,13 @@
var/datum/team/monkey/monkey_team
/datum/dynamic_ruleset/roundstart/monkey/pre_execute()
- var/carriers_to_make = max(round(num_players()/players_per_carrier, 1), 1)
+ var/carriers_to_make = max(round(mode.roundstart_pop_ready / players_per_carrier, 1), 1)
+ mode.antags_rolled += carriers_to_make
for(var/j = 0, j < carriers_to_make, j++)
if (!candidates.len)
break
- var/mob/carrier = pick(candidates)
- candidates -= carrier
+ var/mob/carrier = pick_n_take(candidates)
assigned += carrier.mind
carrier.mind.special_role = "Monkey Leader"
carrier.mind.restricted_roles = restricted_roles
@@ -743,3 +779,42 @@
var/ramp_up_final = CLAMP(round(meteorminutes/rampupdelta), 1, 10)
spawn_meteors(ramp_up_final, wavetype)
+
+//////////////////////////////////////////////
+// //
+// BLOODSUCKERS //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/roundstart/bloodsucker
+ name = "Bloodsuckers"
+ config_tag = "bloodsucker"
+ persistent = TRUE
+ antag_flag = ROLE_BLOODSUCKER
+ antag_datum = ANTAG_DATUM_BLOODSUCKER
+ minimum_required_age = 0
+ protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ restricted_roles = list("Cyborg", "AI")
+ required_candidates = 1
+ weight = 2
+ cost = 15
+ scaling_cost = 10
+ requirements = list(90,80,70,60,50,50,50,50,50,50)
+ high_population_requirement = 50
+ antag_cap = list(1,1,1,1,1,2,2,2,2,2)
+
+/datum/dynamic_ruleset/roundstart/bloodsucker/pre_execute()
+ var/num_bloodsuckers = antag_cap[indice_pop] * (scaled_times + 1)
+ for (var/i = 1 to num_bloodsuckers)
+ var/mob/M = pick_n_take(candidates)
+ assigned += M.mind
+ M.mind.special_role = ROLE_BLOODSUCKER
+ M.mind.restricted_roles = restricted_roles
+ return TRUE
+
+/datum/dynamic_ruleset/roundstart/bloodsucker/execute()
+ mode.check_start_sunlight()
+ for(var/datum/mind/M in assigned)
+ if(mode.make_bloodsucker(M))
+ mode.bloodsuckers += M
+ return TRUE
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 17e26e66af..3a258599b7 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -31,7 +31,7 @@
var/recommended_enemies = 0
var/antag_flag = null //preferences flag such as BE_WIZARD that need to be turned on for players to be antag
var/mob/living/living_antag_player = null
- var/list/datum/game_mode/replacementmode = null
+ var/datum/game_mode/replacementmode = null
var/round_converted = 0 //0: round not converted, 1: round going to convert, 2: round converted
var/reroll_friendly //During mode conversion only these are in the running
var/continuous_sanity_checked //Catches some cases where config options could be used to suggest that modes without antagonists should end when all antagonists die
@@ -81,6 +81,7 @@
///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things
/datum/game_mode/proc/post_setup(report) //Gamemodes can override the intercept report. Passing TRUE as the argument will force a report.
+ //finalize_monster_hunters() Disabled for now
if(!report)
report = !CONFIG_GET(flag/no_intercept_report)
addtimer(CALLBACK(GLOBAL_PROC, .proc/display_roundstart_logout_report), ROUNDSTART_LOGOUT_REPORT_TIME)
@@ -305,48 +306,88 @@
// The odds become:
// Player A: 150 / 250 = 0.6 = 60%
// Player B: 100 / 250 = 0.4 = 40%
-/datum/game_mode/proc/antag_pick(list/datum/candidates)
+
+//Use return list if you want a list, with the arg being the number you want returned.
+//WARNING: THIS PROC DOES NOT TAKE INTO ACCOUNT WHAT SSPersistence ALREADY HAS FOR "ADJUST ANTAG REP". If this is used more than once
+//and the person rolls more than once, they will not get even more deduction!
+//More efficient if you use return list instead of calling this multiple times
+//fail_default_pick makes it use pick() instead of antag rep if it can't find anyone
+//allow_zero_if_insufficient allows it to pick people with zero rep if there isn't enough antags
+/datum/game_mode/proc/antag_pick(list/datum/mind/candidates, return_list = FALSE, fail_default_pick = TRUE, allow_zero_if_insufficient = TRUE)
if(!CONFIG_GET(flag/use_antag_rep)) // || candidates.len <= 1)
return pick(candidates)
- // Tickets start at 100
- var/DEFAULT_ANTAG_TICKETS = CONFIG_GET(number/default_antag_tickets)
+ //whoever named the config entries is a bad person :(
- // You may use up to 100 extra tickets (double your odds)
- var/MAX_TICKETS_PER_ROLL = CONFIG_GET(number/max_tickets_per_roll)
-
-
- var/total_tickets = 0
-
- MAX_TICKETS_PER_ROLL += DEFAULT_ANTAG_TICKETS
-
- var/p_ckey
- var/p_rep
-
- for(var/datum/mind/mind in candidates)
- p_ckey = ckey(mind.key)
- total_tickets += min(SSpersistence.antag_rep[p_ckey] + DEFAULT_ANTAG_TICKETS, MAX_TICKETS_PER_ROLL)
-
- var/antag_select = rand(1,total_tickets)
- var/current = 1
-
- for(var/datum/mind/mind in candidates)
- p_ckey = ckey(mind.key)
- p_rep = SSpersistence.antag_rep[p_ckey]
-
- var/previous = current
- var/spend = min(p_rep + DEFAULT_ANTAG_TICKETS, MAX_TICKETS_PER_ROLL)
- current += spend
-
- if(antag_select >= previous && antag_select <= (current-1))
- SSpersistence.antag_rep_change[p_ckey] = -(spend - DEFAULT_ANTAG_TICKETS)
-
-// WARNING("AR_DEBUG: Player [mind.key] won spending [spend] tickets from starting value [SSpersistence.antag_rep[p_ckey]]")
-
- return mind
-
- WARNING("Something has gone terribly wrong. /datum/game_mode/proc/antag_pick failed to select a candidate. Falling back to pick()")
- return pick(candidates)
+ //Tickets you get for free
+ var/free_tickets = CONFIG_GET(number/default_antag_tickets)
+ //Max extra tickets you can use
+ var/additional_tickets = CONFIG_GET(number/max_tickets_per_roll)
+
+ var/list/ckey_to_mind = list() //this is admittedly shitcode but I'm webediting
+ var/list/prev_tickets = SSpersistence.antag_rep //cache for hyper-speed in theory. how many tickets someone has stored
+ var/list/curr_tickets = list() //how many tickets someone has for *this* antag roll, so with the free tickets
+ var/list/datum/mind/insufficient = list() //who got cucked out of an antag roll due to not having *any* tickets
+ for(var/datum/mind/M in candidates)
+ var/mind_ckey = ckey(M.key)
+ var/can_spend = min(prev_tickets[mind_ckey], additional_tickets) //they can only spend up to config/max_tickets_per_roll
+ var/amount = can_spend + free_tickets //but they get config/default_antag_tickets for free
+ if(amount <= 0) //if they don't have any
+ insufficient += M //too bad!
+ continue
+ curr_tickets[mind_ckey] = amount
+ ckey_to_mind[mind_ckey] = M //make sure we can look them up after picking
+
+ if(!return_list) //return a single guy
+ var/ckey
+ if(length(curr_tickets))
+ ckey = pickweight(curr_tickets)
+ SSpersistence.antag_rep_change[ckey] = -(curr_tickets[ckey] - free_tickets) //deduct what they spent
+ var/mind = ckey_to_mind[ckey] || (allow_zero_if_insufficient? pick(insufficient) : null) //we want their mind
+ if(!mind) //no mind
+ var/warning = "WARNING: No antagonists were successfully picked by /datum/gamemode/proc/antag_pick()![fail_default_pick? " Defaulting to pick()!":""]"
+ message_admins(warning)
+ log_game(warning)
+ if(fail_default_pick)
+ mind = pick(candidates)
+ return mind
+ else //the far more efficient and proper use of this, to get a list
+ var/list/rolled = list()
+ var/list/spend_tickets = list()
+ for(var/i in 1 to return_list)
+ if(!length(curr_tickets)) //ah heck, we're out of candidates..
+ break
+ var/ckey = pickweight(curr_tickets) //pick
+ rolled += ckey //add
+ spend_tickets[ckey] = curr_tickets[ckey] - free_tickets
+ curr_tickets -= ckey //don't roll them again
+ var/missing = return_list - length(rolled)
+ var/list/add
+ if((missing > 0) && allow_zero_if_insufficient) //need more..
+ for(var/i in 1 to missing)
+ if(!length(insufficient))
+ break //still not enough
+ var/datum/mind/M = pick_n_take(insufficient)
+ add += M
+ if(!length(rolled) && !length(add)) //if no one could normally roll AND no one can zero roll
+ var/warning = "WARNING: No antagonists were successfully picked by /datum/gamemode/proc/antag_pick()![fail_default_pick? " Defaulting to pick()!":""]"
+ message_admins(warning)
+ log_game(warning)
+ var/list/failed = list()
+ if(fail_default_pick)
+ var/list/C = candidates.Copy()
+ for(var/i in 1 to return_list)
+ if(!length(C))
+ break
+ failed += pick_n_take(C)
+ return failed //Wew, no one qualified!
+ for(var/i in 1 to length(rolled))
+ var/ckey = rolled[i]
+ SSpersistence.antag_rep_change[ckey] = -(spend_tickets[ckey]) //deduct what all of the folks who rolled spent
+ rolled[i] = ckey_to_mind[ckey] //whoever called us wants minds, not ckeys
+ if(add)
+ rolled += add
+ return rolled
/datum/game_mode/proc/get_players_for_role(role)
var/list/players = list()
diff --git a/modular_citadel/code/game/gamemodes/gangs/dominator.dm b/code/game/gamemodes/gangs/dominator.dm
similarity index 94%
rename from modular_citadel/code/game/gamemodes/gangs/dominator.dm
rename to code/game/gamemodes/gangs/dominator.dm
index c590baf62e..8c1272dcbd 100644
--- a/modular_citadel/code/game/gamemodes/gangs/dominator.dm
+++ b/code/game/gamemodes/gangs/dominator.dm
@@ -66,18 +66,18 @@
add_overlay("damage")
/obj/machinery/dominator/examine(mob/user)
- ..()
+ . = ..()
if(stat & BROKEN)
return
if(gang && gang.domination_time != NOT_DOMINATING)
if(gang.domination_time > world.time)
- to_chat(user, "Hostile Takeover in progress. Estimated [gang.domination_time_remaining()] seconds remain.")
+ . += "Hostile Takeover in progress. Estimated [gang.domination_time_remaining()] seconds remain."
else
- to_chat(user, "Hostile Takeover of [station_name()] successful. Have a great day.")
+ . += "Hostile Takeover of [station_name()] successful. Have a great day."
else
- to_chat(user, "System on standby.")
- to_chat(user, "System Integrity: [round((obj_integrity/max_integrity)*100,1)]%")
+ . += "System on standby."
+ . += "System Integrity: [round((obj_integrity/max_integrity)*100,1)]%"
/obj/machinery/dominator/process()
..()
diff --git a/modular_citadel/code/game/gamemodes/gangs/dominator_countdown.dm b/code/game/gamemodes/gangs/dominator_countdown.dm
similarity index 100%
rename from modular_citadel/code/game/gamemodes/gangs/dominator_countdown.dm
rename to code/game/gamemodes/gangs/dominator_countdown.dm
diff --git a/modular_citadel/code/game/gamemodes/gangs/gang.dm b/code/game/gamemodes/gangs/gang.dm
similarity index 100%
rename from modular_citadel/code/game/gamemodes/gangs/gang.dm
rename to code/game/gamemodes/gangs/gang.dm
diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm b/code/game/gamemodes/gangs/gang_datums.dm
similarity index 100%
rename from modular_citadel/code/game/gamemodes/gangs/gang_datums.dm
rename to code/game/gamemodes/gangs/gang_datums.dm
diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_decals.dm b/code/game/gamemodes/gangs/gang_decals.dm
similarity index 100%
rename from modular_citadel/code/game/gamemodes/gangs/gang_decals.dm
rename to code/game/gamemodes/gangs/gang_decals.dm
diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_hud.dm b/code/game/gamemodes/gangs/gang_hud.dm
similarity index 100%
rename from modular_citadel/code/game/gamemodes/gangs/gang_hud.dm
rename to code/game/gamemodes/gangs/gang_hud.dm
diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_items.dm b/code/game/gamemodes/gangs/gang_items.dm
similarity index 100%
rename from modular_citadel/code/game/gamemodes/gangs/gang_items.dm
rename to code/game/gamemodes/gangs/gang_items.dm
diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_pen.dm b/code/game/gamemodes/gangs/gang_pen.dm
similarity index 100%
rename from modular_citadel/code/game/gamemodes/gangs/gang_pen.dm
rename to code/game/gamemodes/gangs/gang_pen.dm
diff --git a/modular_citadel/code/game/gamemodes/gangs/gangs.dm b/code/game/gamemodes/gangs/gangs.dm
similarity index 100%
rename from modular_citadel/code/game/gamemodes/gangs/gangs.dm
rename to code/game/gamemodes/gangs/gangs.dm
diff --git a/modular_citadel/code/game/gamemodes/gangs/gangtool.dm b/code/game/gamemodes/gangs/gangtool.dm
similarity index 99%
rename from modular_citadel/code/game/gamemodes/gangs/gangtool.dm
rename to code/game/gamemodes/gangs/gangtool.dm
index 9e828a7042..e99455bcd5 100644
--- a/modular_citadel/code/game/gamemodes/gangs/gangtool.dm
+++ b/code/game/gamemodes/gangs/gangtool.dm
@@ -130,7 +130,7 @@
/obj/item/device/gangtool/proc/ping_gang(mob/user)
if(!can_use(user))
return
- var/message = stripped_input(user,"Discreetly send a gang-wide message.","Send Message") as null|text
+ var/message = stripped_input(user,"Discreetly send a gang-wide message.","Send Message")
if(!message || !can_use(user))
return
if(!is_station_level(user.z))
diff --git a/modular_citadel/code/game/gamemodes/gangs/implant_gang.dm b/code/game/gamemodes/gangs/implant_gang.dm
similarity index 100%
rename from modular_citadel/code/game/gamemodes/gangs/implant_gang.dm
rename to code/game/gamemodes/gangs/implant_gang.dm
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index 58f551c648..6d681f8108 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -167,7 +167,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
/obj/effect/meteor/examine(mob/user)
if(!(flags_1 & ADMIN_SPAWNED_1) && isliving(user))
SSmedals.UnlockMedal(MEDAL_METEOR, user.client)
- ..()
+ return ..()
/obj/effect/meteor/attackby(obj/item/I, mob/user, params)
if(I.tool_behaviour == TOOL_MINING)
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 1767d468ec..632d59c84d 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -144,7 +144,7 @@
/datum/outfit/syndicate/no_crystals
tc = 0
-/datum/outfit/syndicate/post_equip(mob/living/carbon/human/H)
+/datum/outfit/syndicate/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_SYNDICATE)
R.freqlock = TRUE
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index f6b1def645..f99fe5c3e4 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -4,7 +4,8 @@ GLOBAL_LIST_EMPTY(objectives)
/datum/objective
var/datum/mind/owner //The primary owner of the objective. !!SOMEWHAT DEPRECATED!! Prefer using 'team' for new code.
- var/datum/team/team //An alternative to 'owner': a team. Use this when writing new code.
+ var/datum/team/team //An alternative to 'owner': a team. Use this when writing new code.
+ var/name = "generic objective" //Name for admin prompts
var/explanation_text = "Nothing" //What that person is supposed to do.
var/team_explanation_text //For when there are multiple owners.
var/datum/mind/target = null //If they are focused on a particular person.
@@ -22,6 +23,32 @@ GLOBAL_LIST_EMPTY(objectives)
if(owner)
. += owner
+/datum/objective/proc/admin_edit(mob/admin)
+ return
+
+//Shared by few objective types
+/datum/objective/proc/admin_simple_target_pick(mob/admin)
+ var/list/possible_targets = list("Free objective")
+ var/def_value
+ for(var/datum/mind/possible_target in SSticker.minds)
+ if ((possible_target != src) && ishuman(possible_target.current))
+ possible_targets += possible_target.current
+
+
+ if(target && target.current)
+ def_value = target.current
+
+ var/mob/new_target = input(admin,"Select target:", "Objective target", def_value) as null|anything in possible_targets
+ if (!new_target)
+ return
+
+ if (new_target == "Free objective")
+ target = null
+ else
+ target = new_target.mind
+
+ update_explanation_text()
+
/datum/objective/proc/considered_escaped(datum/mind/M)
if(!considered_alive(M))
return FALSE
@@ -42,7 +69,7 @@ GLOBAL_LIST_EMPTY(objectives)
/datum/objective/proc/is_unique_objective(possible_target)
var/list/datum/mind/owners = get_owners()
for(var/datum/mind/M in owners)
- for(var/datum/objective/O in M.objectives)
+ for(var/datum/objective/O in M.get_all_objectives()) //This scope is debatable, probably should be passed in by caller.
if(istype(O, type) && O.get_target() == possible_target)
return FALSE
return TRUE
@@ -122,6 +149,7 @@ GLOBAL_LIST_EMPTY(objectives)
H.equip_in_one_of_slots(O, slots)
/datum/objective/assassinate
+ name = "assasinate"
var/target_role_type=0
martyr_compatible = 1
@@ -141,6 +169,9 @@ GLOBAL_LIST_EMPTY(objectives)
else
explanation_text = "Free Objective"
+/datum/objective/assassinate/admin_edit(mob/admin)
+ admin_simple_target_pick(admin)
+
/datum/objective/assassinate/internal
var/stolen = 0 //Have we already eliminated this target?
@@ -150,6 +181,7 @@ GLOBAL_LIST_EMPTY(objectives)
explanation_text = "Assassinate [target.name], who was obliterated"
/datum/objective/mutiny
+ name = "mutiny"
var/target_role_type=0
martyr_compatible = 1
@@ -173,6 +205,7 @@ GLOBAL_LIST_EMPTY(objectives)
explanation_text = "Free Objective"
/datum/objective/maroon
+ name = "maroon"
var/target_role_type=0
martyr_compatible = 1
@@ -191,7 +224,11 @@ GLOBAL_LIST_EMPTY(objectives)
else
explanation_text = "Free Objective"
+/datum/objective/maroon/admin_edit(mob/admin)
+ admin_simple_target_pick(admin)
+
/datum/objective/debrain
+ name = "debrain"
var/target_role_type=0
/datum/objective/debrain/find_target_by_role(role, role_type=0, invert=0)
@@ -222,7 +259,11 @@ GLOBAL_LIST_EMPTY(objectives)
else
explanation_text = "Free Objective"
+/datum/objective/debrain/admin_edit(mob/admin)
+ admin_simple_target_pick(admin)
+
/datum/objective/protect//The opposite of killing a dude.
+ name = "protect"
martyr_compatible = 1
var/target_role_type = 0
var/human_check = TRUE
@@ -243,10 +284,15 @@ GLOBAL_LIST_EMPTY(objectives)
else
explanation_text = "Free Objective"
+/datum/objective/protect/admin_edit(mob/admin)
+ admin_simple_target_pick(admin)
+
/datum/objective/protect/nonhuman
+ name = "protect nonhuman"
human_check = FALSE
/datum/objective/hijack
+ name = "hijack"
explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody."
team_explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody. Leave no team member behind."
martyr_compatible = 0 //Technically you won't get both anyway.
@@ -261,6 +307,7 @@ GLOBAL_LIST_EMPTY(objectives)
return SSshuttle.emergency.is_hijacked()
/datum/objective/block
+ name = "no organics on shuttle"
explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive."
martyr_compatible = 1
@@ -274,6 +321,7 @@ GLOBAL_LIST_EMPTY(objectives)
return TRUE
/datum/objective/purge
+ name = "no mutants on shuttle"
explanation_text = "Ensure no mutant humanoid species are present aboard the escape shuttle."
martyr_compatible = 1
@@ -288,6 +336,7 @@ GLOBAL_LIST_EMPTY(objectives)
return TRUE
/datum/objective/robot_army
+ name = "robot army"
explanation_text = "Have at least eight active cyborgs synced to you."
martyr_compatible = 0
@@ -304,6 +353,7 @@ GLOBAL_LIST_EMPTY(objectives)
return counter >= 8
/datum/objective/escape
+ name = "escape"
explanation_text = "Escape on the shuttle or an escape pod alive and without being in custody."
team_explanation_text = "Have all members of your team escape on a shuttle or pod alive, without being in custody."
@@ -316,6 +366,7 @@ GLOBAL_LIST_EMPTY(objectives)
return TRUE
/datum/objective/escape/escape_with_identity
+ name = "escape with identity"
var/target_real_name // Has to be stored because the target's real_name can change over the course of the round
var/target_missing_id
@@ -351,7 +402,11 @@ GLOBAL_LIST_EMPTY(objectives)
return TRUE
return FALSE
+/datum/objective/escape/escape_with_identity/admin_edit(mob/admin)
+ admin_simple_target_pick(admin)
+
/datum/objective/survive
+ name = "survive"
explanation_text = "Stay alive until the end."
/datum/objective/survive/check_completion()
@@ -362,6 +417,7 @@ GLOBAL_LIST_EMPTY(objectives)
return TRUE
/datum/objective/survive/exist //Like survive, but works for silicons and zombies and such.
+ name = "survive nonhuman"
/datum/objective/survive/exist/check_completion()
var/list/datum/mind/owners = get_owners()
@@ -371,6 +427,7 @@ GLOBAL_LIST_EMPTY(objectives)
return TRUE
/datum/objective/martyr
+ name = "martyr"
explanation_text = "Die a glorious death."
/datum/objective/martyr/check_completion()
@@ -383,6 +440,7 @@ GLOBAL_LIST_EMPTY(objectives)
return TRUE
/datum/objective/nuclear
+ name = "nuclear"
explanation_text = "Destroy the station with a nuclear device."
martyr_compatible = 1
@@ -393,6 +451,7 @@ GLOBAL_LIST_EMPTY(objectives)
GLOBAL_LIST_EMPTY(possible_items)
/datum/objective/steal
+ name = "steal"
var/datum/objective_item/targetinfo = null //Save the chosen item datum so we can access it later.
var/obj/item/steal_target = null //Needed for custom objectives (they're just items, not datums).
martyr_compatible = 0
@@ -430,18 +489,19 @@ GLOBAL_LIST_EMPTY(possible_items)
explanation_text = "Free objective"
return
-/datum/objective/steal/proc/select_target() //For admins setting objectives manually.
+/datum/objective/steal/admin_edit(mob/admin)
var/list/possible_items_all = GLOB.possible_items+"custom"
- var/new_target = input("Select target:", "Objective target", steal_target) as null|anything in possible_items_all
+ var/new_target = input(admin,"Select target:", "Objective target", steal_target) as null|anything in possible_items_all
if (!new_target)
return
if (new_target == "custom") //Can set custom items.
- var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item)
- if (!custom_target)
+ var/custom_path = input(admin,"Search for target item type:","Type") as null|text
+ if (!custom_path)
return
+ var/obj/item/custom_target = pick_closest_path(custom_path, make_types_fancy(subtypesof(/obj/item)))
var/custom_name = initial(custom_target.name)
- custom_name = stripped_input("Enter target name:", "Objective target", custom_name)
+ custom_name = stripped_input(admin,"Enter target name:", "Objective target", custom_name)
if (!custom_name)
return
steal_target = custom_target
@@ -449,7 +509,6 @@ GLOBAL_LIST_EMPTY(possible_items)
else
set_target(new_target)
- return steal_target
/datum/objective/steal/check_completion()
var/list/datum/mind/owners = get_owners()
@@ -476,6 +535,7 @@ GLOBAL_LIST_EMPTY(possible_items)
GLOBAL_LIST_EMPTY(possible_items_special)
/datum/objective/steal/special //ninjas are so special they get their own subtype good for them
+ name = "steal special"
/datum/objective/steal/special/New()
..()
@@ -487,8 +547,12 @@ GLOBAL_LIST_EMPTY(possible_items_special)
return set_target(pick(GLOB.possible_items_special))
/datum/objective/steal/exchange
+ name = "exchange"
martyr_compatible = 0
+/datum/objective/steal/exchange/admin_edit(mob/admin)
+ return
+
/datum/objective/steal/exchange/proc/set_faction(faction,otheragent)
target = otheragent
if(faction == "red")
@@ -508,6 +572,7 @@ GLOBAL_LIST_EMPTY(possible_items_special)
/datum/objective/steal/exchange/backstab
+ name = "prevent exchange"
/datum/objective/steal/exchange/backstab/set_faction(faction)
if(faction == "red")
@@ -519,12 +584,17 @@ GLOBAL_LIST_EMPTY(possible_items_special)
/datum/objective/download
+ name = "download"
/datum/objective/download/proc/gen_amount_goal()
target_amount = rand(20,40)
- explanation_text = "Download [target_amount] research node\s."
+ update_explanation_text()
return target_amount
+/datum/objective/download/update_explanation_text()
+ ..()
+ explanation_text = "Download [target_amount] research node\s."
+
/datum/objective/download/check_completion()
var/datum/techweb/checking = new
var/list/datum/mind/owners = get_owners()
@@ -541,13 +611,24 @@ GLOBAL_LIST_EMPTY(possible_items_special)
TD.stored_research.copy_research_to(checking)
return checking.researched_nodes.len >= target_amount
+/datum/objective/download/admin_edit(mob/admin)
+ var/count = input(admin,"How many nodes ?","Nodes",target_amount) as num|null
+ if(count)
+ target_amount = count
+ update_explanation_text()
+
/datum/objective/capture
+ name = "capture"
var/captured_amount = 0
/datum/objective/capture/proc/gen_amount_goal()
- target_amount = rand(5,10)
- explanation_text = "Capture [target_amount] lifeform\s with an energy net. Live, rare specimens are worth more."
- return target_amount
+ target_amount = rand(5,10)
+ explanation_text = "Capture [target_amount] lifeform\s with an energy net. Live, rare specimens are worth more."
+ return target_amount
+
+/datum/objective/capture/update_explanation_text()
+ . = ..()
+ explanation_text = "Capture [target_amount] lifeform\s with an energy net. Live, rare specimens are worth more."
/datum/objective/capture/check_completion()//Basically runs through all the mobs in the area to determine how much they are worth.
/*var/area/centcom/holding/A = GLOB.areas_by_type[/area/centcom/holding]
@@ -576,10 +657,16 @@ GLOBAL_LIST_EMPTY(possible_items_special)
captured_amount+=2*/ //Removed in favour of adding points on capture, in energy_net_nets.dm
return captured_amount >= target_amount
+/datum/objective/capture/admin_edit(mob/admin)
+ var/count = input(admin,"How many mobs to capture ?","capture",target_amount) as num|null
+ if(count)
+ target_amount = count
+ update_explanation_text()
//Changeling Objectives
/datum/objective/absorb
+ name = "absorb"
/datum/objective/absorb/proc/gen_amount_goal(lowbound = 4, highbound = 6)
target_amount = rand (lowbound,highbound)
@@ -595,9 +682,19 @@ GLOBAL_LIST_EMPTY(possible_items_special)
n_p ++
target_amount = min(target_amount, n_p)
- explanation_text = "Extract [target_amount] compatible genome\s."
+ update_explanation_text()
return target_amount
+/datum/objective/absorb/update_explanation_text()
+ . = ..()
+ explanation_text = "Extract [target_amount] compatible genome\s."
+
+/datum/objective/absorb/admin_edit(mob/admin)
+ var/count = input(admin,"How many people to absorb?","absorb",target_amount) as num|null
+ if(count)
+ target_amount = count
+ update_explanation_text()
+
/datum/objective/absorb/check_completion()
var/list/datum/mind/owners = get_owners()
var/absorbedcount = 0
@@ -611,6 +708,7 @@ GLOBAL_LIST_EMPTY(possible_items_special)
return absorbedcount >= target_amount
/datum/objective/absorb_most
+ name = "absorb most"
explanation_text = "Extract more compatible genomes than any other Changeling."
/datum/objective/absorb_most/check_completion()
@@ -631,6 +729,7 @@ GLOBAL_LIST_EMPTY(possible_items_special)
return TRUE
/datum/objective/absorb_changeling
+ name = "absorb changeling"
explanation_text = "Absorb another Changeling."
/datum/objective/absorb_changeling/check_completion()
@@ -653,6 +752,7 @@ GLOBAL_LIST_EMPTY(possible_items_special)
//End Changeling Objectives
/datum/objective/destroy
+ name = "destroy AI"
martyr_compatible = 1
/datum/objective/destroy/find_target()
@@ -674,10 +774,20 @@ GLOBAL_LIST_EMPTY(possible_items_special)
else
explanation_text = "Free Objective"
+/datum/objective/destroy/admin_edit(mob/admin)
+ var/list/possible_targets = active_ais(1)
+ if(possible_targets.len)
+ var/mob/new_target = input(admin,"Select target:", "Objective target") as null|anything in possible_targets
+ target = new_target.mind
+ else
+ to_chat(admin, "No active AIs with minds")
+ update_explanation_text()
+
/datum/objective/destroy/internal
var/stolen = FALSE //Have we already eliminated this target?
/datum/objective/steal_five_of_type
+ name = "steal five of"
explanation_text = "Steal at least five items!"
var/list/wanted_items = list(/obj/item)
@@ -686,10 +796,12 @@ GLOBAL_LIST_EMPTY(possible_items_special)
wanted_items = typecacheof(wanted_items)
/datum/objective/steal_five_of_type/summon_guns
+ name = "steal guns"
explanation_text = "Steal at least five guns!"
wanted_items = list(/obj/item/gun)
/datum/objective/steal_five_of_type/summon_magic
+ name = "steal magic"
explanation_text = "Steal at least five magical artefacts!"
wanted_items = list(/obj/item/spellbook, /obj/item/gun/magic, /obj/item/clothing/suit/space/hardsuit/wizard, /obj/item/scrying, /obj/item/antag_spawner/contract, /obj/item/necromantic_stone)
@@ -705,6 +817,14 @@ GLOBAL_LIST_EMPTY(possible_items_special)
stolen_count++
return stolen_count >= 5
+//Created by admin tools
+/datum/objective/custom
+ name = "custom"
+
+/datum/objective/custom/admin_edit(mob/admin)
+ var/expl = stripped_input(admin, "Custom objective:", "Objective", explanation_text)
+ if(expl)
+ explanation_text = expl
////////////////////////////////
// Changeling team objectives //
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 8459819b5b..74554ac9f8 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -14,8 +14,8 @@
false_report_weight = 10
restricted_jobs = list("AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
- required_players = 30
- required_enemies = 2
+ required_players = 20
+ required_enemies = 1
recommended_enemies = 3
enemy_minimum_age = 14
diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm
index 64aaeebacd..d54dda5353 100644
--- a/code/game/gamemodes/sandbox/h_sandbox.dm
+++ b/code/game/gamemodes/sandbox/h_sandbox.dm
@@ -25,14 +25,14 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE)
var/canisterinfo = null
var/hsbinfo = null
//items that shouldn't spawn on the floor because they would bug or act weird
- var/global/list/spawn_forbidden = list(
+ var/static/list/spawn_forbidden = list(
/obj/item/tk_grab, /obj/item/implant, // not implanter, the actual thing that is inside you
/obj/item/assembly, /obj/item/onetankbomb, /obj/item/pda/ai,
/obj/item/smallDelivery, /obj/item/projectile,
/obj/item/borg/sight, /obj/item/borg/stun, /obj/item/robot_module)
/datum/hSB/proc/update()
- var/global/list/hrefs = list(
+ var/static/list/hrefs = list(
"Space Gear",
"Suit Up (Space Travel Gear)" = "hsbsuit",
"Spawn Gas Mask" = "hsbspawn&path=[/obj/item/clothing/mask/gas]",
diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm
index 3d0931d534..c98795c90b 100644
--- a/code/game/machinery/Beacon.dm
+++ b/code/game/machinery/Beacon.dm
@@ -25,10 +25,10 @@
// update the invisibility and icon
/obj/machinery/bluespace_beacon/hide(intact)
invisibility = intact ? INVISIBILITY_MAXIMUM : 0
- updateicon()
+ update_icon()
// update the icon_state
-/obj/machinery/bluespace_beacon/proc/updateicon()
+/obj/machinery/bluespace_beacon/update_icon()
var/state="floor_beacon"
if(invisibility)
@@ -45,4 +45,4 @@
else if (Beacon.loc != loc)
Beacon.forceMove(loc)
- updateicon()
+ update_icon()
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 513fea4360..520721560a 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -12,6 +12,7 @@
density = FALSE
state_open = TRUE
circuit = /obj/item/circuitboard/machine/sleeper
+ req_access = list(ACCESS_CMO) //Used for reagent deletion and addition of non medicines
var/efficiency = 1
var/min_health = -25
var/list/available_chems
@@ -28,9 +29,27 @@
/obj/machinery/sleeper/Initialize()
. = ..()
+ create_reagents(500, NO_REACT)
occupant_typecache = GLOB.typecache_living
update_icon()
reset_chem_buttons()
+ RefreshParts()
+ add_inital_chems()
+
+/obj/machinery/sleeper/on_deconstruction()
+ var/obj/item/reagent_containers/sleeper_buffer/buffer = new (loc)
+ buffer.volume = reagents.maximum_volume
+ buffer.reagents.maximum_volume = reagents.maximum_volume
+ reagents.trans_to(buffer.reagents, reagents.total_volume)
+
+/obj/machinery/sleeper/proc/add_inital_chems()
+ for(var/i in available_chems)
+ var/datum/reagent/R = reagents.has_reagent(i)
+ if(!R)
+ reagents.add_reagent(i, (20))
+ continue
+ if(R.volume < 20)
+ reagents.add_reagent(i, (20 - R.volume))
/obj/machinery/sleeper/RefreshParts()
var/E
@@ -47,6 +66,11 @@
available_chems |= possible_chems[i]
reset_chem_buttons()
+ //Total container size 500 - 2000u
+ if(reagents)
+ reagents.maximum_volume = (500*E)
+
+
/obj/machinery/sleeper/update_icon()
icon_state = initial(icon_state)
if(state_open)
@@ -81,7 +105,42 @@
if (. & EMP_PROTECT_SELF)
return
if(is_operational() && occupant)
+ var/datum/reagent/R = pick(reagents.reagent_list)
+ inject_chem(R.id, occupant)
open_machine()
+ //Is this too much?
+ if(severity == EMP_HEAVY)
+ var/chem = pick(available_chems)
+ available_chems -= chem
+ available_chems += get_random_reagent_id()
+ reset_chem_buttons()
+
+/obj/machinery/sleeper/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/reagent_containers/sleeper_buffer))
+ var/obj/item/reagent_containers/sleeper_buffer/SB = I
+ if((SB.reagents.total_volume + reagents.total_volume) < reagents.maximum_volume)
+ SB.reagents.trans_to(reagents, SB.reagents.total_volume)
+ visible_message("[user] places the [SB] into the [src].")
+ qdel(SB)
+ return
+ else
+ SB.reagents.trans_to(reagents, SB.reagents.total_volume)
+ visible_message("[user] adds as much as they can to the [src] from the [SB].")
+ return
+ if(istype(I, /obj/item/reagent_containers))
+ var/obj/item/reagent_containers/RC = I
+ if(RC.reagents.total_volume == 0)
+ to_chat(user, "The [I] is empty!")
+ for(var/datum/reagent/R in RC.reagents.reagent_list)
+ if((obj_flags & EMAGGED) || (allowed(usr)))
+ break
+ if(!istype(R, /datum/reagent/medicine))
+ visible_message("The [src] gives out a hearty boop and rejects the [I]. The Sleeper's screen flashes with a pompous \"Medicines only, please.\"")
+ return
+ RC.reagents.trans_to(reagents, 1000)
+ visible_message("[user] adds as much as they can to the [src] from the [I].")
+ return
+
/obj/machinery/sleeper/MouseDrop_T(mob/target, mob/user)
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser())
@@ -122,16 +181,18 @@
open_machine()
/obj/machinery/sleeper/AltClick(mob/user)
+ . = ..()
if(!user.canUseTopic(src, !issilicon(user)))
return
if(state_open)
close_machine()
else
open_machine()
+ return TRUE
/obj/machinery/sleeper/examine(mob/user)
- ..()
- to_chat(user, "Alt-click [src] to [state_open ? "close" : "open"] it.")
+ . = ..()
+ . += "Alt-click [src] to [state_open ? "close" : "open"] it."
/obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
@@ -141,18 +202,24 @@
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
- ui = new(user, src, ui_key, "sleeper", name, 375, 550, master_ui, state)
+ ui = new(user, src, ui_key, "sleeper", name, 550, 700, master_ui, state)
ui.open()
/obj/machinery/sleeper/ui_data()
var/list/data = list()
data["occupied"] = occupant ? 1 : 0
data["open"] = state_open
+ data["efficiency"] = efficiency
+ data["current_vol"] = reagents.total_volume
+ data["tot_capacity"] = reagents.maximum_volume
data["chems"] = list()
for(var/chem in available_chems)
- var/datum/reagent/R = GLOB.chemical_reagents_list[chem]
- data["chems"] += list(list("name" = R.name, "id" = R.id, "allowed" = chem_allowed(chem)))
+ var/datum/reagent/R = reagents.has_reagent(chem)
+ R = GLOB.chemical_reagents_list[chem]
+ data["synthchems"] += list(list("name" = R.name, "id" = R.id, "synth_allowed" = synth_allowed(chem)))
+ for(var/datum/reagent/R in reagents.reagent_list)
+ data["chems"] += list(list("name" = R.name, "id" = R.id, "vol" = R.volume, "purity" = R.purity, "allowed" = chem_allowed(R.id)))
data["occupant"] = list()
var/mob/living/mob_occupant = occupant
@@ -184,8 +251,15 @@
if(mob_occupant.reagents && mob_occupant.reagents.reagent_list.len)
for(var/datum/reagent/R in mob_occupant.reagents.reagent_list)
data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume))
+ data["occupant"]["failing_organs"] = list()
+ var/mob/living/carbon/C = mob_occupant
+ if(C)
+ for(var/obj/item/organ/Or in C.getFailingOrgans())
+ if(istype(Or, /obj/item/organ/brain))
+ continue
+ data["occupant"]["failing_organs"] += list(list("name" = Or.name))
+
if(mob_occupant.has_dna()) // Blood-stuff is mostly a copy-paste from the healthscanner.
- var/mob/living/carbon/C = mob_occupant
var/blood_id = C.get_blood_id()
if(blood_id)
data["occupant"]["blood"] = list() // We can start populating this list.
@@ -196,7 +270,7 @@
blood_type = R.name
else
blood_type = blood_id
- data["occupant"]["blood"]["maxBloodVolume"] = BLOOD_VOLUME_NORMAL
+ data["occupant"]["blood"]["maxBloodVolume"] = (BLOOD_VOLUME_NORMAL*C.blood_ratio)
data["occupant"]["blood"]["currentBloodVolume"] = C.blood_volume
data["occupant"]["blood"]["dangerBloodVolume"] = BLOOD_VOLUME_SAFE
data["occupant"]["blood"]["bloodType"] = blood_type
@@ -216,24 +290,49 @@
. = TRUE
if("inject")
var/chem = params["chem"]
+ var/amount = text2num(params["volume"])
if(!is_operational() || !mob_occupant)
return
if(mob_occupant.health < min_health && chem != "epinephrine")
return
- if(inject_chem(chem, usr))
+ if(inject_chem(chem, usr, amount))
. = TRUE
if(scrambled_chems && prob(5))
to_chat(usr, "Chemical system re-route detected, results may not be as expected!")
+ if("synth")
+ var/chem = params["chem"]
+ if(!is_operational())
+ return
+ reagents.add_reagent(chem_buttons[chem], 10) //other_purity = 0.75 for when the mechanics are in
+ if("purge")
+ var/chem = params["chem"]
+ if(allowed(usr))
+ if(!is_operational())
+ return
+ reagents.remove_reagent(chem, 10)
+ return
+ if(chem in available_chems)
+ if(!is_operational())
+ return
+ /*var/datum/reagent/R = reagents.has_reagent(chem) //For when purity effects are in
+ if(R.purity < 0.8)*/
+ reagents.remove_reagent(chem, 10)
+ else
+ visible_message("Access Denied.")
+ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+
/obj/machinery/sleeper/emag_act(mob/user)
. = ..()
+ obj_flags |= EMAGGED
scramble_chem_buttons()
to_chat(user, "You scramble the sleeper's user interface!")
return TRUE
-/obj/machinery/sleeper/proc/inject_chem(chem, mob/user)
- if((chem in available_chems) && chem_allowed(chem))
- occupant.reagents.add_reagent(chem_buttons[chem], 10) //emag effect kicks in here so that the "intended" chem is used for all checks, for extra FUUU
+//trans to
+/obj/machinery/sleeper/proc/inject_chem(chem, mob/user, volume = 10)
+ if(chem_allowed(chem))
+ reagents.trans_id_to(occupant, chem, volume)//emag effect kicks in here so that the "intended" chem is used for all checks, for extra FUUU
if(user)
log_combat(user, occupant, "injected [chem] into", addition = "via [src]")
return TRUE
@@ -246,6 +345,14 @@
var/occ_health = mob_occupant.health > min_health || chem == "epinephrine"
return amount && occ_health
+/obj/machinery/sleeper/proc/synth_allowed(chem)
+ var/datum/reagent/R = reagents.has_reagent(chem)
+ if(!R)
+ return TRUE
+ if(R.volume < 50)
+ return TRUE
+ return FALSE
+
/obj/machinery/sleeper/proc/reset_chem_buttons()
scrambled_chems = FALSE
LAZYINITLIST(chem_buttons)
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 667c1f6054..5f44fccdac 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -113,11 +113,6 @@ Class Procs:
var/atom/movable/occupant = null
var/speed_process = FALSE // Process as fast as possible?
var/obj/item/circuitboard/circuit // Circuit to be created and inserted when the machinery is created
- var/obj/item/card/id/inserted_scan_id
- var/obj/item/card/id/inserted_modify_id
- var/list/region_access = null // For the identification console (card.dm)
- var/list/head_subordinates = null // For the identification console (card.dm)
- var/authenticated = 0 // For the identification console (card.dm)
var/interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE
@@ -186,8 +181,9 @@ Class Procs:
if(isliving(A))
var/mob/living/L = A
L.update_canmove()
- SEND_SIGNAL(src, COMSIG_MACHINE_EJECT_OCCUPANT, occupant)
- occupant = null
+ if(occupant)
+ SEND_SIGNAL(src, COMSIG_MACHINE_EJECT_OCCUPANT, occupant)
+ occupant = null
/obj/machinery/proc/can_be_occupant(atom/movable/am)
return occupant_typecache ? is_type_in_typecache(am, occupant_typecache) : isliving(am)
@@ -473,8 +469,6 @@ Class Procs:
. += "It's falling apart!"
if(user.research_scanner && component_parts)
. += display_parts(user, TRUE)
- if(inserted_scan_id || inserted_modify_id)
- . += "Alt-click to eject the ID card."
//called on machinery construction (i.e from frame to machinery) but not on initialization
/obj/machinery/proc/on_construction()
@@ -509,73 +503,3 @@ Class Procs:
. = . % 9
AM.pixel_x = -8 + ((.%3)*8)
AM.pixel_y = -8 + (round( . / 3)*8)
-
-/obj/machinery/proc/id_insert_scan(mob/user, obj/item/card/id/I)
- I = user.get_active_held_item()
- if(istype(I))
- if(inserted_scan_id)
- to_chat(user, "There's already an ID card in the console!")
- return
- if(!user.transferItemToLoc(I, src))
- return
- inserted_scan_id = I
- user.visible_message("[user] inserts an ID card into the console.", \
- "You insert the ID card into the console.")
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
- updateUsrDialog()
-
-/obj/machinery/proc/id_eject_scan(mob/user)
- if(!inserted_scan_id)
- to_chat(user, "There's no ID card in the console!")
- return
- if(inserted_scan_id)
- inserted_scan_id.forceMove(drop_location())
- if(!issilicon(user) && Adjacent(user))
- user.put_in_hands(inserted_scan_id)
- inserted_scan_id = null
- user.visible_message("[user] gets an ID card from the console.", \
- "You get the ID card from the console.")
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
- updateUsrDialog()
-
-/obj/machinery/proc/id_eject_modify(mob/user)
- if(inserted_modify_id)
- GLOB.data_core.manifest_modify(inserted_modify_id.registered_name, inserted_modify_id.assignment)
- inserted_modify_id.update_label()
- inserted_modify_id.forceMove(drop_location())
- if(!issilicon(user) && Adjacent(user))
- user.put_in_hands(inserted_modify_id)
- user.visible_message("[user] gets an ID card from the console.", \
- "You get the ID card from the console.")
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
- inserted_modify_id = null
- region_access = null
- head_subordinates = null
- updateUsrDialog()
-
-/obj/machinery/proc/id_insert_modify(mob/user)
- var/obj/item/card/id/I = user.get_active_held_item()
- if(istype(I))
- if(inserted_modify_id)
- to_chat(user, "There's already an ID card in the console!")
- return
- if(!user.transferItemToLoc(I, src))
- return
- inserted_modify_id = I
- user.visible_message("[user] inserts an ID card into the console.", \
- "You insert the ID card into the console.")
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
- updateUsrDialog()
-
-/obj/machinery/AltClick(mob/user)
- . = ..()
- if(!user.canUseTopic(src, !issilicon(user)) || !is_operational())
- return
- if(inserted_modify_id)
- id_eject_modify(user)
- authenticated = FALSE
- return
- if(inserted_scan_id)
- id_eject_scan(user)
- authenticated = FALSE
- return
diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm
index cac29404d2..1703ce57d1 100644
--- a/code/game/machinery/ai_slipper.dm
+++ b/code/game/machinery/ai_slipper.dm
@@ -14,8 +14,8 @@
req_access = list(ACCESS_AI_UPLOAD)
/obj/machinery/ai_slipper/examine(mob/user)
- ..()
- to_chat(user, "It has [uses] uses of foam remaining.")
+ . = ..()
+ . += "It has [uses] uses of foam remaining."
/obj/machinery/ai_slipper/power_change()
if(stat & BROKEN)
diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm
index 99200e510e..b41910f010 100644
--- a/code/game/machinery/aug_manipulator.dm
+++ b/code/game/machinery/aug_manipulator.dm
@@ -11,13 +11,13 @@
var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi')
/obj/machinery/aug_manipulator/examine(mob/user)
- ..()
+ . = ..()
if(storedpart)
- to_chat(user, "Alt-click to eject the limb.")
+ . += "Alt-click to eject the limb."
/obj/machinery/aug_manipulator/Initialize()
- initial_icon_state = initial(icon_state)
- return ..()
+ initial_icon_state = initial(icon_state)
+ return ..()
/obj/machinery/aug_manipulator/update_icon()
cut_overlays()
@@ -132,8 +132,8 @@
..()
if(!user.canUseTopic(src))
return
- else
- eject_part(user)
+ eject_part(user)
+ return TRUE
/obj/machinery/aug_manipulator/power_change()
..()
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 1c6e21491c..bdb90c4c97 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -176,7 +176,7 @@
matching_designs.Cut()
for(var/v in stored_research.researched_designs)
- var/datum/design/D = stored_research.researched_designs[v]
+ var/datum/design/D = SSresearch.techweb_design_by_id(v)
if(findtext(D.name,href_list["to_search"]))
matching_designs.Add(D)
updateUsrDialog()
@@ -252,7 +252,7 @@
dat += materials_printout()
for(var/v in stored_research.researched_designs)
- var/datum/design/D = stored_research.researched_designs[v]
+ var/datum/design/D = SSresearch.techweb_design_by_id(v)
if(!(selected_category in D.category))
continue
@@ -366,7 +366,7 @@
/obj/machinery/autolathe/proc/adjust_hacked(state)
hacked = state
for(var/id in SSresearch.techweb_designs)
- var/datum/design/D = SSresearch.techweb_designs[id]
+ var/datum/design/D = SSresearch.techweb_design_by_id(id)
if((D.build_type & AUTOLATHE) && ("hacked" in D.category))
if(hacked)
stored_research.add_design(D)
diff --git a/code/game/machinery/bloodbankgen.dm b/code/game/machinery/bloodbankgen.dm
index c489f6c9c9..c92e55084d 100644
--- a/code/game/machinery/bloodbankgen.dm
+++ b/code/game/machinery/bloodbankgen.dm
@@ -12,7 +12,6 @@
var/filling = FALSE
var/obj/item/reagent_containers/blood/bag = null
var/obj/item/reagent_containers/blood/outbag = null
- var/bloodstored = 0
var/maxbloodstored = 1000
var/menustat = "menu"
var/efficiency = 0
@@ -20,7 +19,7 @@
/obj/machinery/bloodbankgen/Initialize()
. = ..()
- create_reagents(1000)
+ create_reagents(maxbloodstored, AMOUNT_VISIBLE)
update_icon()
/obj/machinery/bloodbankgen/Destroy()
@@ -28,12 +27,13 @@
QDEL_NULL(outbag)
return ..()
-/obj/machinery/bloodbankgen/contents_explosion(severity, target)
- ..()
+/obj/machinery/bloodbankgen/examine(mob/user)
+ . = ..()
if(bag)
- bag.ex_act(severity, target)
+ . += "It has \a [bag.name] hooked to its input slot. The counter reads: \"Current Capacity: [bag.reagents.total_volume] of [bag.reagents.maximum_volume]\""
if(outbag)
- outbag.ex_act(severity, target)
+ . += "It has \a [bag.name] hooked to its output slot. The counter reads: \"Current Capacity: [outbag.reagents.total_volume] of [outbag.reagents.maximum_volume]\""
+
/obj/machinery/bloodbankgen/handle_atom_del(atom/A)
..()
@@ -115,80 +115,48 @@
/obj/machinery/bloodbankgen/process()
if(!is_operational())
- return PROCESS_KILL
-
- bloodstored = reagents.total_volume
+ return
var/transfer_amount = 20
if(draining)
- if(reagents.total_volume >= reagents.maximum_volume)
- draining = FALSE
+ if(reagents.total_volume >= reagents.maximum_volume || !bag || !bag.reagents.total_volume)
+ beep_stop_pumping()
return
-
- if(bag)
- if(bag.reagents.total_volume)
- var/datum/reagent/blood/B = bag.reagents.has_reagent("blood")
- if(B)
- var/amount = reagents.maximum_volume - reagents.total_volume //monitor the machine's internal storage
- amount = min(amount, transfer_amount)
- if(!amount)
- draining = FALSE
- updateUsrDialog()
- visible_message("[src] beeps loudly.")
- playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
- return
-
- if(bag.blood_type == "SY") //no infinite loops using synthetics.
- reagents.add_reagent("syntheticblood", amount)
- else
- reagents.add_reagent("syntheticblood", (amount+(5*efficiency)))
-
- if(bag.reagents.total_volume >= amount)
- bag.reagents.remove_reagent("blood", amount)
- else
- visible_message("[src] beeps loudly.")
- playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
- draining = FALSE
-
- bag.update_icon()
- update_icon()
- updateUsrDialog()
- else
- draining = FALSE
- updateUsrDialog()
+ var/blood_amount = bag.reagents.get_reagent_amount("blood")
+ //monitor the machine and blood bag's reagents storage.
+ var/amount = min(blood_amount, min(transfer_amount, reagents.maximum_volume - reagents.total_volume))
+ if(!amount)
+ beep_stop_pumping()
return
+ var/bonus = bag.blood_type == "SY" ? 0 : 5 * efficiency //no infinite loops using synthetics.
+ reagents.add_reagent("syntheticblood", amount + bonus)
+ bag.reagents.remove_reagent("blood", amount)
+ update_icon()
if(filling)
- if(!reagents || !reagents.total_volume)
- filling = FALSE //there ain't anything in the machine yo.
+ if(!reagents.total_volume || !outbag || outbag.reagents.total_volume >= outbag.reagents.maximum_volume)
+ beep_stop_pumping("[src] pings.", TRUE)
return
- if(outbag && outbag.reagents.total_volume < outbag.reagents.maximum_volume)
- var/amount = outbag.reagents.maximum_volume - outbag.reagents.total_volume //monitor the output bag's internal storage
- amount = min(amount, transfer_amount)
- if(!amount)
- filling = FALSE
- visible_message("[src] pings.")
- playsound(loc, 'sound/machines/beep.ogg', 50, 1)
- updateUsrDialog()
- return
+ //monitor the output bag's reagents storage.
+ var/amount = min(transfer_amount, outbag.reagents.maximum_volume - outbag.reagents.total_volume)
+ reagents.trans_to(outbag, amount)
+ update_icon()
- reagents.trans_to(outbag, amount)
- outbag.update_icon()
- update_icon()
- updateUsrDialog()
- else
- visible_message("[src] pings.")
- playsound(loc, 'sound/machines/beep.ogg', 50, 1)
- filling = FALSE
- updateUsrDialog()
- return
+/obj/machinery/bloodbankgen/proc/beep_stop_pumping(msg = "[src] beeps loudly.", out_instead_of_in = FALSE)
+ if(out_instead_of_in)
+ filling = FALSE
+ else
+ draining = FALSE
+ updateUsrDialog()
+ audible_message(msg)
+ playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
/obj/machinery/bloodbankgen/attackby(obj/item/O, mob/user, params)
if(user.a_intent == INTENT_HARM)
return ..()
- if(default_deconstruction_screwdriver(user, "bloodbank-off", "bloodbank-off", O))
+ if(default_deconstruction_screwdriver(user, "bloodbank-off", "bloodbank-off", O) || default_unfasten_wrench(user, O, 20) == SUCCESSFUL_UNFASTEN)
if(bag)
var/obj/item/reagent_containers/blood/B = bag
B.forceMove(drop_location())
@@ -204,31 +172,37 @@
return
if(istype(O, /obj/item/reagent_containers/blood))
- . = 1 //no afterattack
- if(!panel_open)
- if(bag && outbag)
- to_chat(user, "This machine already has bags attached.")
-
- if(!bag && !outbag)
- var/choice = alert(user, "Choose where to place [O]", "", "Input", "Cancel", "Output")
- switch(choice)
- if("Cancel")
- return FALSE
- if("Input")
- attachinput(O, user)
- if("Output")
- attachoutput(O, user)
- else if(!bag)
- attachinput(O, user)
- else if(!outbag)
- attachoutput(O, user)
- else
- to_chat(user, "Close the maintenance panel first.")
- return
+ . = TRUE //no afterattack
+ var/msg
+ if(panel_open)
+ . += "Close the maintenance panel"
+ if(!anchored)
+ . += "[msg ? " and a" : "A"]nchor its bolts"
+ if(length(msg))
+ to_chat(user, "[msg] first.")
+ return
+ if(bag && outbag)
+ to_chat(user, "This machine already has bags attached.")
+ if(!bag && !outbag)
+ var/choice = alert(user, "Choose where to place [O]", "", "Input", "Cancel", "Output")
+ switch(choice)
+ if("Cancel")
+ return FALSE
+ if("Input")
+ attachinput(O, user)
+ if("Output")
+ attachoutput(O, user)
+ else if(!bag)
+ attachinput(O, user)
+ else if(!outbag)
+ attachoutput(O, user)
else
to_chat(user, "You cannot put this in [src]!")
+/obj/machinery/bloodbankgen/is_operational()
+ return ..() && anchored
+
/obj/machinery/bloodbankgen/ui_interact(mob/user)
. = ..()
@@ -268,7 +242,7 @@
if(!bag && !outbag)
dat += "No containers inside, please insert container.
"
- var/datum/browser/popup = new(user, "bloodbankgen", name, 350, 520)
+ var/datum/browser/popup = new(user, "bloodbankgen", name, 350, 420)
popup.set_content(dat)
popup.open()
@@ -306,6 +280,7 @@
if(usr && Adjacent(usr) && !issiliconoradminghost(usr))
usr.put_in_hands(bag)
bag = null
+ draining = null
update_icon()
/obj/machinery/bloodbankgen/proc/detachoutput()
@@ -314,6 +289,7 @@
if(usr && Adjacent(usr) && !issiliconoradminghost(usr))
usr.put_in_hands(outbag)
outbag = null
+ filling = null
update_icon()
/obj/machinery/bloodbankgen/proc/attachinput(obj/item/O, mob/user)
@@ -339,23 +315,22 @@
to_chat(user, "There is already something in this slot!")
/obj/machinery/bloodbankgen/Topic(href, href_list)
- if(..() || panel_open)
+ . = ..()
+ if(. | !is_operational())
return
usr.set_machine(src)
if(href_list["activateinput"])
activateinput()
- updateUsrDialog()
else if(href_list["detachinput"])
detachinput()
- updateUsrDialog()
else if(href_list["activateoutput"])
activateoutput()
- updateUsrDialog()
else if(href_list["detachoutput"])
detachoutput()
- updateUsrDialog()
+
+ updateUsrDialog()
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index fb384d55ae..1c0635fd3d 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -13,7 +13,7 @@
var/chargelevel = -1
var/charge_rate = 500
-/obj/machinery/cell_charger/proc/updateicon()
+/obj/machinery/cell_charger/update_icon()
cut_overlays()
if(charging)
add_overlay(image(charging.icon, charging.icon_state))
@@ -24,10 +24,10 @@
add_overlay("ccharger-o[newlevel]")
/obj/machinery/cell_charger/examine(mob/user)
- ..()
- to_chat(user, "There's [charging ? "a" : "no"] cell in the charger.")
+ . = ..()
+ . += "There's [charging ? "a" : "no"] cell in the charger."
if(charging)
- to_chat(user, "Current charge: [round(charging.percent(), 1)]%.")
+ . += "Current charge: [round(charging.percent(), 1)]%."
/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stock_parts/cell) && !panel_open)
@@ -53,7 +53,7 @@
charging = W
user.visible_message("[user] inserts a cell into [src].", "You insert a cell into [src].")
chargelevel = -1
- updateicon()
+ update_icon()
else
if(!charging && default_deconstruction_screwdriver(user, icon_state, icon_state, W))
return
@@ -76,7 +76,7 @@
charging.update_icon()
charging = null
chargelevel = -1
- updateicon()
+ update_icon()
/obj/machinery/cell_charger/attack_hand(mob/user)
. = ..()
@@ -127,4 +127,4 @@
use_power(charge_rate)
charging.give(charge_rate) //this is 2558, efficient batteries exist
- updateicon()
+ update_icon()
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 89c5e56b71..e683d67be2 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -93,20 +93,20 @@
to_chat(user, "You flip the write-protect tab to [read_only ? "protected" : "unprotected"].")
/obj/item/disk/data/examine(mob/user)
- ..()
- to_chat(user, "The write-protect tab is set to [read_only ? "protected" : "unprotected"].")
+ . = ..()
+ . += "The write-protect tab is set to [read_only ? "protected" : "unprotected"]."
//Clonepod
/obj/machinery/clonepod/examine(mob/user)
- ..()
+ . = ..()
var/mob/living/mob_occupant = occupant
if(mess)
- to_chat(user, "It's filled with blood and viscera. You swear you can see it moving...")
+ . += "It's filled with blood and viscera. You swear you can see it moving..."
if(is_operational() && mob_occupant)
if(mob_occupant.stat != DEAD)
- to_chat(user, "Current clone cycle is [round(get_completion())]% complete.")
+ . += "Current clone cycle is [round(get_completion())]% complete."
/obj/machinery/clonepod/return_air()
// We want to simulate the clone not being in contact with
@@ -354,7 +354,8 @@
O.organ_flags &= ~ORGAN_FROZEN
unattached_flesh.Cut()
mess = FALSE
- new /obj/effect/gibspawner/generic(get_turf(src))
+ if(mob_occupant)
+ mob_occupant.spawn_gibs()
audible_message("You hear a splat.")
update_icon()
return
@@ -474,8 +475,6 @@
flesh_number = unattached_flesh.len
-#define CRYOMOBS 'icons/obj/cryo_mobs.dmi'
-
/obj/machinery/clonepod/update_icon()
cut_overlays()
diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm
index c317cbba0d..858a0a995b 100644
--- a/code/game/machinery/computer/Operating.dm
+++ b/code/game/machinery/computer/Operating.dm
@@ -32,7 +32,7 @@
/obj/machinery/computer/operating/proc/sync_surgeries()
for(var/i in linked_techweb.researched_designs)
- var/datum/design/surgery/D = linked_techweb.researched_designs[i]
+ var/datum/design/surgery/D = SSresearch.techweb_design_by_id(i)
if(!istype(D))
continue
advanced_surgeries |= D.surgery
diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm
index fb46229bdb..2eea845c70 100644
--- a/code/game/machinery/computer/_computer.dm
+++ b/code/game/machinery/computer/_computer.dm
@@ -13,6 +13,7 @@
var/icon_keyboard = "generic_key"
var/icon_screen = "generic"
var/clockwork = FALSE
+ var/authenticated = FALSE
/obj/machinery/computer/Initialize(mapload, obj/item/circuitboard/C)
. = ..()
diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm
index 6d505c8f95..8ddbd68c7b 100644
--- a/code/game/machinery/computer/apc_control.dm
+++ b/code/game/machinery/computer/apc_control.dm
@@ -92,9 +92,7 @@
if(!usr || !usr.canUseTopic(src) || stat || QDELETED(src))
return
if(href_list["authenticate"])
- var/obj/item/card/id/ID = usr.get_active_held_item()
- if(!istype(ID))
- ID = usr.get_idcard()
+ var/obj/item/card/id/ID = usr.get_idcard(TRUE)
if(ID && istype(ID))
if(check_access(ID))
authenticated = TRUE
diff --git a/code/game/machinery/computer/arcade/orion_trail.dm b/code/game/machinery/computer/arcade/orion_trail.dm
index 023b1048ce..c8c7bc1319 100644
--- a/code/game/machinery/computer/arcade/orion_trail.dm
+++ b/code/game/machinery/computer/arcade/orion_trail.dm
@@ -762,13 +762,13 @@
var/active = 0 //if the ship is on
/obj/item/orion_ship/examine(mob/user)
- ..()
+ . = ..()
if(!(in_range(user, src)))
return
if(!active)
- to_chat(user, "There's a little switch on the bottom. It's flipped down.")
+ . += "There's a little switch on the bottom. It's flipped down."
else
- to_chat(user, "There's a little switch on the bottom. It's flipped up.")
+ . += "There's a little switch on the bottom. It's flipped up."
/obj/item/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse
if(active)
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index c8a4d68575..e8e15ff586 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -19,7 +19,7 @@
return
to_chat(user, "You start deconstructing the frame...")
- if(P.use_tool(src, user, 20, volume=50))
+ if(P.use_tool(src, user, 20, volume=50) && state == 0)
to_chat(user, "You deconstruct the frame.")
var/obj/item/stack/sheet/metal/M = new (drop_location(), 5)
M.add_fingerprint(user)
@@ -28,7 +28,7 @@
if(1)
if(istype(P, /obj/item/wrench))
to_chat(user, "You start to unfasten the frame...")
- if(P.use_tool(src, user, 20, volume=50))
+ if(P.use_tool(src, user, 20, volume=50) && state == 1)
to_chat(user, "You unfasten the frame.")
setAnchored(FALSE)
state = 0
@@ -72,9 +72,7 @@
if(!P.tool_start_check(user, amount=5))
return
to_chat(user, "You start adding cables to the frame...")
- if(P.use_tool(src, user, 20, volume=50, amount=5))
- if(state != 2)
- return
+ if(P.use_tool(src, user, 20, 5, 50, CALLBACK(src, .proc/check_state, 2)))
to_chat(user, "You add cables to the frame.")
state = 3
icon_state = "3"
@@ -94,9 +92,7 @@
return
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
to_chat(user, "You start to put in the glass panel...")
- if(P.use_tool(src, user, 20, amount=2))
- if(state != 3)
- return
+ if(P.use_tool(src, user, 20, 2, 0, CALLBACK(src, .proc/check_state, 3)))
to_chat(user, "You put in the glass panel.")
state = 4
src.icon_state = "4"
@@ -121,6 +117,11 @@
if(user.a_intent == INTENT_HARM)
return ..()
+//callback proc used on stacks use_tool to stop unnecessary amounts being wasted from spam clicking.
+/obj/structure/frame/computer/proc/check_state(target_state)
+ if(state == target_state)
+ return TRUE
+ return FALSE
/obj/structure/frame/computer/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
@@ -132,12 +133,13 @@
..()
/obj/structure/frame/computer/AltClick(mob/user)
- ..()
+ . = ..()
if(!isliving(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return
if(anchored)
to_chat(usr, "You must unwrench [src] before rotating it!")
- return
+ return TRUE
setDir(turn(dir, -90))
+ return TRUE
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 11935e2bfc..1bafa73aaa 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -17,13 +17,7 @@
network += lowertext(i)
/obj/machinery/computer/security/check_eye(mob/user)
- if(CHECK_BITFIELD(stat, NOPOWER|BROKEN) || is_blind(user) || !in_view_range(user, src) || !user.canUseTopic(src, !issilicon(user), FALSE))
- user.unset_machine()
- return
- if(!(user in watchers))
- user.unset_machine()
- return
- if(!watchers[user])
+ if(!can_interact(user) || !(user in watchers) || !watchers[user])
user.unset_machine()
return
var/obj/machinery/camera/C = watchers[user]
@@ -41,55 +35,50 @@
M.unset_machine() //to properly reset the view of the users if the console is deleted.
return ..()
-/obj/machinery/computer/security/attack_hand(mob/user)
+/obj/machinery/computer/security/can_interact(mob/user)
+ if((!issilicon(user) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src))
+ return FALSE
+ return ..()
+
+/obj/machinery/computer/security/interact(mob/user, special_state)
. = ..()
- if(.)
- return
- if(stat)
+ if (ismob(user) && !isliving(user)) // ghosts don't need cameras
return
if (!network)
- throw EXCEPTION("No camera network")
+ CRASH("No camera network")
user.unset_machine()
- return
+ return FALSE
if (!(islist(network)))
- throw EXCEPTION("Camera network is not a list")
+ CRASH("Camera network is not a list")
user.unset_machine()
- return
- if(..())
- user.unset_machine()
- return
+ return FALSE
var/list/camera_list = get_available_cameras()
if(!(user in watchers))
for(var/Num in camera_list)
var/obj/machinery/camera/CAM = camera_list[Num]
- if(istype(CAM))
- if(CAM.can_use())
- watchers[user] = CAM //let's give the user the first usable camera, and then let him change to the camera he wants.
- break
+ if(istype(CAM) && CAM.can_use())
+ watchers[user] = CAM //let's give the user the first usable camera, and then let him change to the camera he wants.
+ break
if(!(user in watchers))
user.unset_machine() // no usable camera on the network, we disconnect the user from the computer.
- return
+ return FALSE
playsound(src, 'sound/machines/terminal_prompt.ogg', 25, 0)
use_camera_console(user)
/obj/machinery/computer/security/proc/use_camera_console(mob/user)
var/list/camera_list = get_available_cameras()
var/t = input(user, "Which camera should you change to?") as null|anything in camera_list
- if(user.machine != src) //while we were choosing we got disconnected from our computer or are using another machine.
+ if(!src || user.machine != src) //while we were choosing we got disconnected from our computer or are using another machine.
return
- if(!t)
+ if(!t || t == "Cancel")
user.unset_machine()
playsound(src, 'sound/machines/terminal_off.ogg', 25, 0)
return
var/obj/machinery/camera/C = camera_list[t]
- if(t == "Cancel")
- user.unset_machine()
- playsound(src, 'sound/machines/terminal_off.ogg', 25, 0)
- return
- if(!C || !C.can_use() || CHECK_BITFIELD(stat, NOPOWER|BROKEN) || is_blind(user) || !in_view_range(user, src) || !user.canUseTopic(src, !issilicon(user), FALSE))
+ if(!C || !C.can_use() || !can_interact(user))
user.unset_machine()
return FALSE
diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm
index 43582e39bf..8de470fdb8 100644
--- a/code/game/machinery/computer/camera_advanced.dm
+++ b/code/game/machinery/computer/camera_advanced.dm
@@ -287,9 +287,9 @@
/obj/machinery/computer/camera_advanced/ratvar/CreateEye()
..()
- eyeobj.visible_icon = 1
- eyeobj.icon = 'icons/obj/abductor.dmi' //in case you still had any doubts
- eyeobj.icon_state = "camera_target"
+ eyeobj.visible_icon = TRUE
+ eyeobj.icon = 'icons/mob/cameramob.dmi' //in case you still had any doubts
+ eyeobj.icon_state = "generic_camera"
/obj/machinery/computer/camera_advanced/ratvar/GrantActions(mob/living/carbon/user)
..()
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 886851a6a8..3bdb635d39 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -4,6 +4,11 @@
//increase the slots of many jobs.
GLOBAL_VAR_INIT(time_last_changed_position, 0)
+#define JOB_ALLOWED 1
+#define JOB_COOLDOWN -2
+#define JOB_MAX_POSITIONS -1 // Trying to reduce the number of slots below that of current holders of that job, or trying to open more slots than allowed
+#define JOB_DENIED 0
+
/obj/machinery/computer/card
name = "identification console"
desc = "You can use this to manage jobs and ID access."
@@ -11,8 +16,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
icon_keyboard = "id_key"
req_one_access = list(ACCESS_HEADS, ACCESS_CHANGE_IDS)
circuit = /obj/item/circuitboard/computer/card
- var/obj/item/card/id/scan = null
- var/obj/item/card/id/modify = null
var/mode = 0
var/printing = null
var/target_dept = 0 //Which department this computer has access to. 0=all departments
@@ -31,81 +34,79 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
"Head of Security",
"Chief Engineer",
"Research Director",
- "Chief Medical Officer")
+ "Chief Medical Officer",
+ "Quartermaster")
//The scaling factor of max total positions in relation to the total amount of people on board the station in %
var/max_relative_positions = 30 //30%: Seems reasonable, limit of 6 @ 20 players
//This is used to keep track of opened positions for jobs to allow instant closing
//Assoc array: "JobName" = (int)
- var/list/opened_positions = list();
+ var/list/opened_positions = list()
+ var/obj/item/card/id/inserted_scan_id
+ var/obj/item/card/id/inserted_modify_id
+ var/list/region_access = null
+ var/list/head_subordinates = null
light_color = LIGHT_COLOR_BLUE
-/obj/machinery/computer/card/examine(mob/user)
- ..()
- if(scan || modify)
- to_chat(user, "Alt-click to eject the ID card.")
+/obj/machinery/computer/card/proc/get_jobs()
+ return get_all_jobs()
+
+/obj/machinery/computer/card/centcom/get_jobs()
+ return get_all_centcom_jobs()
/obj/machinery/computer/card/Initialize()
. = ..()
change_position_cooldown = CONFIG_GET(number/id_console_jobslot_delay)
-/obj/machinery/computer/card/attackby(obj/O, mob/user, params)//TODO:SANITY
- if(istype(O, /obj/item/card/id))
- var/obj/item/card/id/idcard = O
- if(check_access(idcard))
- if(!scan)
- if (!user.transferItemToLoc(idcard,src))
- return
- scan = idcard
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
- else if(!modify)
- if (!user.transferItemToLoc(idcard,src))
- return
- modify = idcard
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
- else
- if(!modify)
- if (!user.transferItemToLoc(idcard,src))
- return
- modify = idcard
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
- updateUsrDialog()
+/obj/machinery/computer/card/examine(mob/user)
+ . = ..()
+ if(inserted_scan_id || inserted_modify_id)
+ . += "Alt-click to eject the ID card."
+
+/obj/machinery/computer/card/attackby(obj/I, mob/user, params)
+ if(isidcard(I))
+ if(check_access(I) && !inserted_scan_id)
+ if(id_insert(user, I, inserted_scan_id))
+ inserted_scan_id = I
+ updateUsrDialog()
+ else if(id_insert(user, I, inserted_modify_id))
+ inserted_modify_id = I
+ updateUsrDialog()
else
return ..()
/obj/machinery/computer/card/Destroy()
- if(scan)
- qdel(scan)
- scan = null
- if(modify)
- qdel(modify)
- modify = null
+ if(inserted_scan_id)
+ qdel(inserted_scan_id)
+ inserted_scan_id = null
+ if(inserted_modify_id)
+ qdel(inserted_modify_id)
+ inserted_modify_id = null
return ..()
/obj/machinery/computer/card/handle_atom_del(atom/A)
..()
- if(A == scan)
- scan = null
+ if(A == inserted_scan_id)
+ inserted_scan_id = null
updateUsrDialog()
- if(A == modify)
- modify = null
+ if(A == inserted_modify_id)
+ inserted_modify_id = null
updateUsrDialog()
/obj/machinery/computer/card/on_deconstruction()
- if(scan)
- scan.forceMove(drop_location())
- scan = null
- if(modify)
- modify.forceMove(drop_location())
- modify = null
+ if(inserted_scan_id)
+ inserted_scan_id.forceMove(drop_location())
+ inserted_scan_id = null
+ if(inserted_modify_id)
+ inserted_modify_id.forceMove(drop_location())
+ inserted_modify_id = null
//Check if you can't open a new position for a certain job
/obj/machinery/computer/card/proc/job_blacklisted(jobtitle)
return (jobtitle in blacklisted)
-
//Logic check for Topic() if you can open the job
/obj/machinery/computer/card/proc/can_open_job(datum/job/job)
if(job)
@@ -113,10 +114,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if((job.total_positions <= GLOB.player_list.len * (max_relative_positions / 100)))
var/delta = (world.time / 10) - GLOB.time_last_changed_position
if((change_position_cooldown < delta) || (opened_positions[job.title] < 0))
- return 1
- return -2
- return -1
- return 0
+ return JOB_ALLOWED
+ return JOB_COOLDOWN
+ return JOB_MAX_POSITIONS
+ return JOB_DENIED
//Logic check for Topic() if you can close the job
/obj/machinery/computer/card/proc/can_close_job(datum/job/job)
@@ -125,84 +126,118 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(job.total_positions > job.current_positions)
var/delta = (world.time / 10) - GLOB.time_last_changed_position
if((change_position_cooldown < delta) || (opened_positions[job.title] > 0))
- return 1
- return -2
- return -1
- return 0
+ return JOB_ALLOWED
+ return JOB_COOLDOWN
+ return JOB_MAX_POSITIONS
+ return JOB_DENIED
+
+
+/obj/machinery/computer/card/proc/id_insert(mob/user, obj/item/inserting_item, obj/item/target)
+ var/obj/item/card/id/card_to_insert = inserting_item
+ var/holder_item = FALSE
+
+ if(!isidcard(card_to_insert))
+ card_to_insert = inserting_item.RemoveID()
+ holder_item = TRUE
+
+ if(!card_to_insert || !user.transferItemToLoc(card_to_insert, src))
+ return FALSE
+
+ if(target)
+ if(holder_item && inserting_item.InsertID(target))
+ playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
+ else
+ id_eject(user, target)
+
+ user.visible_message("[user] inserts \the [card_to_insert] into \the [src].",
+ "You insert \the [card_to_insert] into \the [src].")
+ playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
+ updateUsrDialog()
+ return TRUE
+
+/obj/machinery/computer/card/proc/id_eject(mob/user, obj/target)
+ if(!target)
+ to_chat(user, "That slot is empty!")
+ return FALSE
+ else
+ target.forceMove(drop_location())
+ if(!issilicon(user) && Adjacent(user))
+ user.put_in_hands(target)
+ user.visible_message("[user] gets \the [target] from \the [src].", \
+ "You get \the [target] from \the [src].")
+ playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
+ updateUsrDialog()
+ return TRUE
+
+/obj/machinery/computer/card/AltClick(mob/user)
+ . = ..()
+ if(!user.canUseTopic(src, !issilicon(user)) || !is_operational())
+ return
+ if(inserted_modify_id)
+ if(id_eject(user, inserted_modify_id))
+ inserted_modify_id = null
+ updateUsrDialog()
+ return TRUE
+ if(inserted_scan_id)
+ if(id_eject(user, inserted_scan_id))
+ inserted_scan_id = null
+ updateUsrDialog()
+ return TRUE
/obj/machinery/computer/card/ui_interact(mob/user)
. = ..()
-
- var/dat
- if(!SSticker)
- return
+ var/list/dat = list()
if (mode == 1) // accessing crew manifest
- var/crew = ""
+ dat += "Crew Manifest:
Please use security record computer to modify entries.
"
for(var/datum/data/record/t in sortRecord(GLOB.data_core.general))
- crew += t.fields["name"] + " - " + t.fields["rank"] + "
"
- dat = "Crew Manifest:
Please use security record computer to modify entries.
[crew]Print
Access ID modification console.
"
+ dat += {"[t.fields["name"]] - [t.fields["rank"]]
"}
+ dat += "Print
Access ID modification console.
"
else if(mode == 2)
// JOB MANAGEMENT
- dat = "Return"
- dat += " || Confirm Identity: "
- var/S
- if(scan)
- S = html_encode(scan.name)
- else
- S = "--------"
- dat += "[S]"
- dat += ""
- dat += "| Job | Slots | Open job | Close job | Prioritize |
"
- var/ID
- if(scan && (ACCESS_CHANGE_IDS in scan.access) && !target_dept)
- ID = 1
- else
- ID = 0
+ dat += {"Return
+ | Job | Slots |
+ Open job | Close job | Prioritize |
"}
for(var/datum/job/job in SSjob.occupations)
dat += ""
if(job.title in blacklisted)
continue
- dat += "| [job.title] | "
- dat += "[job.current_positions]/[job.total_positions] | "
- dat += ""
+ dat += {" | [job.title] |
+ [job.current_positions]/[job.total_positions] |
+ "}
switch(can_open_job(job))
- if(1)
- if(ID)
+ if(JOB_ALLOWED)
+ if(authenticated == 2)
dat += "Open Position "
else
dat += "Open Position"
- if(-1)
- dat += "Denied"
- if(-2)
+ if(JOB_COOLDOWN)
var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - GLOB.time_last_changed_position), 1)
var/mins = round(time_to_wait / 60)
var/seconds = time_to_wait - (60*mins)
dat += "Cooldown ongoing: [mins]:[(seconds < 10) ? "0[seconds]" : "[seconds]"]"
- if(0)
+ else
dat += "Denied"
dat += " | "
switch(can_close_job(job))
- if(1)
- if(ID)
+ if(JOB_ALLOWED)
+ if(authenticated == 2)
dat += "Close Position"
else
dat += "Close Position"
- if(-1)
- dat += "Denied"
- if(-2)
+ if(JOB_COOLDOWN)
var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - GLOB.time_last_changed_position), 1)
var/mins = round(time_to_wait / 60)
var/seconds = time_to_wait - (60*mins)
dat += "Cooldown ongoing: [mins]:[(seconds < 10) ? "0[seconds]" : "[seconds]"]"
- if(0)
+ else
dat += "Denied"
dat += " | "
switch(job.total_positions)
if(0)
dat += "Denied"
else
- if(ID)
+ if(authenticated == 2)
if(job in SSjob.prioritized_jobs)
dat += "Deprioritize"
else
@@ -216,57 +251,36 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
dat += " |
"
dat += "
"
else
- var/header = ""
+ var/list/header = list()
- var/target_name
- var/target_owner
- var/target_rank
- if(modify)
- target_name = html_encode(modify.name)
- else
- target_name = "--------"
- if(modify && modify.registered_name)
- target_owner = html_encode(modify.registered_name)
- else
- target_owner = "--------"
- if(modify && modify.assignment)
- target_rank = html_encode(modify.assignment)
- else
- target_rank = "Unassigned"
-
- var/scan_name
- if(scan)
- scan_name = html_encode(scan.name)
- else
- scan_name = "--------"
+ var/scan_name = inserted_scan_id ? html_encode(inserted_scan_id.name) : "--------"
+ var/target_name = inserted_modify_id ? html_encode(inserted_modify_id.name) : "--------"
+ var/target_owner = (inserted_modify_id && inserted_modify_id.registered_name) ? html_encode(inserted_modify_id.registered_name) : "--------"
+ var/target_rank = (inserted_modify_id && inserted_modify_id.assignment) ? html_encode(inserted_modify_id.assignment) : "Unassigned"
if(!authenticated)
- header += "
Please insert the cards into the slots
"
- header += "Target: [target_name]
"
- header += "Confirm Identity: [scan_name]
"
+ header += {"
Please insert the cards into the slots
+ Target: [target_name]
+ Confirm Identity: [scan_name]
"}
else
- header += ""
+ header += {""}
header += "
"
- var/jobs_all = ""
- var/list/alljobs = list("Unassigned")
- alljobs += (istype(src, /obj/machinery/computer/card/centcom)? get_all_centcom_jobs() : get_all_jobs()) + "Custom"
- for(var/job in alljobs)
- jobs_all += "[replacetext(job, " ", " ")] " //make sure there isn't a line break in the middle of a job
-
-
var/body
- if (authenticated && modify)
-
- var/carddesc = text("")
- var/jobs = text("")
- if( authenticated == 2)
+ if (authenticated && inserted_modify_id)
+ var/list/carddesc = list()
+ var/list/jobs = list()
+ if (authenticated == 2)
+ var/list/jobs_all = list()
+ for(var/job in (list("Unassigned") + get_jobs() + "Custom"))
+ jobs_all += "[replacetext(job, " ", " ")] " //make sure there isn't a line break in the middle of a job
carddesc += {""}
- carddesc += ""
- carddesc += "Assignment: "
+ carddesc += {"
+ Assignment: "}
jobs += "[target_rank]" //CHECK THIS
@@ -299,18 +313,18 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
carddesc += "registered_name: [target_owner]"
jobs += "Assignment: [target_rank] (Demote)"
- var/accesses = ""
- if(istype(src, /obj/machinery/computer/card/centcom))
+ var/list/accesses = list()
+ if(istype(src, /obj/machinery/computer/card/centcom)) // REE
accesses += "Central Command:
"
for(var/A in get_all_centcom_access())
- if(A in modify.access)
- accesses += "[replacetext(get_centcom_access_desc(A), " ", " ")] "
+ if(A in inserted_modify_id.access)
+ accesses += "[replacetext(get_centcom_access_desc(A), " ", " ")] "
else
accesses += "[replacetext(get_centcom_access_desc(A), " ", " ")] "
else
- accesses += "Access
"
- accesses += ""
- accesses += ""
+ accesses += {"Access
+ "
- body = "[carddesc]
[jobs]
[accesses]" //CHECK THIS
+ body = "[carddesc.Join()]
[jobs.Join()]
[accesses.Join()]
" //CHECK THIS
- else
- body = "{Log in}
"
- body += "Access Crew Manifest"
+ else if (!authenticated)
+ body = {"Log In
+ Access Crew Manifest
"}
if(!target_dept)
- body += "
Job Management"
+ body += "Job Management
"
- dat = "[header][body]
"
+ dat = list("", header.Join(), body, "
")
var/datum/browser/popup = new(user, "id_com", src.name, 900, 620)
- popup.set_content(dat)
+ popup.set_content(dat.Join())
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
@@ -353,52 +367,72 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
usr.set_machine(src)
switch(href_list["choice"])
- if ("modify")
- eject_id_modify(usr)
- if ("scan")
- eject_id_scan(usr)
+ if ("inserted_modify_id")
+ if(inserted_modify_id && !usr.get_active_held_item())
+ if(id_eject(usr, inserted_modify_id))
+ inserted_modify_id = null
+ updateUsrDialog()
+ return
+ if(usr.get_id_in_hand())
+ var/obj/item/held_item = usr.get_active_held_item()
+ var/obj/item/card/id/id_to_insert = held_item.GetID()
+ if(id_insert(usr, held_item, inserted_modify_id))
+ inserted_modify_id = id_to_insert
+ updateUsrDialog()
+ if ("inserted_scan_id")
+ if(inserted_scan_id && !usr.get_active_held_item())
+ if(id_eject(usr, inserted_scan_id))
+ inserted_scan_id = null
+ updateUsrDialog()
+ return
+ if(usr.get_id_in_hand())
+ var/obj/item/held_item = usr.get_active_held_item()
+ var/obj/item/card/id/id_to_insert = held_item.GetID()
+ if(id_insert(usr, held_item, inserted_scan_id))
+ inserted_scan_id = id_to_insert
+ updateUsrDialog()
if ("auth")
- if ((!( authenticated ) && (scan || issilicon(usr)) && (modify || mode)))
- if (check_access(scan))
+ if ((!( authenticated ) && (inserted_scan_id || issilicon(usr)) || mode))
+ if (check_access(inserted_scan_id))
region_access = list()
head_subordinates = list()
- if(ACCESS_CHANGE_IDS in scan.access)
+ if(ACCESS_CHANGE_IDS in inserted_scan_id.access)
if(target_dept)
head_subordinates = get_all_jobs()
region_access |= target_dept
authenticated = 1
else
authenticated = 2
- playsound(src, 'sound/machines/terminal_on.ogg', 50, 0)
+ playsound(src, 'sound/machines/terminal_on.ogg', 50, FALSE)
else
- if((ACCESS_HOP in scan.access) && ((target_dept==1) || !target_dept))
+ if((ACCESS_HOP in inserted_scan_id.access) && ((target_dept==1) || !target_dept))
region_access |= 1
get_subordinates("Head of Personnel")
- if((ACCESS_HOS in scan.access) && ((target_dept==2) || !target_dept))
+ if((ACCESS_HOS in inserted_scan_id.access) && ((target_dept==2) || !target_dept))
region_access |= 2
get_subordinates("Head of Security")
- if((ACCESS_CMO in scan.access) && ((target_dept==3) || !target_dept))
+ if((ACCESS_CMO in inserted_scan_id.access) && ((target_dept==3) || !target_dept))
region_access |= 3
get_subordinates("Chief Medical Officer")
- if((ACCESS_RD in scan.access) && ((target_dept==4) || !target_dept))
+ if((ACCESS_RD in inserted_scan_id.access) && ((target_dept==4) || !target_dept))
region_access |= 4
get_subordinates("Research Director")
- if((ACCESS_CE in scan.access) && ((target_dept==5) || !target_dept))
+ if((ACCESS_CE in inserted_scan_id.access) && ((target_dept==5) || !target_dept))
region_access |= 5
get_subordinates("Chief Engineer")
- if((ACCESS_QM in scan.access) && ((target_dept==6) || !target_dept))
+ if((ACCESS_QM in inserted_scan_id.access) && ((target_dept==6) || !target_dept))
region_access |= 6
get_subordinates("Quartermaster")
if(region_access)
authenticated = 1
- else if ((!( authenticated ) && issilicon(usr)) && (!modify))
+ else if ((!( authenticated ) && issilicon(usr)) && (!inserted_modify_id))
to_chat(usr, "You can't modify an ID without an ID inserted to modify! Once one is in the modify slot on the computer, you can log in.")
if ("logout")
region_access = null
head_subordinates = null
authenticated = 0
- playsound(src, 'sound/machines/terminal_off.ogg', 50, 0)
+ playsound(src, 'sound/machines/terminal_off.ogg', 50, FALSE)
if("access")
if(href_list["allowed"])
@@ -406,20 +440,20 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
var/access_type = text2num(href_list["access_target"])
var/access_allowed = text2num(href_list["allowed"])
if(access_type in (istype(src, /obj/machinery/computer/card/centcom)?get_all_centcom_access() : get_all_accesses()))
- modify.access -= access_type
+ inserted_modify_id.access -= access_type
if(access_allowed == 1)
- modify.access += access_type
- playsound(src, "terminal_type", 50, 0)
+ inserted_modify_id.access += access_type
+ playsound(src, "terminal_type", 50, FALSE)
if ("assign")
if (authenticated == 2)
var/t1 = href_list["assign_target"]
if(t1 == "Custom")
- var/newJob = reject_bad_text(input("Enter a custom job assignment.", "Assignment", modify ? modify.assignment : "Unassigned"), MAX_NAME_LEN)
+ var/newJob = reject_bad_text(input("Enter a custom job assignment.", "Assignment", inserted_modify_id ? inserted_modify_id.assignment : "Unassigned"), MAX_NAME_LEN)
if(newJob)
t1 = newJob
else if(t1 == "Unassigned")
- modify.access -= get_all_accesses()
+ inserted_modify_id.access -= get_all_accesses()
else
var/datum/job/jobdatum
@@ -430,30 +464,30 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
updateUsrDialog()
break
if(!jobdatum)
- to_chat(usr, "No log exists for this job.")
+ to_chat(usr, "No log exists for this job.")
updateUsrDialog()
return
- modify.access = ( istype(src, /obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : jobdatum.get_access() )
- if (modify)
- modify.assignment = t1
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
+ inserted_modify_id.access = ( istype(src, /obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : jobdatum.get_access() )
+ if (inserted_modify_id)
+ inserted_modify_id.assignment = t1
+ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
if ("demote")
- if(modify.assignment in head_subordinates || modify.assignment == "Assistant")
- modify.assignment = "Unassigned"
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
+ if(inserted_modify_id.assignment in head_subordinates || inserted_modify_id.assignment == "Assistant")
+ inserted_modify_id.assignment = "Unassigned"
+ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
else
- to_chat(usr, "You are not authorized to demote this position.")
+ to_chat(usr, "You are not authorized to demote this position.")
if ("reg")
if (authenticated)
- var/t2 = modify
- if ((authenticated && modify == t2 && (in_range(src, usr) || issilicon(usr)) && isturf(loc)))
+ var/t2 = inserted_modify_id
+ if ((authenticated && inserted_modify_id == t2 && (in_range(src, usr) || issilicon(usr)) && isturf(loc)))
var/newName = reject_bad_name(href_list["reg"])
if(newName)
- modify.registered_name = newName
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
+ inserted_modify_id.registered_name = newName
+ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
else
- to_chat(usr, "Invalid name entered.")
+ to_chat(usr, "Invalid name entered.")
updateUsrDialog()
return
if ("mode")
@@ -462,11 +496,11 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if("return")
//DISPLAY MAIN MENU
mode = 3;
- playsound(src, "terminal_type", 25, 0)
+ playsound(src, "terminal_type", 25, FALSE)
if("make_job_available")
// MAKE ANOTHER JOB POSITION AVAILABLE FOR LATE JOINERS
- if(scan && (ACCESS_CHANGE_IDS in scan.access) && !target_dept)
+ if(authenticated && !target_dept)
var/edit_job_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(edit_job_target)
if(!j)
@@ -479,11 +513,11 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
GLOB.time_last_changed_position = world.time / 10
j.total_positions++
opened_positions[edit_job_target]++
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
+ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
if("make_job_unavailable")
// MAKE JOB POSITION UNAVAILABLE FOR LATE JOINERS
- if(scan && (ACCESS_CHANGE_IDS in scan.access) && !target_dept)
+ if(authenticated && !target_dept)
var/edit_job_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(edit_job_target)
if(!j)
@@ -497,11 +531,11 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
GLOB.time_last_changed_position = world.time / 10
j.total_positions--
opened_positions[edit_job_target]--
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE)
if ("prioritize_job")
// TOGGLE WHETHER JOB APPEARS AS PRIORITIZED IN THE LOBBY
- if(scan && (ACCESS_CHANGE_IDS in scan.access) && !target_dept)
+ if(authenticated && !target_dept)
var/priority_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(priority_target)
if(!j)
@@ -517,8 +551,8 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
return
else
SSjob.prioritized_jobs += j
- to_chat(usr, "[j.title] has been successfully [priority ? "prioritized" : "unprioritized"]. Potential employees will notice your request.")
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
+ to_chat(usr, "[j.title] has been successfully [priority ? "prioritized" : "unprioritized"]. Potential employees will notice your request.")
+ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
if ("print")
if (!( printing ))
@@ -531,59 +565,9 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
P.info = t1
P.name = "paper- 'Crew Manifest'"
printing = null
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
- if (modify)
- modify.update_label()
- updateUsrDialog()
-
-/obj/machinery/computer/card/AltClick(mob/user)
- if(!user.canUseTopic(src, !issilicon(user)) || !is_operational())
- return
- if(scan)
- eject_id_scan(user)
- if(modify)
- eject_id_modify(user)
-
-/obj/machinery/computer/card/proc/eject_id_scan(mob/user)
- if(scan)
- scan.forceMove(drop_location())
- if(!issilicon(user) && Adjacent(user))
- user.put_in_hands(scan)
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
- scan = null
- else //switching the ID with the one you're holding
- if(issilicon(user) || !Adjacent(user))
- return
- var/obj/item/I = user.get_active_held_item()
- if(istype(I, /obj/item/card/id))
- if(!user.transferItemToLoc(I,src))
- return
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
- scan = I
- authenticated = FALSE
- updateUsrDialog()
-
-/obj/machinery/computer/card/proc/eject_id_modify(mob/user)
- if(modify)
- GLOB.data_core.manifest_modify(modify.registered_name, modify.assignment)
- modify.update_label()
- modify.forceMove(drop_location())
- if(!issilicon(user) && Adjacent(user))
- user.put_in_hands(modify)
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
- modify = null
- region_access = null
- head_subordinates = null
- else //switching the ID with the one you're holding
- if(issilicon(user) || !Adjacent(user))
- return
- var/obj/item/I = user.get_active_held_item()
- if(istype(I, /obj/item/card/id))
- if (!user.transferItemToLoc(I,src))
- return
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
- modify = I
- authenticated = FALSE
+ playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE)
+ if (inserted_modify_id)
+ inserted_modify_id.update_label()
updateUsrDialog()
/obj/machinery/computer/card/proc/get_subordinates(rank)
@@ -638,4 +622,9 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
target_dept = 6
icon_screen = "idqm"
- light_color = LIGHT_COLOR_ORANGE
\ No newline at end of file
+ light_color = LIGHT_COLOR_ORANGE
+
+#undef JOB_ALLOWED
+#undef JOB_COOLDOWN
+#undef JOB_MAX_POSITIONS
+#undef JOB_DENIED
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index f3612078d6..22a523c58b 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -42,12 +42,6 @@
. = ..()
GLOB.shuttle_caller_list += src
-/obj/machinery/computer/communications/process()
- if(..())
- var/ai_autoupdate = aistate != STATE_STATUSDISPLAY && aistate != STATE_CALLSHUTTLE && aistate != STATE_PURCHASE && aistate != STATE_VIEWMESSAGE
- var/machine_user_autoupdate = state != STATE_STATUSDISPLAY && state != STATE_CALLSHUTTLE && state != STATE_PURCHASE && state != STATE_VIEWMESSAGE
- updateDialog(machine_user_autoupdate,ai_autoupdate)
-
/obj/machinery/computer/communications/Topic(href, href_list)
if(..())
return
@@ -70,15 +64,13 @@
if("login")
var/mob/M = usr
- var/obj/item/card/id/I = M.get_active_held_item()
- if(!istype(I))
- I = M.get_idcard()
+ var/obj/item/card/id/I = M.get_idcard(TRUE)
if(I && istype(I))
if(check_access(I))
authenticated = 1
auth_id = "[I.registered_name] ([I.assignment])"
- if((20 in I.access))
+ if((ACCESS_CAPTAIN in I.access))
authenticated = 2
playsound(src, 'sound/machines/terminal_on.ogg', 50, 0)
if(obj_flags & EMAGGED)
@@ -287,7 +279,7 @@
// OMG CENTCOM LETTERHEAD
if("MessageCentCom")
- if(authenticated==2)
+ if(authenticated)
if(!checkCCcooldown())
to_chat(usr, "Arrays recycling. Please stand by.")
return
@@ -588,8 +580,6 @@
popup.set_content(dat)
popup.open()
- popup.set_content(dat)
- popup.open()
/obj/machinery/computer/communications/proc/get_javascript_header(form_id)
var/dat = {"
You start skimming through the manual...
@@ -295,7 +295,7 @@
function pageloaded(myframe) {
document.getElementById("loading").style.display = "none";
myframe.style.display = "block";
- }
+ }
You start skimming through the manual...
diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm
index 624dbdd8ef..16262d61c3 100644
--- a/code/game/objects/items/melee/energy.dm
+++ b/code/game/objects/items/melee/energy.dm
@@ -28,7 +28,7 @@
/obj/item/melee/transforming/energy/add_blood_DNA(list/blood_dna)
return FALSE
-/obj/item/melee/transforming/energy/is_sharp()
+/obj/item/melee/transforming/energy/get_sharpness()
return active * sharpness
/obj/item/melee/transforming/energy/process()
@@ -46,7 +46,7 @@
STOP_PROCESSING(SSobj, src)
set_light(0)
-/obj/item/melee/transforming/energy/is_hot()
+/obj/item/melee/transforming/energy/get_temperature()
return active * heat
/obj/item/melee/transforming/energy/ignition_effect(atom/A, mob/user)
@@ -320,11 +320,12 @@
M.update_inv_hands()
/obj/item/melee/transforming/energy/sword/cx/AltClick(mob/living/user)
+ . = ..()
if(!in_range(src, user)) //Basic checks to prevent abuse
return
if(user.incapacitated() || !istype(user))
to_chat(user, "You can't do that right now!")
- return
+ return TRUE
if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null
@@ -332,10 +333,11 @@
light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
update_icon()
update_light()
+ return TRUE
/obj/item/melee/transforming/energy/sword/cx/examine(mob/user)
- ..()
- to_chat(user, "Alt-click to recolor it.")
+ . = ..()
+ . += "Alt-click to recolor it."
/obj/item/melee/transforming/energy/sword/cx/worn_overlays(isinhands, icon_file)
. = ..()
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index 10b84917bb..d8abff70a6 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -79,17 +79,17 @@
final_block_chance = 0 //Don't bring a sword to a gunfight
return ..()
-/obj/item/melee/sabre/on_exit_storage(obj/item/storage/S)
- ..()
- var/obj/item/storage/belt/sabre/B = S
+/obj/item/melee/sabre/on_exit_storage(datum/component/storage/S)
+ var/obj/item/storage/belt/sabre/B = S.parent
if(istype(B))
playsound(B, 'sound/items/unsheath.ogg', 25, 1)
-
-/obj/item/melee/sabre/on_enter_storage(obj/item/storage/S)
..()
- var/obj/item/storage/belt/sabre/B = S
+
+/obj/item/melee/sabre/on_enter_storage(datum/component/storage/S)
+ var/obj/item/storage/belt/sabre/B = S.parent
if(istype(B))
playsound(B, 'sound/items/sheath.ogg', 25, 1)
+ ..()
/obj/item/melee/sabre/get_belt_overlay()
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "sabre")
@@ -265,7 +265,7 @@
if (B && !QDELETED(B))
H.internal_organs -= B
qdel(B)
- new /obj/effect/gibspawner/generic(get_turf(H), H.dna)
+ H.spawn_gibs()
return (BRUTELOSS)
/obj/item/melee/classic_baton/telescopic/attack_self(mob/user)
diff --git a/code/game/objects/items/melee/transforming.dm b/code/game/objects/items/melee/transforming.dm
index 850810bdb2..5bccf91868 100644
--- a/code/game/objects/items/melee/transforming.dm
+++ b/code/game/objects/items/melee/transforming.dm
@@ -23,8 +23,8 @@
else
if(attack_verb_off.len)
attack_verb = attack_verb_off
- if(is_sharp())
- AddComponent(/datum/component/butchering, 50, 100, 0, hitsound, !active)
+ if(sharpness)
+ AddComponent(/datum/component/butchering, 50, 100, 0, hitsound)
/obj/item/melee/transforming/attack_self(mob/living/carbon/user)
if(transform_weapon(user))
@@ -65,13 +65,6 @@
icon_state = initial(icon_state)
w_class = initial(w_class)
total_mass = initial(total_mass)
- if(is_sharp())
- var/datum/component/butchering/BT = LoadComponent(/datum/component/butchering)
- BT.butchering_enabled = TRUE
- else
- var/datum/component/butchering/BT = GetComponent(/datum/component/butchering)
- if(BT)
- BT.butchering_enabled = FALSE
transform_messages(user, supress_message_text)
add_fingerprint(user)
return TRUE
diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm
index 3f7fe7ee8d..5d384a9346 100644
--- a/code/game/objects/items/mop.dm
+++ b/code/game/objects/items/mop.dm
@@ -119,8 +119,8 @@
reagents.add_reagent(refill_reagent, refill_rate)
/obj/item/mop/advanced/examine(mob/user)
- ..()
- to_chat(user, "The condenser switch is set to [refill_enabled ? "ON" : "OFF"].")
+ . = ..()
+ . += "The condenser switch is set to [refill_enabled ? "ON" : "OFF"]."
/obj/item/mop/advanced/Destroy()
if(refill_enabled)
diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm
index 30442d7304..5af9c70d9b 100644
--- a/code/game/objects/items/pet_carrier.dm
+++ b/code/game/objects/items/pet_carrier.dm
@@ -43,17 +43,17 @@
..()
/obj/item/pet_carrier/examine(mob/user)
- ..()
+ . = ..()
if(occupants.len)
for(var/V in occupants)
var/mob/living/L = V
- to_chat(user, "It has [L] inside.")
+ . += "It has [L] inside."
else
- to_chat(user, "It has nothing inside.")
+ . += "It has nothing inside."
if(user.canUseTopic(src))
- to_chat(user, "Activate it in your hand to [open ? "close" : "open"] its door.")
+ . += "Activate it in your hand to [open ? "close" : "open"] its door."
if(!open)
- to_chat(user, "Alt-click to [locked ? "unlock" : "lock"] its door.")
+ . += "Alt-click to [locked ? "unlock" : "lock"] its door."
/obj/item/pet_carrier/attack_self(mob/living/user)
if(open)
@@ -70,6 +70,7 @@
update_icon()
/obj/item/pet_carrier/AltClick(mob/living/user)
+ . = ..()
if(open || !user.canUseTopic(src, BE_CLOSE))
return
locked = !locked
@@ -79,6 +80,7 @@
else
playsound(user, 'sound/machines/boltsup.ogg', 30, TRUE)
update_icon()
+ return TRUE
/obj/item/pet_carrier/attack(mob/living/target, mob/living/user)
if(user.a_intent == INTENT_HARM)
@@ -151,12 +153,13 @@
add_overlay("[locked ? "" : "un"]locked")
/obj/item/pet_carrier/MouseDrop(atom/over_atom)
- . = ..()
if(isopenturf(over_atom) && usr.canUseTopic(src, BE_CLOSE, ismonkey(usr)) && usr.Adjacent(over_atom) && open && occupants.len)
usr.visible_message("[usr] unloads [src].", \
"You unload [src] onto [over_atom].")
for(var/V in occupants)
remove_occupant(V, over_atom)
+ else
+ return ..()
/obj/item/pet_carrier/proc/load_occupant(mob/living/user, mob/living/target)
if(pet_carrier_full(src))
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index 4847919a08..705dcad6c6 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -113,11 +113,13 @@
return
log_game("[key_name(user)] activated a hidden grenade in [src].")
grenade.preprime(user, msg = FALSE, volume = 10)
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushpet", /datum/mood_event/plushpet)
else
to_chat(user, "You try to pet [src], but it has no stuffing. Aww...")
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plush_nostuffing", /datum/mood_event/plush_nostuffing)
/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, params)
- if(I.is_sharp())
+ if(I.get_sharpness())
if(!grenade)
if(!stuffed)
to_chat(user, "You already murdered it!")
@@ -125,6 +127,7 @@
user.visible_message("[user] tears out the stuffing from [src]!", "You rip a bunch of the stuffing from [src]. Murderer.")
I.play_tool_sound(src)
stuffed = FALSE
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushjack", /datum/mood_event/plushjack)
else
to_chat(user, "You remove the grenade from [src].")
user.put_in_hands(grenade)
@@ -147,6 +150,7 @@
return
if(istype(I, /obj/item/toy/plush))
love(I, user)
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushplay", /datum/mood_event/plushplay)
return
return ..()
@@ -158,7 +162,7 @@
//we are not catholic
if(young == TRUE || Kisser.young == TRUE)
- user.show_message("[src] plays tag with [Kisser].", 1,
+ user.show_message("[src] plays tag with [Kisser].", MSG_VISUAL,
"They're happy.", 0)
Kisser.cheer_up()
cheer_up()
@@ -166,10 +170,10 @@
//never again
else if(Kisser in scorned)
//message, visible, alternate message, neither visible nor audible
- user.show_message("[src] rejects the advances of [Kisser]!", 1,
+ user.show_message("[src] rejects the advances of [Kisser]!", MSG_VISUAL,
"That didn't feel like it worked.", 0)
else if(src in Kisser.scorned)
- user.show_message("[Kisser] realises who [src] is and turns away.", 1,
+ user.show_message("[Kisser] realises who [src] is and turns away.", MSG_VISUAL,
"That didn't feel like it worked.", 0)
//first comes love
@@ -190,7 +194,7 @@
new_lover(Kisser)
Kisser.new_lover(src)
else
- user.show_message("[src] rejects the advances of [Kisser], maybe next time?", 1,
+ user.show_message("[src] rejects the advances of [Kisser], maybe next time?", MSG_VISUAL,
"That didn't feel like it worked, this time.", 0)
//then comes marriage
@@ -558,6 +562,37 @@
item_state = "almaz"
squeak_override = list('modular_citadel/sound/voice/raptor_purr.ogg' = 1)
+/obj/item/toy/plush/lizardplushie/garou
+ icon_state = "garou"
+ item_state = "garou"
+
+/obj/item/toy/plush/lizardplushie/augments
+ icon_state = "augments"
+ item_state = "augments"
+ squeak_override = list('modular_citadel/sound/voice/weh.ogg' = 1) //I have no mouth and I must weh
+ attack_verb = list("hugged", "patted", "snugged", "booped")
+
+/obj/item/toy/plush/lizardplushie/xekov
+ icon_state = "xekov"
+ item_state = "xekov"
+
+/obj/item/toy/plush/lizardplushie/greg
+ icon_state = "greg"
+ item_state = "greg"
+
+/obj/item/toy/plush/lizardplushie/sin
+ icon_state = "sin"
+ item_state = "sin"
+ desc = "An adorable stuffed toy that resembles a lizardperson.. It faintly smells of sulfur."
+
+/obj/item/toy/plush/lizardplushie/ends
+ icon_state = "ends"
+ item_state = "ends"
+
+/obj/item/toy/plush/lizardplushie/lyssa
+ icon_state = "lyssa"
+ item_state = "lyssa"
+
/obj/item/toy/plush/snakeplushie
name = "snake plushie"
desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing."
@@ -715,6 +750,14 @@
item_state = "bhijn"
attack_verb = list("closed", "reworked", "merged")
+/obj/item/toy/plush/aiplush
+ name = "AI plushie"
+ desc = "A little stuffed toy AI core... it appears to be malfunctioning."
+ icon_state = "exo"
+ item_state = "exo"
+ attack_verb = list("hacked", "detonated", "overloaded")
+ squeak_override = list('sound/machines/beep.ogg' = 9, 'sound/machines/buzz-two.ogg' = 1)
+
/obj/item/toy/plush/bird
name = "bird plushie"
desc = "An adorable stuffed plushie that resembles an avian."
@@ -862,6 +905,18 @@
item_state = "redwood"
attack_verb = list("ordered", "bapped", "reprimanded")
+/obj/item/toy/plush/mammal/marisol
+ desc = "An adorable stuffed toy resembling a demi-wolf security officer."
+ icon_state = "marisol"
+ item_state = "marisol"
+ attack_verb = list("arrested", "harmbattoned", "lasered")
+
+/obj/item/toy/plush/mammal/minty
+ desc = "An adorable stuffed toy resembling some sort of crew member. It smells like mint.."
+ icon_state = "minty"
+ item_state = "minty"
+ attack_verb = list("freshened", "brushed")
+
/obj/item/toy/plush/mammal/dog
desc = "An adorable stuffed toy that resembles a canine."
icon_state = "katlin"
@@ -929,8 +984,8 @@
/obj/item/toy/plush/catgirl/skylar
desc = "An adorable stuffed toy that resembles a degenerate."
- icon_state = "skylar"
- item_state = "skylar"
+ icon_state = "skylar2"
+ item_state = "skylar2"
attack_verb = list("powergamed", "merged", "tabled")
squeak_override = list('sound/effects/meow1.ogg' = 1)
@@ -942,15 +997,15 @@
desc = "A masked stuffed toy that resembles a feline scientist."
icon_state = "trilby"
item_state = "trilby"
- attack_verb = list("pred", "coded", "remembered")
+ attack_verb = list("PR'd", "coded", "remembered")
/obj/item/toy/plush/catgirl/fermis
- name = "medcat plushie"
- desc = "An affectionate stuffed toy that resembles a certain medcat, comes complete with battery operated wagging tail!! You get the impression she's cheering you on to to find happiness and be kind to people."
- icon_state = "fermis"
- item_state = "fermis"
- attack_verb = list("cuddled", "petpatted", "wigglepurred")
- squeak_override = list('modular_citadel/sound/voice/merowr.ogg' = 1)
+ name = "medcat plushie"
+ desc = "An affectionate stuffed toy that resembles a certain medcat, comes complete with battery operated wagging tail!! You get the impression she's cheering you on to to find happiness and be kind to people."
+ icon_state = "fermis"
+ item_state = "fermis"
+ attack_verb = list("cuddled", "petpatted", "wigglepurred")
+ squeak_override = list('modular_citadel/sound/voice/merowr.ogg' = 1)
/obj/item/toy/plush/catgirl/mariaf
desc = "An adorable stuffed toy that resembles a very tall cat girl."
@@ -963,3 +1018,9 @@
icon_state = "maya"
item_state = "maya"
attack_verb = list("nuked", "arrested", "harmbatonned")
+
+/obj/item/toy/plush/catgirl/marisa
+ desc = "An adorable stuffed toy that resembles a crew member, or maybe a witch. Having it makes you feel you can win."
+ icon_state = "marisa"
+ item_state = "marisa"
+ attack_verb = list("blasted", "sparked", "dazzled")
diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm
index bd301c36f7..e63b4d7a3a 100644
--- a/code/game/objects/items/pneumaticCannon.dm
+++ b/code/game/objects/items/pneumaticCannon.dm
@@ -55,17 +55,15 @@
return automatic
/obj/item/pneumatic_cannon/examine(mob/user)
- ..()
- var/list/out = list()
+ . = ..()
if(!in_range(user, src))
- out += "You'll need to get closer to see any more."
+ . += "You'll need to get closer to see any more."
return
for(var/obj/item/I in loadedItems)
- out += "[icon2html(I, user)] It has \a [I] loaded."
+ . += "[icon2html(I, user)] It has \a [I] loaded."
CHECK_TICK
if(tank)
- out += "[icon2html(tank, user)] It has \a [tank] mounted onto it."
- to_chat(user, out.Join("
"))
+ . += "[icon2html(tank, user)] It has \a [tank] mounted onto it."
/obj/item/pneumatic_cannon/attackby(obj/item/W, mob/user, params)
if(user.a_intent == INTENT_HARM)
@@ -215,7 +213,7 @@
loadedWeightClass -= I.w_class
else if (A == tank)
tank = null
- update_icons()
+ update_icon()
/obj/item/pneumatic_cannon/ghetto //Obtainable by improvised methods; more gas per use, less capacity, but smaller
name = "improvised pneumatic cannon"
@@ -241,14 +239,13 @@
return
to_chat(user, "You hook \the [thetank] up to \the [src].")
tank = thetank
- update_icons()
+ update_icon()
-/obj/item/pneumatic_cannon/proc/update_icons()
+/obj/item/pneumatic_cannon/update_icon()
cut_overlays()
if(!tank)
return
add_overlay(tank.icon_state)
- update_icon()
/obj/item/pneumatic_cannon/proc/fill_with_type(type, amount)
if(!ispath(type, /obj) && !ispath(type, /mob))
diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm
index f02e92bb3c..27ed0f82e3 100644
--- a/code/game/objects/items/powerfist.dm
+++ b/code/game/objects/items/powerfist.dm
@@ -20,12 +20,12 @@
/obj/item/melee/powerfist/examine(mob/user)
- ..()
+ . = ..()
if(!in_range(user, src))
- to_chat(user, "You'll need to get closer to see any more.")
+ . += "You'll need to get closer to see any more."
return
if(tank)
- to_chat(user, "[icon2html(tank, user)] It has \a [tank] mounted onto it.")
+ . += "[icon2html(tank, user)] It has \a [tank] mounted onto it."
/obj/item/melee/powerfist/attackby(obj/item/W, mob/user, params)
diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm
index 7b3dcb1e00..ddc49a456c 100644
--- a/code/game/objects/items/religion.dm
+++ b/code/game/objects/items/religion.dm
@@ -16,9 +16,9 @@
var/warcry
/obj/item/banner/examine(mob/user)
- ..()
+ . = ..()
if(inspiration_available)
- to_chat(user, "Activate it in your hand to inspire nearby allies of this banner's allegiance!")
+ . += "Activate it in your hand to inspire nearby allies of this banner's allegiance!"
/obj/item/banner/attack_self(mob/living/carbon/human/user)
if(!inspiration_available)
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 95110692c9..ab8030c9c2 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -24,7 +24,7 @@
/obj/item/robot_suit/New()
..()
- updateicon()
+ update_icon()
/obj/item/robot_suit/prebuilt/New()
l_arm = new(src)
@@ -39,7 +39,7 @@
chest.cell = new /obj/item/stock_parts/cell/high/plus(chest)
..()
-/obj/item/robot_suit/proc/updateicon()
+/obj/item/robot_suit/update_icon()
cut_overlays()
if(l_arm)
add_overlay("[l_arm.icon_state]+o")
@@ -96,7 +96,7 @@
to_chat(user, "You disassemble the cyborg shell.")
else
to_chat(user, "There is nothing to remove from the endoskeleton.")
- updateicon()
+ update_icon()
/obj/item/robot_suit/proc/put_in_hand_or_drop(mob/living/user, obj/item/I) //normal put_in_hands() drops the item ontop of the player, this drops it at the suit's loc
if(!user.put_in_hands(I))
@@ -160,7 +160,7 @@
W.icon_state = initial(W.icon_state)
W.cut_overlays()
src.l_leg = W
- src.updateicon()
+ update_icon()
else if(istype(W, /obj/item/bodypart/r_leg/robot))
if(src.r_leg)
@@ -170,7 +170,7 @@
W.icon_state = initial(W.icon_state)
W.cut_overlays()
src.r_leg = W
- src.updateicon()
+ update_icon()
else if(istype(W, /obj/item/bodypart/l_arm/robot))
if(src.l_arm)
@@ -180,7 +180,7 @@
W.icon_state = initial(W.icon_state)
W.cut_overlays()
src.l_arm = W
- src.updateicon()
+ update_icon()
else if(istype(W, /obj/item/bodypart/r_arm/robot))
if(src.r_arm)
@@ -190,7 +190,7 @@
W.icon_state = initial(W.icon_state)//in case it is a dismembered robotic limb
W.cut_overlays()
src.r_arm = W
- src.updateicon()
+ update_icon()
else if(istype(W, /obj/item/bodypart/chest/robot))
var/obj/item/bodypart/chest/robot/CH = W
@@ -202,7 +202,7 @@
CH.icon_state = initial(CH.icon_state) //in case it is a dismembered robotic limb
CH.cut_overlays()
src.chest = CH
- src.updateicon()
+ update_icon()
else if(!CH.wired)
to_chat(user, "You need to attach wires to it first!")
else
@@ -222,7 +222,7 @@
HD.icon_state = initial(HD.icon_state)//in case it is a dismembered robotic limb
HD.cut_overlays()
src.head = HD
- src.updateicon()
+ update_icon()
else
to_chat(user, "You need to attach a flash to it first!")
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index d9045a7a34..bf363f959c 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -74,7 +74,7 @@
/obj/item/borg/upgrade/vtec/action(mob/living/silicon/robot/R, user = usr)
. = ..()
if(.)
- if(R.speed < 0)
+ if(!R.cansprint)
to_chat(R, "A VTEC unit is already installed!")
to_chat(user, "There's no room for another VTEC unit!")
return FALSE
@@ -82,11 +82,13 @@
//R.speed = -2 // Gotta go fast.
//Citadel change - makes vtecs give an ability rather than reducing the borg's speed instantly
R.AddAbility(new/obj/effect/proc_holder/silicon/cyborg/vtecControl)
+ R.cansprint = 0
/obj/item/borg/upgrade/vtec/deactivate(mob/living/silicon/robot/R, user = usr)
. = ..()
if (.)
R.speed = initial(R.speed)
+ R.cansprint = 1
/obj/item/borg/upgrade/disablercooler
name = "cyborg rapid energy blaster cooling module"
@@ -203,7 +205,7 @@
desc = "A trash bag of holding replacement for the janiborg's standard trash bag."
icon_state = "cyborg_upgrade3"
require_module = 1
- module_type = list(/obj/item/robot_module/janitor, /obj/item/robot_module/scrubpup)
+ module_type = list(/obj/item/robot_module/butler)
/obj/item/borg/upgrade/tboh/action(mob/living/silicon/robot/R)
. = ..()
@@ -230,7 +232,7 @@
desc = "An advanced mop replacement for the janiborg's standard mop."
icon_state = "cyborg_upgrade3"
require_module = 1
- module_type = list(/obj/item/robot_module/janitor, /obj/item/robot_module/scrubpup)
+ module_type = list(/obj/item/robot_module/butler)
/obj/item/borg/upgrade/amop/action(mob/living/silicon/robot/R)
. = ..()
@@ -409,8 +411,7 @@
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = list(/obj/item/robot_module/medical,
- /obj/item/robot_module/syndicate_medical,
- /obj/item/robot_module/medihound)
+ /obj/item/robot_module/syndicate_medical)
var/list/additional_reagents = list()
/obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R, user = usr)
@@ -466,23 +467,6 @@
for(var/obj/item/reagent_containers/borghypo/H in R.module.modules)
H.bypass_protection = initial(H.bypass_protection)
-/obj/item/borg/upgrade/defib
- name = "medical cyborg defibrillator"
- desc = "An upgrade to the Medical module, installing a built-in \
- defibrillator, for on the scene revival."
- icon_state = "cyborg_upgrade3"
- require_module = 1
- module_type = list(/obj/item/robot_module/medical,
- /obj/item/robot_module/syndicate_medical,
- /obj/item/robot_module/medihound)
-
-/obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R, user = usr)
- . = ..()
- if(.)
- var/obj/item/twohanded/shockpaddles/cyborg/S = new(R.module)
- R.module.basic_modules += S
- R.module.add_module(S, FALSE, TRUE)
-
/obj/item/borg/upgrade/defib/deactivate(mob/living/silicon/robot/R, user = usr)
. = ..()
if (.)
@@ -497,8 +481,7 @@
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = list(/obj/item/robot_module/medical,
- /obj/item/robot_module/syndicate_medical,
- /obj/item/robot_module/medihound)
+ /obj/item/robot_module/syndicate_medical)
/obj/item/borg/upgrade/processor/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -521,9 +504,7 @@
require_module = 1
module_type = list(
/obj/item/robot_module/medical,
- /obj/item/robot_module/syndicate_medical,
- /obj/item/robot_module/medihound,
- /obj/item/robot_module/borgi)
+ /obj/item/robot_module/syndicate_medical)
/obj/item/borg/upgrade/advhealth/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -607,7 +588,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "borg_BS_RPED"
require_module = TRUE
- module_type = list(/obj/item/robot_module/engineering)
+ module_type = list(/obj/item/robot_module/engineering, /obj/item/robot_module/saboteur)
/obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -643,8 +624,7 @@
icon_state = "pinpointer_crew"
require_module = TRUE
module_type = list(/obj/item/robot_module/medical,
- /obj/item/robot_module/syndicate_medical,
- /obj/item/robot_module/medihound)
+ /obj/item/robot_module/syndicate_medical)
/obj/item/borg/upgrade/pinpointer/action(mob/living/silicon/robot/R, user = usr)
. = ..()
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 886997eab9..178bdd8a5e 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -2,8 +2,8 @@
name = "medical pack"
singular_name = "medical pack"
icon = 'icons/obj/stack_objects.dmi'
- amount = 6
- max_amount = 6
+ amount = 12
+ max_amount = 12
w_class = WEIGHT_CLASS_TINY
full_w_class = WEIGHT_CLASS_TINY
throw_speed = 3
@@ -11,95 +11,42 @@
resistance_flags = FLAMMABLE
max_integrity = 40
novariants = FALSE
- var/heal_brute = 0
- var/heal_burn = 0
- var/stop_bleeding = 0
+ item_flags = NOBLUDGEON
var/self_delay = 50
/obj/item/stack/medical/attack(mob/living/M, mob/user)
- if(M.stat == DEAD && !stop_bleeding)
- var/t_him = "it"
- if(M.gender == MALE)
- t_him = "him"
- else if(M.gender == FEMALE)
- t_him = "her"
- to_chat(user, "\The [M] is dead, you cannot help [t_him]!")
+ . = ..()
+ if(!M.can_inject(user, TRUE))
return
-
- if(!iscarbon(M) && !isanimal(M))
- to_chat(user, "You don't know how to apply \the [src] to [M]!")
- return 1
-
- var/obj/item/bodypart/affecting
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- affecting = C.get_bodypart(check_zone(user.zone_selected))
- if(!affecting) //Missing limb?
- to_chat(user, "[C] doesn't have \a [parse_zone(user.zone_selected)]!")
+ if(M == user)
+ user.visible_message("[user] starts to apply \the [src] on [user.p_them()]self...", "You begin applying \the [src] on yourself...")
+ if(!do_mob(user, M, self_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject, user, TRUE)))
return
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- if(stop_bleeding)
- if(H.bleedsuppress)
- to_chat(user, "[H]'s bleeding is already bandaged!")
- return
- else if(!H.bleed_rate)
- to_chat(user, "[H] isn't bleeding!")
- return
+ if(heal(M, user))
+ log_combat(user, M, "healed", src.name)
+ use(1)
- if(isliving(M))
- if(!M.can_inject(user, 1))
- return
+/obj/item/stack/medical/proc/heal(mob/living/M, mob/user)
+ return
- if(user)
- if (M != user)
- if (isanimal(M))
- var/mob/living/simple_animal/critter = M
- if (!(critter.healable))
- to_chat(user, " You cannot use [src] on [M]!")
- return
- else if (critter.health == critter.maxHealth)
- to_chat(user, " [M] is at full health.")
- return
- else if(src.heal_brute < 1)
- to_chat(user, " [src] won't help [M] at all.")
- return
- user.visible_message("[user] applies [src] on [M].", "You apply [src] on [M].")
- else
- var/t_himself = "itself"
- if(user.gender == MALE)
- t_himself = "himself"
- else if(user.gender == FEMALE)
- t_himself = "herself"
- user.visible_message("[user] starts to apply [src] on [t_himself]...", "You begin applying [src] on yourself...")
- if(!do_mob(user, M, self_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject,user,1)))
- return
- user.visible_message("[user] applies [src] on [t_himself].", "You apply [src] on yourself.")
-
-
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- affecting = C.get_bodypart(check_zone(user.zone_selected))
- if(!affecting) //Missing limb?
- to_chat(user, "[C] doesn't have \a [parse_zone(user.zone_selected)]!")
- return
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- if(stop_bleeding)
- if(!H.bleedsuppress) //so you can't stack bleed suppression
- H.suppress_bloodloss(stop_bleeding)
- if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR
- if(affecting.heal_damage(heal_brute, heal_burn))
+/obj/item/stack/medical/proc/heal_carbon(mob/living/carbon/C, mob/user, brute, burn)
+ var/obj/item/bodypart/affecting = C.get_bodypart(check_zone(user.zone_selected))
+ if(!affecting) //Missing limb?
+ to_chat(user, "[C] doesn't have \a [parse_zone(user.zone_selected)]!")
+ return
+ if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR
+ if(affecting.brute_dam && brute || affecting.burn_dam && burn)
+ user.visible_message("[user] applies \the [src] on [C]'s [affecting.name].", "You apply \the [src] on [C]'s [affecting.name].")
+ if(affecting.heal_damage(brute, burn))
C.update_damage_overlays()
- else
- to_chat(user, "Medicine won't work on a robotic limb!")
- else
- M.heal_bodypart_damage((src.heal_brute/2), (src.heal_burn/2))
-
- use(1)
-
+ return TRUE
+ to_chat(user, "[C]'s [affecting.name] can not be healed with \the [src].")
+ return
+ to_chat(user, "\The [src] won't work on a robotic limb!")
+/obj/item/stack/medical/get_belt_overlay()
+ return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch")
/obj/item/stack/medical/bruise_pack
name = "bruise pack"
@@ -108,27 +55,54 @@
icon_state = "brutepack"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- heal_brute = 40
+ var/heal_brute = 20
self_delay = 20
grind_results = list("styptic_powder" = 10)
+/obj/item/stack/medical/bruise_pack/heal(mob/living/M, mob/user)
+ if(M.stat == DEAD)
+ to_chat(user, " [M] is dead. You can not help [M.p_them()]!")
+ return
+ if(isanimal(M))
+ var/mob/living/simple_animal/critter = M
+ if (!(critter.healable))
+ to_chat(user, " You cannot use \the [src] on [M]!")
+ return FALSE
+ else if (critter.health == critter.maxHealth)
+ to_chat(user, " [M] is at full health.")
+ return FALSE
+ user.visible_message("[user] applies \the [src] on [M].", "You apply \the [src] on [M].")
+ M.heal_bodypart_damage((heal_brute/2))
+ return TRUE
+ if(iscarbon(M))
+ return heal_carbon(M, user, heal_brute, 0)
+ to_chat(user, "You can't heal [M] with the \the [src]!")
+
/obj/item/stack/medical/bruise_pack/suicide_act(mob/user)
user.visible_message("[user] is bludgeoning [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!")
return (BRUTELOSS)
/obj/item/stack/medical/gauze
name = "medical gauze"
- desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, but does not heal wounds."
+ desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, heals minor wounds."
gender = PLURAL
singular_name = "medical gauze"
icon_state = "gauze"
- stop_bleeding = 1800
- self_delay = 20
- max_amount = 12
+ var/stop_bleeding = 1800
+ var/heal_brute = 5
+ self_delay = 10
+/obj/item/stack/medical/gauze/heal(mob/living/M, mob/user)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(!H.bleedsuppress && H.bleed_rate) //so you can't stack bleed suppression
+ H.suppress_bloodloss(stop_bleeding)
+ to_chat(user, "You stop the bleeding of [M]!")
+ return TRUE
+ to_chat(user, "You can not use \the [src] on [M]!")
/obj/item/stack/medical/gauze/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/wirecutters) || I.is_sharp())
+ if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness())
if(get_amount() < 2)
to_chat(user, "You need at least two gauzes to do this!")
return
@@ -149,6 +123,7 @@
singular_name = "improvised gauze"
desc = "A roll of cloth roughly cut from something that can stop bleeding, but does not heal wounds."
stop_bleeding = 900
+ heal_brute = 0
/obj/item/stack/medical/gauze/cyborg
materials = list()
@@ -163,13 +138,18 @@
icon_state = "ointment"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- heal_burn = 40
+ var/heal_burn = 20
self_delay = 20
grind_results = list("silver_sulfadiazine" = 10)
+/obj/item/stack/medical/ointment/heal(mob/living/M, mob/user)
+ if(M.stat == DEAD)
+ to_chat(user, " [M] is dead. You can not help [M.p_them()]!")
+ return
+ if(iscarbon(M))
+ return heal_carbon(M, user, 0, heal_burn)
+ to_chat(user, "You can't heal [M] with the \the [src]!")
+
/obj/item/stack/medical/ointment/suicide_act(mob/living/user)
user.visible_message("[user] is squeezing \the [src] into [user.p_their()] mouth! [user.p_do(TRUE)]n't [user.p_they()] know that stuff is toxic?")
return TOXLOSS
-
-/obj/item/stack/medical/get_belt_overlay()
- return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch")
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index c9fc59a3fe..53209fac2f 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -39,6 +39,9 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
/obj/item/stack/sheet/glass/fifty
amount = 50
+/obj/item/stack/sheet/glass/five
+ amount = 5
+
/obj/item/stack/sheet/glass/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.glass_recipes
return ..()
diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm
index 01351ab2e2..7297bb3aae 100644
--- a/code/game/objects/items/stacks/sheets/leather.dm
+++ b/code/game/objects/items/stacks/sheets/leather.dm
@@ -219,7 +219,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \
//Step one - dehairing.
/obj/item/stack/sheet/animalhide/attackby(obj/item/W, mob/user, params)
- if(W.is_sharp())
+ if(W.get_sharpness())
playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
user.visible_message("[user] starts cutting hair off \the [src].", "You start cutting the hair off \the [src]...", "You hear the sound of a knife rubbing against flesh.")
if(do_after(user, 50, target = src))
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 46c0d47388..fe42f88f56 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -4,7 +4,6 @@ Mineral Sheets
- Sandstone
- Sandbags
- Diamond
- - Snow
- Uranium
- Plasma
- Gold
@@ -15,8 +14,9 @@ Mineral Sheets
Others:
- Adamantine
- Mythril
- - Enriched Uranium
+ - Snow
- Abductor
+ - Coal
*/
/obj/item/stack/sheet/mineral/Initialize(mapload)
@@ -55,6 +55,9 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \
/obj/item/stack/sheet/mineral/sandstone/thirty
amount = 30
+/obj/item/stack/sheet/mineral/sandstone/twelve
+ amount = 12
+
/*
* Sandbags
*/
@@ -178,11 +181,11 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
. = ..()
/obj/item/stack/sheet/mineral/plasma/attackby(obj/item/W as obj, mob/user as mob, params)
- if(W.is_hot() > 300)//If the temperature of the object is over 300, then ignite
+ if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
var/turf/T = get_turf(src)
message_admins("Plasma sheets ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma sheets ignited by [key_name(user)] in [AREACOORD(T)]")
- fire_act(W.is_hot())
+ fire_act(W.get_temperature())
else
return ..()
@@ -407,3 +410,36 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \
/obj/item/stack/sheet/mineral/abductor/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.abductor_recipes
. = ..()
+
+/*
+ * Coal
+ */
+
+/obj/item/stack/sheet/mineral/coal
+ name = "coal"
+ desc = "Someone's gotten on the naughty list."
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "slag"
+ singular_name = "coal lump"
+ merge_type = /obj/item/stack/sheet/mineral/coal
+ grind_results = list("carbon" = 20)
+
+/obj/item/stack/sheet/mineral/coal/attackby(obj/item/W, mob/user, params)
+ if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
+ var/turf/T = get_turf(src)
+ message_admins("Coal ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
+ log_game("Coal ignited by [key_name(user)] in [AREACOORD(T)]")
+ fire_act(W.get_temperature())
+ return TRUE
+ else
+ return ..()
+
+/obj/item/stack/sheet/mineral/coal/fire_act(exposed_temperature, exposed_volume)
+ atmos_spawn_air("co2=[amount*10];TEMP=[exposed_temperature]")
+ qdel(src)
+
+/obj/item/stack/sheet/mineral/coal/five
+ amount = 5
+
+/obj/item/stack/sheet/mineral/coal/ten
+ amount = 10
\ No newline at end of file
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index c085306892..4fc31ea674 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -10,6 +10,7 @@
* Runed Metal (cult)
* Brass (clockwork cult)
* Bronze (bake brass)
+ * Cotton/Duracotton
*/
/*
@@ -186,36 +187,48 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
*/
GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1), \
+ new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2), \
new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \
new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \
+ null, \
+ new/datum/stack_recipe_list("pews", list(
+ new /datum/stack_recipe("pew (middle)", /obj/structure/chair/pew, 3, one_per_turf = TRUE, on_floor = TRUE),\
+ new /datum/stack_recipe("pew (left)", /obj/structure/chair/pew/left, 3, one_per_turf = TRUE, on_floor = TRUE),\
+ new /datum/stack_recipe("pew (right)", /obj/structure/chair/pew/right, 3, one_per_turf = TRUE, on_floor = TRUE),\
+ )),
+ null, \
new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 40), \
new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \
+ new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \
+ new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15),\
+ null, \
new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("plywood chair", /obj/structure/chair/comfy/plywood, 4, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
+ null, \
new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("rustic wooden door", /obj/structure/mineral_door/woodrustic, 10, time = 20, one_per_turf = TRUE, on_floor = TRUE), \
+ null, \
+ new/datum/stack_recipe("wooden barrel", /obj/structure/fermenting_barrel, 10, time = 20, one_per_turf = TRUE, on_floor = TRUE),\
new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("dresser", /obj/structure/dresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\
- new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("loom", /obj/structure/loom, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \
- new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\
- new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2), \
- new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\
new/datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE),\
new/datum/stack_recipe("wooden crate", /obj/structure/closet/crate/wooden, 6, time = 50, one_per_turf = TRUE, on_floor = TRUE),\
- new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15),\
+ new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("loom", /obj/structure/loom, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\
+ null, \
+ new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\
+ new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\
))
/obj/item/stack/sheet/mineral/wood
name = "wooden plank"
- desc = "One can only guess that this is a bunch of wood."
+ desc = "One can only guess that this is a bunch of wood. You might be able to make a stake with this if you use something sharp on it"
singular_name = "wood plank"
icon_state = "sheet-wood"
item_state = "sheet-wood"
@@ -227,6 +240,35 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
novariants = TRUE
grind_results = list("carbon" = 20)
+
+/obj/item/stack/sheet/mineral/wood/attackby(obj/item/W, mob/user, params) // NOTE: sheet_types.dm is where the WOOD stack lives. Maybe move this over there.
+ // Taken from /obj/item/stack/rods/attackby in [rods.dm]
+ if(W.get_sharpness())
+ user.visible_message("[user] begins whittling [src] into a pointy object.", \
+ "You begin whittling [src] into a sharp point at one end.", \
+ "You hear wood carving.")
+ // 8 Second Timer
+ if(!do_after(user, 80, TRUE, src))
+ return
+ // Make Stake
+ var/obj/item/stake/basic/new_item = new(user.loc)
+ user.visible_message("[user] finishes carving a stake out of [src].", \
+ "You finish carving a stake out of [src].")
+ // Prepare to Put in Hands (if holding wood)
+ var/obj/item/stack/sheet/mineral/wood/N = src
+ var/replace = (user.get_inactive_held_item() == N)
+ // Use Wood
+ N.use(1)
+ // If stack depleted, put item in that hand (if it had one)
+ if (!N && replace)
+ user.put_in_hands(new_item)
+ if(istype(W, merge_type))
+ var/obj/item/stack/S = W
+ if(merge(S))
+ to_chat(user, "Your [S.name] stack now contains [S.get_amount()] [S.singular_name]\s.")
+ else
+ . = ..()
+
/obj/item/stack/sheet/mineral/wood/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.wood_recipes
return ..()
@@ -234,6 +276,33 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
/obj/item/stack/sheet/mineral/wood/fifty
amount = 50
+/*
+ * Bamboo
+ */
+
+GLOBAL_LIST_INIT(bamboo_recipes, list ( \
+ new/datum/stack_recipe("punji sticks trap", /obj/structure/punji_sticks, 5, time = 30, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("blow gun", /obj/item/gun/syringe/blowgun, 10, time = 70), \
+ ))
+
+/obj/item/stack/sheet/mineral/bamboo
+ name = "bamboo cuttings"
+ desc = "Finely cut bamboo sticks."
+ singular_name = "cut bamboo"
+ icon_state = "sheet-bamboo"
+ item_state = "sheet-bamboo"
+ icon = 'icons/obj/stack_objects.dmi'
+ throwforce = 15
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
+ resistance_flags = FLAMMABLE
+ merge_type = /obj/item/stack/sheet/mineral/bamboo
+ grind_results = list("carbon" = 5)
+
+/obj/item/stack/sheet/mineral/bamboo/Initialize(mapload, new_amount, merge = TRUE)
+ recipes = GLOB.bamboo_recipes
+ return ..()
+
+
/*
* Cloth
*/
@@ -272,6 +341,9 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
resistance_flags = FLAMMABLE
force = 0
throwforce = 0
+ pull_effort = 90
+ is_fabric = TRUE
+ loom_result = /obj/item/stack/sheet/silk
merge_type = /obj/item/stack/sheet/cloth
/obj/item/stack/sheet/cloth/Initialize(mapload, new_amount, merge = TRUE)
@@ -281,6 +353,22 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
/obj/item/stack/sheet/cloth/ten
amount = 10
+/obj/item/stack/sheet/cloth/thirty
+ amount = 30
+
+/obj/item/stack/sheet/silk
+ name = "silk"
+ desc = "A long soft material. This one is just made out of cotton rather then any spiders or wyrms"
+ singular_name = "silk sheet"
+ icon_state = "sheet-silk"
+ item_state = "sheet-cloth"
+ novariants = TRUE
+ merge_type = /obj/item/stack/sheet/silk
+
+//obj/item/stack/sheet/silk/Initialize(mapload, new_amount, merge = TRUE)
+// recipes = GLOB.silk_recipes
+// return ..()
+
//Durathread fuck slash-asterisk comments
GLOBAL_LIST_INIT(durathread_recipes, list ( \
new/datum/stack_recipe("durathread jumpsuit", /obj/item/clothing/under/durathread, 4, time = 40),
@@ -588,6 +676,7 @@ GLOBAL_LIST_INIT(plastic_recipes, list(
new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = TRUE, on_floor = TRUE, time = 40), \
new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/empty), \
new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/large/empty,3), \
+ new /datum/stack_recipe("large trash cart", /obj/structure/closet/crate/bin,50),\
new /datum/stack_recipe("wet floor sign", /obj/item/caution, 2)))
/obj/item/stack/sheet/plastic
@@ -649,6 +738,12 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
pull_effort = 30
loom_result = /obj/item/stack/sheet/cloth
+/obj/item/stack/sheet/cotton/ten
+ amount = 10
+
+/obj/item/stack/sheet/cotton/thirty
+ amount = 30
+
/obj/item/stack/sheet/cotton/durathread
name = "raw durathread bundle"
desc = "A bundle of raw durathread ready to be spun on the loom."
@@ -657,5 +752,3 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
merge_type = /obj/item/stack/sheet/cotton/durathread
pull_effort = 70
loom_result = /obj/item/stack/sheet/durathread
-
-
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 7654199cf5..e8bd50f19b 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -76,23 +76,23 @@
. = ..()
/obj/item/stack/examine(mob/user)
- ..()
+ . = ..()
if (is_cyborg)
if(singular_name)
- to_chat(user, "There is enough energy for [get_amount()] [singular_name]\s.")
+ . += "There is enough energy for [get_amount()] [singular_name]\s."
else
- to_chat(user, "There is enough energy for [get_amount()].")
+ . += "There is enough energy for [get_amount()]."
return
if(singular_name)
if(get_amount()>1)
- to_chat(user, "There are [get_amount()] [singular_name]\s in the stack.")
+ . += "There are [get_amount()] [singular_name]\s in the stack."
else
- to_chat(user, "There is [get_amount()] [singular_name] in the stack.")
+ . += "There is [get_amount()] [singular_name] in the stack."
else if(get_amount()>1)
- to_chat(user, "There are [get_amount()] in the stack.")
+ . += "There are [get_amount()] in the stack."
else
- to_chat(user, "There is [get_amount()] in the stack.")
- to_chat(user, "Alt-click to take a custom amount.")
+ . += "There is [get_amount()] in the stack."
+ . += "Alt-click to take a custom amount."
/obj/item/stack/proc/get_amount()
if(is_cyborg)
@@ -350,6 +350,7 @@
. = ..()
/obj/item/stack/AltClick(mob/living/user)
+ . = ..()
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return
if(is_cyborg)
@@ -363,10 +364,11 @@
max = get_amount()
stackmaterial = min(max, stackmaterial)
if(stackmaterial == null || stackmaterial <= 0 || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
- return
+ return TRUE
else
change_stack(user, stackmaterial)
to_chat(user, "You take [stackmaterial] sheets out of the stack")
+ return TRUE
/obj/item/stack/proc/change_stack(mob/user, amount)
if(!use(amount, TRUE, FALSE))
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 847e1b521e..18acb5e14d 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -73,6 +73,64 @@
turf_type = /turf/open/floor/grass
resistance_flags = FLAMMABLE
+//Fairygrass
+/obj/item/stack/tile/fairygrass
+ name = "fairygrass tile"
+ singular_name = "fairygrass floor tile"
+ desc = "A patch of odd, glowing blue grass."
+ icon_state = "tile_fairygrass"
+ item_state = "tile-fairygrass"
+ turf_type = /turf/open/floor/grass/fairy
+ resistance_flags = FLAMMABLE
+ color = "#33CCFF"
+
+/obj/item/stack/tile/fairygrass/white
+ name = "white fairygrass tile"
+ singular_name = "white fairygrass floor tile"
+ desc = "A patch of odd, glowing white grass."
+ turf_type = /turf/open/floor/grass/fairy/white
+ color = "#FFFFFF"
+
+/obj/item/stack/tile/fairygrass/red
+ name = "red fairygrass tile"
+ singular_name = "red fairygrass floor tile"
+ desc = "A patch of odd, glowing red grass."
+ turf_type = /turf/open/floor/grass/fairy/red
+ color = "#FF3333"
+
+/obj/item/stack/tile/fairygrass/yellow
+ name = "yellow fairygrass tile"
+ singular_name = "yellow fairygrass floor tile"
+ desc = "A patch of odd, glowing yellow grass."
+ turf_type = /turf/open/floor/grass/fairy/yellow
+ color = "#FFFF66"
+
+/obj/item/stack/tile/fairygrass/green
+ name = "green fairygrass tile"
+ singular_name = "green fairygrass floor tile"
+ desc = "A patch of odd, glowing green grass."
+ turf_type = /turf/open/floor/grass/fairy/green
+ color = "#99FF99"
+
+/obj/item/stack/tile/fairygrass/blue
+ name = "blue fairygrass tile"
+ singular_name = "blue fairygrass floor tile"
+ desc = "A patch of odd, glowing blue grass."
+ turf_type = /turf/open/floor/grass/fairy/blue
+
+/obj/item/stack/tile/fairygrass/purple
+ name = "purple fairygrass tile"
+ singular_name = "purple fairygrass floor tile"
+ desc = "A patch of odd, glowing purple grass."
+ turf_type = /turf/open/floor/grass/fairy/purple
+ color = "#D966FF"
+
+/obj/item/stack/tile/fairygrass/pink
+ name = "pink fairygrass tile"
+ singular_name = "pink fairygrass floor tile"
+ desc = "A patch of odd, glowing pink grass."
+ turf_type = /turf/open/floor/grass/fairy/pink
+ color = "#FFB3DA"
//Wood
/obj/item/stack/tile/wood
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index a79eb299da..d200471b5b 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -60,7 +60,7 @@
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.allow_big_nesting = TRUE
- STR.max_w_class = WEIGHT_CLASS_GIGANTIC
+ STR.max_w_class = WEIGHT_CLASS_BULKY
STR.max_combined_w_class = 35
/obj/item/storage/backpack/holding/suicide_act(mob/living/user)
@@ -253,7 +253,7 @@
/obj/item/storage/backpack/satchel/bone
name = "bone satchel"
- desc = "A bone satchel fashend with watcher wings and large bones from goliath. Can be worn on the belt."
+ desc = "A grotesque satchel made of sinews and bones."
icon = 'icons/obj/mining.dmi'
icon_state = "goliath_saddle"
slot_flags = ITEM_SLOT_BACK
@@ -551,7 +551,7 @@
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
new /obj/item/clothing/shoes/magboots/syndie(src)
- new /obj/item/storage/firstaid/tactical(src)
+ new /obj/item/storage/firstaid/tactical/nukeop(src)
new /obj/item/gun/ballistic/automatic/l6_saw/toy(src)
new /obj/item/ammo_box/foambox/riot(src)
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 713dbe4133..3a4579d3f8 100755
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -575,7 +575,9 @@
/obj/item/clothing/gloves,
/obj/item/melee/flyswatter,
/obj/item/paint/paint_remover,
- /obj/item/assembly/mousetrap
+ /obj/item/assembly/mousetrap,
+ /obj/item/screwdriver,
+ /obj/item/stack/cable_coil
))
/obj/item/storage/belt/bandolier
@@ -755,22 +757,12 @@
STR.rustle_sound = FALSE
STR.max_w_class = WEIGHT_CLASS_BULKY
STR.can_hold = typecacheof(fitting_swords)
+ STR.quickdraw = TRUE
/obj/item/storage/belt/sabre/examine(mob/user)
- ..()
+ . = ..()
if(length(contents))
- to_chat(user, "Alt-click it to quickly draw the blade.")
-
-/obj/item/storage/belt/sabre/AltClick(mob/user)
- if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
- return
- if(length(contents))
- var/obj/item/I = contents[1]
- user.visible_message("[user] takes [I] out of [src].", "You take [I] out of [src].")
- user.put_in_hands(I)
- update_icon()
- else
- to_chat(user, "[src] is empty.")
+ . += "Alt-click it to quickly draw the blade."
/obj/item/storage/belt/sabre/update_icon()
. = ..()
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index f50b5d1be6..e214db3c71 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -105,25 +105,37 @@
// Ordinary survival box
/obj/item/storage/box/survival/PopulateContents()
new /obj/item/clothing/mask/breath(src)
- new /obj/item/tank/internals/emergency_oxygen(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
+ if(!isplasmaman(loc))
+ new /obj/item/tank/internals/emergency_oxygen(src)
+ else
+ new /obj/item/tank/internals/plasmaman/belt(src)
+
/obj/item/storage/box/survival/radio/PopulateContents()
..() // we want the survival stuff too.
new /obj/item/radio/off(src)
/obj/item/storage/box/survival_mining/PopulateContents()
new /obj/item/clothing/mask/gas/explorer(src)
- new /obj/item/tank/internals/emergency_oxygen/engi(src)
new /obj/item/crowbar/red(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
+ if(!isplasmaman(loc))
+ new /obj/item/tank/internals/emergency_oxygen(src)
+ else
+ new /obj/item/tank/internals/plasmaman/belt(src)
+
// Engineer survival box
/obj/item/storage/box/engineer/PopulateContents()
new /obj/item/clothing/mask/breath(src)
- new /obj/item/tank/internals/emergency_oxygen/engi(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
+ if(!isplasmaman(loc))
+ new /obj/item/tank/internals/emergency_oxygen/engi(src)
+ else
+ new /obj/item/tank/internals/plasmaman/belt(src)
+
/obj/item/storage/box/engineer/radio/PopulateContents()
..() // we want the regular items too.
new /obj/item/radio/off(src)
@@ -131,14 +143,22 @@
// Syndie survival box
/obj/item/storage/box/syndie/PopulateContents()
new /obj/item/clothing/mask/gas/syndicate(src)
- new /obj/item/tank/internals/emergency_oxygen/engi(src)
+
+ if(!isplasmaman(loc))
+ new /obj/item/tank/internals/emergency_oxygen/engi(src)
+ else
+ new /obj/item/tank/internals/plasmaman/belt(src)
// Security survival box
/obj/item/storage/box/security/PopulateContents()
new /obj/item/clothing/mask/gas/sechailer(src)
- new /obj/item/tank/internals/emergency_oxygen(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
+ if(!isplasmaman(loc))
+ new /obj/item/tank/internals/emergency_oxygen(src)
+ else
+ new /obj/item/tank/internals/plasmaman/belt(src)
+
/obj/item/storage/box/security/radio/PopulateContents()
..() // we want the regular stuff too
new /obj/item/radio/off(src)
@@ -679,6 +699,7 @@
user.changeNext_move(CLICK_CD_MELEE)
playsound(loc, "rustle", 50, 1, -5)
user.visible_message("[user] hugs \the [src].","You hug \the [src].")
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"hugbox", /datum/mood_event/hugbox)
/////clown box & honkbot assembly
/obj/item/storage/box/clown
@@ -707,11 +728,16 @@
new /obj/item/stack/medical/ointment(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
+// Clown survival box
/obj/item/storage/box/hug/survival/PopulateContents()
new /obj/item/clothing/mask/breath(src)
- new /obj/item/tank/internals/emergency_oxygen(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
+ if(!isplasmaman(loc))
+ new /obj/item/tank/internals/emergency_oxygen(src)
+ else
+ new /obj/item/tank/internals/plasmaman/belt(src)
+
/obj/item/storage/box/rubbershot
name = "box of rubber shots"
desc = "A box full of rubber shots, designed for riot shotguns."
@@ -855,15 +881,15 @@
if(SMILEY)
desc = "A paper sack with a crude smile etched onto the side."
return 0
- else if(W.is_sharp())
+ else if(W.get_sharpness())
if(!contents.len)
if(item_state == "paperbag_None")
- user.show_message("You cut eyeholes into [src].", 1)
+ user.show_message("You cut eyeholes into [src].", MSG_VISUAL)
new /obj/item/clothing/head/papersack(user.loc)
qdel(src)
return 0
else if(item_state == "paperbag_SmileyFace")
- user.show_message("You cut eyeholes into [src] and modify the design.", 1)
+ user.show_message("You cut eyeholes into [src] and modify the design.", MSG_VISUAL)
new /obj/item/clothing/head/papersack/smiley(user.loc)
qdel(src)
return 0
@@ -875,7 +901,7 @@
#undef HEART
#undef SMILEY
-/obj/item/storage/box/ingredients //This box is for the randomely chosen version the chef spawns with, it shouldn't actually exist.
+/obj/item/storage/box/ingredients //This box is for the randomly chosen version the chef spawns with, it shouldn't actually exist.
name = "ingredients box"
illustration = "fruit"
var/theme_name
diff --git a/code/game/objects/items/storage/dakis.dm b/code/game/objects/items/storage/dakis.dm
index 2703581a94..1939593c8e 100644
--- a/code/game/objects/items/storage/dakis.dm
+++ b/code/game/objects/items/storage/dakis.dm
@@ -7,7 +7,7 @@
desc = "A large pillow depicting a girl in a compromising position. Featuring as many dimensions as you."
icon = 'icons/obj/daki.dmi'
icon_state = "daki_base"
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
var/cooldowntime = 20
var/static/list/dakimakura_options = list("Callie","Casca","Chaika","Elisabeth","Foxy Grandpa","Haruko","Holo","Ian","Jolyne","Kurisu","Marie","Mugi","Nar'Sie","Patchouli","Plutia","Rei","Reisen","Naga","Squid","Squigly","Tomoko","Toriel","Umaru","Yaranaika","Yoko") //Kurisu is the ideal girl." - Me, Logos.
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index f0a9ad019b..f05078de81 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -36,12 +36,12 @@
icon_state = "[icon_type]box"
/obj/item/storage/fancy/examine(mob/user)
- ..()
+ . = ..()
if(fancy_open)
if(length(contents) == 1)
- to_chat(user, "There is one [icon_type] left.")
+ . += "There is one [icon_type] left."
else
- to_chat(user, "There are [contents.len <= 0 ? "no" : "[contents.len]"] [icon_type]s left.")
+ . += "There are [contents.len <= 0 ? "no" : "[contents.len]"] [icon_type]s left."
/obj/item/storage/fancy/attack_self(mob/user)
fancy_open = !fancy_open
@@ -143,8 +143,8 @@
STR.can_hold = typecacheof(list(/obj/item/clothing/mask/cigarette, /obj/item/lighter))
/obj/item/storage/fancy/cigarettes/examine(mob/user)
- ..()
- to_chat(user, "Alt-click to extract contents.")
+ . = ..()
+ . += "Alt-click to extract contents."
/obj/item/storage/fancy/cigarettes/AltClick(mob/living/carbon/user)
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
@@ -157,6 +157,7 @@
to_chat(user, "You take \a [W] out of the pack.")
else
to_chat(user, "There are no [icon_type]s left in the pack.")
+ return TRUE
/obj/item/storage/fancy/cigarettes/update_icon()
if(fancy_open || !contents.len)
@@ -309,9 +310,10 @@
if(fancy_open)
icon_state = "[initial(icon_state)]_open"
- var/cigar_position = 1 //generate sprites for cigars in the box
+ var/cigar_position = 0 //to keep track of the pixel_x offset of each new overlay.
for(var/obj/item/clothing/mask/cigarette/cigar/smokes in contents)
- var/mutable_appearance/cigar_overlay = mutable_appearance(icon, "[smokes.icon_off]_[cigar_position]")
+ var/mutable_appearance/cigar_overlay = mutable_appearance(icon, "[smokes.icon_off]")
+ cigar_overlay.pixel_x = 3 * cigar_position
add_overlay(cigar_overlay)
cigar_position++
diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm
index 822a1d5011..8c96e567d1 100644
--- a/code/game/objects/items/storage/firstaid.dm
+++ b/code/game/objects/items/storage/firstaid.dm
@@ -18,6 +18,12 @@
throw_speed = 3
throw_range = 7
var/empty = FALSE
+ var/list/possible_icons = list("firstaid","firstaid2","firstaid3","firstaid4")
+
+/obj/item/storage/firstaid/Initialize(mapload)
+ . = ..()
+ if(LAZYLEN(possible_icons))
+ icon_state = pick(possible_icons)
/obj/item/storage/firstaid/regular
icon_state = "firstaid"
@@ -56,17 +62,14 @@
/obj/item/storage/firstaid/fire
name = "burn treatment kit"
desc = "A specialized medical kit for when the toxins lab -spontaneously- burns down."
- icon_state = "ointment"
+ icon_state = "burn"
item_state = "firstaid-ointment"
+ possible_icons = list("burn","burn2","burn3","burn4")
/obj/item/storage/firstaid/fire/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins rubbing \the [src] against [user.p_them()]self! It looks like [user.p_theyre()] trying to start a fire!")
return FIRELOSS
-/obj/item/storage/firstaid/fire/Initialize(mapload)
- . = ..()
- icon_state = pick("ointment","firefirstaid")
-
/obj/item/storage/firstaid/fire/PopulateContents()
if(empty)
return
@@ -80,17 +83,14 @@
/obj/item/storage/firstaid/toxin
name = "toxin treatment kit"
desc = "Used to treat toxic blood content and radiation poisoning."
- icon_state = "antitoxin"
+ icon_state = "toxin"
item_state = "firstaid-toxin"
+ possible_icons = list("toxin","toxin2","toxin3","toxin4")
/obj/item/storage/firstaid/toxin/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins licking the lead paint off \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
return TOXLOSS
-/obj/item/storage/firstaid/toxin/Initialize(mapload)
- . = ..()
- icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3")
-
/obj/item/storage/firstaid/toxin/PopulateContents()
if(empty)
return
@@ -103,8 +103,9 @@
/obj/item/storage/firstaid/radbgone
name = "radiation treatment kit"
desc = "Used to treat minor toxic blood content and major radiation poisoning."
- icon_state = "antitoxin"
+ icon_state = "rad"
item_state = "firstaid-toxin"
+ possible_icons = list("rad","rad2","rad3")
/obj/item/storage/firstaid/radbgone/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins licking the lead paint off \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
@@ -128,8 +129,9 @@
/obj/item/storage/firstaid/o2
name = "oxygen deprivation treatment kit"
desc = "A box full of oxygen goodies."
- icon_state = "o2"
+ icon_state = "oxy"
item_state = "firstaid-o2"
+ possible_icons = list("oxy", "oxy2", "oxy3", "oxy4")
/obj/item/storage/firstaid/o2/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins hitting [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
@@ -149,6 +151,7 @@
desc = "A first aid kit for when you get toolboxed."
icon_state = "brute"
item_state = "firstaid-brute"
+ possible_icons = list("brute", "brute2", "brute3", "brute4")
/obj/item/storage/firstaid/brute/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins beating [user.p_them()]self over the head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
@@ -166,24 +169,43 @@
/obj/item/storage/firstaid/tactical
name = "combat medical kit"
desc = "I hope you've got insurance."
- icon_state = "bezerk"
+ icon_state = "tactical"
+ possible_icons = null
/obj/item/storage/firstaid/tactical/ComponentInitialize()
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_w_class = WEIGHT_CLASS_NORMAL
+ STR.max_combined_w_class = 16
+ STR.max_items = 8
/obj/item/storage/firstaid/tactical/PopulateContents()
if(empty)
return
new /obj/item/stack/medical/gauze(src)
new /obj/item/defibrillator/compact/combat/loaded(src)
- new /obj/item/reagent_containers/hypospray/combat(src)
- new /obj/item/reagent_containers/pill/patch/styptic(src)
- new /obj/item/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/reagent_containers/syringe/lethal/choral(src)
+ new /obj/item/reagent_containers/hypospray/combat/omnizine(src)
+ new /obj/item/reagent_containers/medspray/styptic(src)
+ new /obj/item/reagent_containers/medspray/silver_sulf(src)
+ new /obj/item/healthanalyzer/advanced(src)
+ new /obj/item/reagent_containers/syringe/lethal/choral(src) // what the fuck does anyone use this piece of shit for
new /obj/item/clothing/glasses/hud/health/night(src)
+/obj/item/storage/firstaid/tactical/nukeop
+ name = "improved combat medical kit"
+
+/obj/item/storage/firstaid/tactical/nukeop/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/stack/medical/gauze(src)
+ new /obj/item/defibrillator/compact/combat/loaded(src)
+ new /obj/item/reagent_containers/hypospray/combat(src)
+ new /obj/item/reagent_containers/medspray/styptic(src)
+ new /obj/item/reagent_containers/medspray/silver_sulf(src)
+ new /obj/item/healthanalyzer/advanced(src)
+ new /obj/item/reagent_containers/syringe/lethal/choral(src) // what the fuck does anyone use this piece of shit for
+ new /obj/item/clothing/glasses/hud/health/night(src)
+
/*
* Pill Bottles
*/
@@ -389,3 +411,141 @@
/obj/item/organ_storage
))
+//hijacking the minature first aids for hypospray boxes. <3
+/obj/item/storage/hypospraykit
+ name = "hypospray kit"
+ desc = "It's a kit containing a hypospray and specific treatment chemical-filled vials."
+ icon_state = "firstaid-mini"
+ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
+ throw_speed = 3
+ throw_range = 7
+ var/empty = FALSE
+ item_state = "firstaid"
+
+/obj/item/storage/hypospraykit/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_items = 12
+ STR.can_hold = typecacheof(list(
+ /obj/item/hypospray/mkii,
+ /obj/item/reagent_containers/glass/bottle/vial))
+
+/obj/item/storage/hypospraykit/regular
+ icon_state = "firstaid-mini"
+ desc = "A hypospray kit with general use vials."
+
+/obj/item/storage/hypospraykit/regular/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/hypospray/mkii/tricord(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord(src)
+
+/obj/item/storage/hypospraykit/fire
+ name = "burn treatment hypospray kit"
+ desc = "A specialized hypospray kit for burn treatments. Apply with sass."
+ icon_state = "burn-mini"
+ item_state = "firstaid-ointment"
+
+/obj/item/storage/hypospraykit/fire/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/hypospray/mkii/burn(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane(src)
+
+/obj/item/storage/hypospraykit/toxin
+ name = "toxin treatment hypospray kit"
+ icon_state = "toxin-mini"
+ item_state = "firstaid-toxin"
+
+/obj/item/storage/hypospraykit/toxin/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/hypospray/mkii/toxin(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin(src)
+
+/obj/item/storage/hypospraykit/o2
+ name = "oxygen deprivation hypospray kit"
+ icon_state = "oxy-mini"
+ item_state = "firstaid-o2"
+
+/obj/item/storage/hypospraykit/o2/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/hypospray/mkii/oxygen(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin(src)
+
+/obj/item/storage/hypospraykit/enlarge
+ name = "organomegaly trauma hypospray kit"
+ icon_state = "enlarge-mini"
+ item_state = "firstaid-brute"
+
+/obj/item/storage/hypospraykit/enlarge/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/hypospray/mkii/enlarge(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/breastreduction(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/breastreduction(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/breastreduction(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/penisreduction(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/penisreduction(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/penisreduction(src)
+
+/obj/item/storage/hypospraykit/brute
+ name = "brute trauma hypospray kit"
+ icon_state = "brute-mini"
+ item_state = "firstaid-brute"
+
+/obj/item/storage/hypospraykit/brute/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/hypospray/mkii/brute(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine(src)
+
+/obj/item/storage/hypospraykit/tactical
+ name = "combat hypospray kit"
+ desc = "A hypospray kit best suited for combat situations."
+ icon_state = "tactical-mini"
+
+/obj/item/storage/hypospraykit/tactical/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/defibrillator/compact/combat/loaded(src)
+ new /obj/item/hypospray/mkii/CMO/combat(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat(src)
+
+/obj/item/storage/hypospraykit/cmo
+ name = "deluxe hypospray kit"
+ desc = "A kit containing a Deluxe hypospray and Vials."
+ icon_state = "tactical-mini"
+
+/obj/item/storage/hypospraykit/cmo/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_items = 6
+ STR.can_hold = typecacheof(list(
+ /obj/item/hypospray/mkii,
+ /obj/item/reagent_containers/glass/bottle/vial))
+
+/obj/item/storage/hypospraykit/cmo/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/hypospray/mkii/CMO(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/tricord(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/charcoal(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salglu(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/dexalin(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/synthflesh(src)
+
+/obj/item/storage/box/vials
+ name = "box of hypovials"
+
+/obj/item/storage/box/vials/PopulateContents()
+ for(var/i in 1 to 7)
+ new /obj/item/reagent_containers/glass/bottle/vial/small( src )
diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm
index 1607b19c2f..3d27370334 100644
--- a/code/game/objects/items/storage/lockbox.dm
+++ b/code/game/objects/items/storage/lockbox.dm
@@ -108,17 +108,18 @@
STR.can_hold = typecacheof(list(/obj/item/clothing/accessory/medal))
/obj/item/storage/lockbox/medal/examine(mob/user)
- ..()
+ . = ..()
var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)
if(!locked)
- to_chat(user, "Alt-click to [open ? "close":"open"] it.")
+ . += "Alt-click to [open ? "close":"open"] it."
/obj/item/storage/lockbox/medal/AltClick(mob/user)
+ . = ..()
if(user.canUseTopic(src, BE_CLOSE))
if(!SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED))
open = (open ? FALSE : TRUE)
update_icon()
- ..()
+ return TRUE
/obj/item/storage/lockbox/medal/PopulateContents()
new /obj/item/clothing/accessory/medal/gold/captain(src)
diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm
index 8618e4c3ae..a2bf5773d1 100644
--- a/code/game/objects/items/storage/secure.dm
+++ b/code/game/objects/items/storage/secure.dm
@@ -31,8 +31,8 @@
STR.max_combined_w_class = 14
/obj/item/storage/secure/examine(mob/user)
- ..()
- to_chat(user, text("The service panel is currently [open ? "unscrewed" : "screwed shut"]."))
+ . = ..()
+ . += "The service panel is currently [open ? "unscrewed" : "screwed shut"]."
/obj/item/storage/secure/attackby(obj/item/W, mob/user, params)
if(SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED))
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index 251703f907..1e37de2581 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -239,8 +239,8 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
/obj/item/storage/toolbox/gold_real
name = "golden toolbox"
desc = "A larger then normal toolbox made of gold plated plastitanium."
- item_state = "gold"
icon_state = "gold"
+ item_state = "toolbox_gold"
has_latches = FALSE
force = 16 // Less then a spear
throwforce = 14
@@ -266,7 +266,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
name = "golden toolbox"
desc = "A gold plated toolbox, fancy and harmless due to the gold plating being on cardboard!"
icon_state = "gold"
- item_state = "gold"
+ item_state = "toolbox_gold"
has_latches = FALSE
force = 0
throwforce = 0
@@ -288,7 +288,6 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
generate_rubber_toolbox_icon()
icon = GLOB.rubber_toolbox_icons[icon_state]
AddComponent(/datum/component/bouncy)
- . = ..()
/obj/item/storage/toolbox/proc/generate_rubber_toolbox_icon()
var/icon/new_icon = icon(icon, icon_state)
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index 84ebc28afa..223c8e9cf6 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -381,3 +381,13 @@
new /obj/item/gun/ballistic/automatic/pistol/m1911/kitchengun(src)
new /obj/item/ammo_box/magazine/m45/kitchengun(src)
new /obj/item/ammo_box/magazine/m45/kitchengun(src)
+
+
+/obj/item/storage/box/strange_seeds_10pack
+
+/obj/item/storage/box/strange_seeds_10pack/PopulateContents()
+ for(var/i in 1 to 10)
+ new /obj/item/seeds/random(src)
+
+ if(prob(50))
+ new /obj/item/seeds/random(src) //oops, an additional packet might have slipped its way into the box
\ No newline at end of file
diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm
index 7a6899ad15..2dbe42c159 100644
--- a/code/game/objects/items/storage/wallets.dm
+++ b/code/game/objects/items/storage/wallets.dm
@@ -37,7 +37,15 @@
/obj/item/screwdriver,
/obj/item/valentine,
/obj/item/stamp,
- /obj/item/key))
+ /obj/item/key,
+ /obj/item/cartridge,
+ /obj/item/camera_film,
+ /obj/item/stack/ore/bluespace_crystal,
+ /obj/item/reagent_containers/food/snacks/grown/poppy,
+ /obj/item/instrument/harmonica,
+ /obj/item/mining_voucher,
+ /obj/item/suit_voucher,
+ /obj/item/reagent_containers/pill))
/obj/item/storage/wallet/Exited(atom/movable/AM)
. = ..()
@@ -68,6 +76,21 @@
/obj/item/storage/wallet/GetID()
return front_id
+/obj/item/storage/wallet/RemoveID()
+ if(!front_id)
+ return
+ . = front_id
+ front_id.forceMove(get_turf(src))
+
+/obj/item/storage/wallet/InsertID(obj/item/inserting_item)
+ var/obj/item/card/inserting_id = inserting_item.RemoveID()
+ if(!inserting_id)
+ return FALSE
+ attackby(inserting_id)
+ if(inserting_id in contents)
+ return TRUE
+ return FALSE
+
/obj/item/storage/wallet/GetAccess()
if(LAZYLEN(combined_access))
return combined_access
diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm
index ee126971a7..484b9862ff 100644
--- a/code/game/objects/items/stunbaton.dm
+++ b/code/game/objects/items/stunbaton.dm
@@ -91,9 +91,9 @@
. = ..()
var/obj/item/stock_parts/cell/copper_top = get_cell()
if(copper_top)
- to_chat(user, "\The [src] is [round(copper_top.percent())]% charged.")
+ . += "\The [src] is [round(copper_top.percent())]% charged."
else
- to_chat(user, "\The [src] does not have a power source installed.")
+ . += "\The [src] does not have a power source installed."
/obj/item/melee/baton/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stock_parts/cell))
@@ -191,7 +191,7 @@
L.Knockdown(stunpwr)
- L.adjustStaminaLoss(stunpwr*0.1, affected_zone = (istype(user) ? user.zone_selected : BODY_ZONE_CHEST))//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
+ L.adjustStaminaLoss(stunpwr*0.1)//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
L.apply_effect(EFFECT_STUTTER, stunforce)
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
if(user)
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index d409e40575..f763fe87fc 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -74,15 +74,15 @@
/obj/item/tank/examine(mob/user)
var/obj/icon = src
- ..()
+ . = ..()
if (istype(src.loc, /obj/item/assembly))
icon = src.loc
if(!in_range(src, user))
if (icon == src)
- to_chat(user, "If you want any more information you'll need to get closer.")
+ . += "If you want any more information you'll need to get closer."
return
- to_chat(user, "The pressure gauge reads [round(src.air_contents.return_pressure(),0.01)] kPa.")
+ . += "The pressure gauge reads [round(src.air_contents.return_pressure(),0.01)] kPa."
var/celsius_temperature = src.air_contents.temperature-T0C
var/descriptive
@@ -100,7 +100,7 @@
else
descriptive = "furiously hot"
- to_chat(user, "It feels [descriptive].")
+ . += "It feels [descriptive]."
/obj/item/tank/blob_act(obj/structure/blob/B)
if(B && B.loc == loc)
diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm
index e16b0dd690..92b0036ee0 100644
--- a/code/game/objects/items/teleportation.dm
+++ b/code/game/objects/items/teleportation.dm
@@ -79,7 +79,7 @@
continue
var/mob/living/M = W.imp_in
if (M.stat == DEAD)
- if (M.timeofdeath + 6000 < world.time)
+ if (M.timeofdeath + W.lifespan_postmortem < world.time)
continue
var/turf/tr = get_turf(M)
@@ -201,7 +201,7 @@
if(!current_location || current_area.noteleport || is_away_level(current_location.z) || !isturf(user.loc))//If turf was not found or they're on z level 2 or >7 which does not currently exist. or if user is not located on a turf
to_chat(user, "\The [src] is malfunctioning.")
return
- user.show_message("Locked In.", 2)
+ user.show_message("Locked In.", MSG_AUDIBLE)
var/list/obj/effect/portal/created = create_portal_pair(current_location, get_teleport_turf(get_turf(T)), src, 300, 1, null, atmos_link_override)
if(!(LAZYLEN(created) == 2))
return
diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm
index b99be7e988..d52c280f1b 100644
--- a/code/game/objects/items/theft_tools.dm
+++ b/code/game/objects/items/theft_tools.dm
@@ -49,6 +49,10 @@
lefthand_file = 'icons/mob/inhands/misc/sheets_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/sheets_righthand.dmi'
var/obj/item/nuke_core/core
+ var/nt =FALSE //For the lid
+
+/obj/item/nuke_core_container/nt
+ nt = TRUE
/obj/item/nuke_core_container/Destroy()
QDEL_NULL(core)
@@ -67,10 +71,13 @@
/obj/item/nuke_core_container/proc/seal()
if(istype(core))
STOP_PROCESSING(SSobj, core)
- icon_state = "core_container_sealed"
playsound(src, 'sound/items/deconstruct.ogg', 60, 1)
if(ismob(loc))
to_chat(loc, "[src] is permanently sealed, [core]'s radiation is contained.")
+ if(nt != TRUE)
+ icon_state = "core_container_sealed"
+ else
+ icon_state = "core_container_sealed_nt"
/obj/item/nuke_core_container/attackby(obj/item/nuke_core/core, mob/user)
if(istype(core))
@@ -92,6 +99,11 @@
toolspeed = 0.5
random_color = FALSE
+/obj/item/screwdriver/nuke/nt
+ desc = "A screwdriver with an ultra thin diamon tip."
+ toolspeed = 0.25
+ icon_state = "screwdriver_nt"
+
/obj/item/paper/guides/antag/nuke_instructions
info = "How to break into a Nanotrasen self-destruct terminal and remove its plutonium core:
\
\
@@ -103,6 +115,18 @@
- ???
\
"
+/obj/item/paper/guides/nt/nuke_instructions
+ info = "How to remove its plutonium core:
\
+ \
+ - Use a screwdriver with a very thin tip (provided) to unscrew the terminal's front panel
\
+ - Dislodge and remove the front panel with a crowbar
\
+ - Cut the inner metal plate with a welding tool
\
+ - Pry off the inner plate with a crowbar to expose the radioactive core
\
+ - Use the core container to remove the plutonium core; the container will take some time to seal
\
+ - Send core back to CC
\
+
"
+
+
// STEALING SUPERMATTER
/obj/item/paper/guides/antag/supermatter_sliver
diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm
index f891a48df6..bc5bc6811e 100644
--- a/code/game/objects/items/tools/crowbar.dm
+++ b/code/game/objects/items/tools/crowbar.dm
@@ -63,6 +63,8 @@
/obj/item/crowbar/cyborg
name = "hydraulic crowbar"
desc = "A hydraulic prying tool, compact but powerful. Designed to replace crowbar in construction cyborgs."
+ icon = 'icons/obj/items_cyborg.dmi'
+ icon_state = "crowbar_cyborg"
usesound = 'sound/items/jaws_pry.ogg'
force = 10
toolspeed = 0.5
diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm
index 6cbede78a8..91a94e05c3 100644
--- a/code/game/objects/items/tools/screwdriver.dm
+++ b/code/game/objects/items/tools/screwdriver.dm
@@ -138,10 +138,14 @@
user.put_in_active_hand(b_drill)
/obj/item/screwdriver/cyborg
- name = "powered screwdriver"
+ name = "automated screwdriver"
desc = "An electrical screwdriver, designed to be both precise and quick."
+ icon = 'icons/obj/items_cyborg.dmi'
+ icon_state = "screwdriver_cyborg"
+ hitsound = 'sound/items/drill_hit.ogg'
usesound = 'sound/items/drill_use.ogg'
toolspeed = 0.5
+ random_color = FALSE
/obj/item/screwdriver/advanced
name = "advanced screwdriver"
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index fb38e4335e..65b240c528 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -220,10 +220,10 @@
/obj/item/weldingtool/examine(mob/user)
- ..()
- to_chat(user, "It contains [get_fuel()] unit\s of fuel out of [max_fuel].")
+ . = ..()
+ . += "It contains [get_fuel()] unit\s of fuel out of [max_fuel]."
-/obj/item/weldingtool/is_hot()
+/obj/item/weldingtool/get_temperature()
return welding * heat
//Returns whether or not the welding tool is currently on.
@@ -302,6 +302,8 @@
/obj/item/weldingtool/largetank/cyborg
name = "integrated welding tool"
desc = "An advanced welder designed to be used in robotic systems."
+ icon = 'icons/obj/items_cyborg.dmi'
+ icon_state = "indwelder_cyborg"
toolspeed = 0.5
/obj/item/weldingtool/largetank/flamethrower_screwdriver()
diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm
index e40ae8bdc1..e4b95a5073 100644
--- a/code/game/objects/items/tools/wirecutters.dm
+++ b/code/game/objects/items/tools/wirecutters.dm
@@ -87,7 +87,10 @@
/obj/item/wirecutters/cyborg
name = "wirecutters"
desc = "This cuts wires."
+ icon = 'icons/obj/items_cyborg.dmi'
+ icon_state = "wirecutters_cyborg"
toolspeed = 0.5
+ random_color = FALSE
/obj/item/wirecutters/power
name = "jaws of life"
@@ -119,12 +122,21 @@
user.put_in_active_hand(pryjaws)
/obj/item/wirecutters/power/attack(mob/living/carbon/C, mob/user)
- if(istype(C) && C.handcuffed)
- user.visible_message("[user] cuts [C]'s restraints with [src]!")
- qdel(C.handcuffed)
- return
- else
- ..()
+ if(istype(C))
+ if(C.handcuffed)
+ user.visible_message("[user] cuts [C]'s restraints with [src]!")
+ qdel(C.handcuffed)
+ return
+ else if(C.has_status_effect(STATUS_EFFECT_CHOKINGSTRAND))
+ var/man = C == user ? "your" : "[C]'\s"
+ user.visible_message("[user] attempts to remove the durathread strand from around [man] neck.", \
+ "You attempt to remove the durathread strand from around [man] neck.")
+ if(do_after(user, 15, null, C))
+ user.visible_message("[user] succesfuly removes the durathread strand.",
+ "You succesfuly remove the durathread strand.")
+ C.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND)
+ return
+ ..()
/obj/item/wirecutters/advanced
name = "advanced wirecutters"
diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm
index 462eb22aaa..89f135ed67 100644
--- a/code/game/objects/items/tools/wrench.dm
+++ b/code/game/objects/items/tools/wrench.dm
@@ -26,6 +26,8 @@
/obj/item/wrench/cyborg
name = "automatic wrench"
desc = "An advanced robotic wrench. Can be found in construction cyborgs."
+ icon = 'icons/obj/items_cyborg.dmi'
+ icon_state = "wrench_cyborg"
toolspeed = 0.5
/obj/item/wrench/brass
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 638dcd3556..08c43f0437 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -79,7 +79,7 @@
to_chat(user, "You fill the balloon with the contents of [I].")
I.reagents.trans_to(src, 10)
update_icon()
- else if(I.is_sharp())
+ else if(I.get_sharpness())
balloon_burst()
else
return ..()
@@ -148,8 +148,8 @@
var/bullets = 7
/obj/item/toy/gun/examine(mob/user)
- ..()
- to_chat(user, "There [bullets == 1 ? "is" : "are"] [bullets] cap\s left.")
+ . = ..()
+ . += "There [bullets == 1 ? "is" : "are"] [bullets] cap\s left."
/obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A, mob/user, params)
@@ -182,7 +182,7 @@
return
src.add_fingerprint(user)
if (src.bullets < 1)
- user.show_message("*click*", 2)
+ user.show_message("*click*", MSG_AUDIBLE)
playsound(src, "gun_dry_fire", 30, 1)
return
playsound(user, 'sound/weapons/gunshot.ogg', 100, 1)
@@ -204,8 +204,8 @@
src.icon_state = text("357OLD-[]", src.amount_left)
/obj/item/toy/ammo/gun/examine(mob/user)
- ..()
- to_chat(user, "There [amount_left == 1 ? "is" : "are"] [amount_left] cap\s left.")
+ . = ..()
+ . += "There [amount_left == 1 ? "is" : "are"] [amount_left] cap\s left."
/*
* Toy swords
@@ -338,11 +338,12 @@
M.update_inv_hands()
/obj/item/toy/sword/cx/AltClick(mob/living/user)
+ . = ..()
if(!in_range(src, user)) //Basic checks to prevent abuse
return
if(user.incapacitated() || !istype(user))
to_chat(user, "You can't do that right now!")
- return
+ return TRUE
if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null
@@ -350,6 +351,7 @@
light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
update_icon()
update_light()
+ return TRUE
/obj/item/toy/sword/cx/worn_overlays(isinhands, icon_file)
. = ..()
@@ -373,8 +375,8 @@
return ..()
/obj/item/toy/sword/cx/examine(mob/user)
- ..()
- to_chat(user, "Alt-click to recolor it.")
+ . = ..()
+ . += "Alt-click to recolor it."
/*
* Foam armblade
@@ -401,6 +403,7 @@
righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi'
var/active = FALSE
icon = 'icons/obj/items_and_weapons.dmi'
+ hitsound = 'sound/weapons/smash.ogg'
attack_verb = list("robusted")
/obj/item/toy/windupToolbox/attack_self(mob/user)
@@ -408,13 +411,33 @@
icon_state = "his_grace_awakened"
to_chat(user, "You wind up [src], it begins to rumble.")
active = TRUE
+ playsound(src, 'sound/effects/pope_entry.ogg', 100)
+ Rumble()
addtimer(CALLBACK(src, .proc/stopRumble), 600)
else
to_chat(user, "[src] is already active.")
+/obj/item/toy/windupToolbox/proc/Rumble()
+ var/static/list/transforms
+ if(!transforms)
+ var/matrix/M1 = matrix()
+ var/matrix/M2 = matrix()
+ var/matrix/M3 = matrix()
+ var/matrix/M4 = matrix()
+ M1.Translate(-1, 0)
+ M2.Translate(0, 1)
+ M3.Translate(1, 0)
+ M4.Translate(0, -1)
+ transforms = list(M1, M2, M3, M4)
+ animate(src, transform=transforms[1], time=0.2, loop=-1)
+ animate(transform=transforms[2], time=0.1)
+ animate(transform=transforms[3], time=0.2)
+ animate(transform=transforms[4], time=0.3)
+
/obj/item/toy/windupToolbox/proc/stopRumble()
icon_state = initial(icon_state)
active = FALSE
+ animate(src, transform=matrix())
/*
* Subtype of Double-Bladed Energy Swords
@@ -994,8 +1017,7 @@
if(cardUser.is_holding(src))
cardUser.visible_message("[cardUser] checks [cardUser.p_their()] card.", "The card reads: [cardname].")
else
- to_chat(cardUser, "You need to have the card in your hand to check it!")
-
+ . += "You need to have the card in your hand to check it!"
/obj/item/toy/cards/singlecard/verb/Flip()
set name = "Flip Card"
@@ -1221,8 +1243,8 @@
to_chat(user, "The cogwheels are already turning!")
/obj/item/toy/clockwork_watch/examine(mob/user)
- ..()
- to_chat(user, "Station Time: [STATION_TIME_TIMESTAMP("hh:mm:ss")]")
+ . = ..()
+ . += "Station Time: [STATION_TIME_TIMESTAMP("hh:mm:ss")]"
/*
* Toy Dagger
@@ -1293,8 +1315,8 @@
var/toysound = 'sound/machines/click.ogg'
/obj/item/toy/figure/New()
- desc = "A \"Space Life\" brand [src]."
- ..()
+ desc = "A \"Space Life\" brand [src]."
+ ..()
/obj/item/toy/figure/attack_self(mob/user as mob)
if(cooldown <= world.time)
@@ -1517,3 +1539,18 @@
/obj/item/toy/dummy/GetVoice()
return doll_name
+
+/obj/item/toy/seashell
+ name = "seashell"
+ desc = "May you always have a shell in your pocket and sand in your shoes. Whatever that's supposed to mean."
+ icon = 'icons/misc/beach.dmi'
+ icon_state = "shell1"
+ var/static/list/possible_colors = list("" = 2, COLOR_PURPLE_GRAY = 1, COLOR_OLIVE = 1, COLOR_PALE_BLUE_GRAY = 1, COLOR_RED_GRAY = 1)
+
+/obj/item/toy/seashell/Initialize()
+ . = ..()
+ pixel_x = rand(-5, 5)
+ pixel_y = rand(-5, 5)
+ icon_state = "shell[rand(1,3)]"
+ color = pickweight(possible_colors)
+ setDir(pick(GLOB.cardinals))
diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm
index 37ab948332..b2158eb1c8 100644
--- a/code/game/objects/items/trash.dm
+++ b/code/game/objects/items/trash.dm
@@ -72,17 +72,10 @@
resistance_flags = NONE
grind_results = list("aluminium" = 10)
+/obj/item/trash/boritos
+ name = "boritos bag"
+ icon_state = "boritos"
+ grind_results = list("aluminium" = 1) //from the mylar bag
+
/obj/item/trash/attack(mob/M, mob/living/user)
return
-
-/obj/item/trash/coal
- name = "lump of coal"
- icon = 'icons/obj/mining.dmi'
- icon_state = "slag"
- desc = "Someone's gotten on the naughty list."
- grind_results = list("carbon" = 20)
-
-/obj/item/trash/coal/burn()
- visible_message("[src] fuses into a diamond! Someone wasn't so naughty after all...")
- new /obj/item/stack/ore/diamond(loc)
- qdel(src)
diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm
index 14f924a27e..dd7d46d0d7 100644
--- a/code/game/objects/items/twohanded.dm
+++ b/code/game/objects/items/twohanded.dm
@@ -541,6 +541,7 @@
clean_blood()
/obj/item/twohanded/dualsaber/hypereutactic/AltClick(mob/living/user)
+ . = ..()
if(!user.canUseTopic(src, BE_CLOSE, FALSE) || hacked)
return
if(user.incapacitated() || !istype(user))
@@ -553,6 +554,7 @@
light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
update_icon()
update_light()
+ return TRUE
/obj/item/twohanded/dualsaber/hypereutactic/worn_overlays(isinhands, icon_file)
. = ..()
@@ -566,9 +568,9 @@
. += blade_inhand
/obj/item/twohanded/dualsaber/hypereutactic/examine(mob/user)
- ..()
+ . = ..()
if(!hacked)
- to_chat(user, "Alt-click to recolor it.")
+ . += "Alt-click to recolor it."
/obj/item/twohanded/dualsaber/hypereutactic/rainbow_process()
. = ..()
@@ -634,9 +636,9 @@
AddComponent(/datum/component/jousting)
/obj/item/twohanded/spear/examine(mob/user)
- ..()
+ . = ..()
if(explosive)
- to_chat(user, "Use in your hands to activate the attached explosive.
Alt-click to set your war cry.
Right-click in combat mode to wield")
+ . += "Use in your hands to activate the attached explosive.
Alt-click to set your war cry.
Right-click in combat mode to wield"
/obj/item/twohanded/spear/update_icon()
if(explosive)
@@ -659,6 +661,7 @@
qdel(src)
/obj/item/twohanded/spear/AltClick(mob/user)
+ . = ..()
if(user.canUseTopic(src, BE_CLOSE))
..()
if(!explosive)
@@ -667,6 +670,7 @@
var/input = stripped_input(user,"What do you want your war cry to be? You will shout it when you hit someone in melee.", ,"", 50)
if(input)
src.war_cry = input
+ return TRUE
/obj/item/twohanded/spear/CheckParts(list/parts_list)
var/obj/item/shard/tip = locate() in parts_list
diff --git a/code/game/objects/items/vending_items.dm b/code/game/objects/items/vending_items.dm
index 3be12abf4f..af647550ea 100755
--- a/code/game/objects/items/vending_items.dm
+++ b/code/game/objects/items/vending_items.dm
@@ -30,14 +30,14 @@
name = "\improper [machine_name] restocking unit"
/obj/item/vending_refill/examine(mob/user)
- ..()
+ . = ..()
var/num = get_part_rating()
if (num == INFINITY)
- to_chat(user, "It's sealed tight, completely full of supplies.")
+ . += "It's sealed tight, completely full of supplies."
else if (num == 0)
- to_chat(user, "It's empty!")
+ . += "It's empty!"
else
- to_chat(user, "It can restock [num] item\s.")
+ . += "It can restock [num] item\s."
/obj/item/vending_refill/get_part_rating()
if (!products || !contraband || !premium)
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index fec17cfa69..fe1086eb6e 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -125,10 +125,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
qdel(src) //If this ever happens, it's because you lost an arm
/obj/item/claymore/highlander/examine(mob/user)
- ..()
- to_chat(user, "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade.")
+ . = ..()
+ . += "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade."
if(nuke_disk)
- to_chat(user, "It's holding the nuke disk!")
+ . += "It's holding the nuke disk!"
/obj/item/claymore/highlander/attack(mob/living/target, mob/living/user)
. = ..()
@@ -216,7 +216,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
force = 40
throwforce = 10
- w_class = WEIGHT_CLASS_HUGE
+ w_class = WEIGHT_CLASS_BULKY
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
block_chance = 50
@@ -427,7 +427,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
item_flags = ABSTRACT | DROPDEL
- w_class = WEIGHT_CLASS_HUGE
+ w_class = WEIGHT_CLASS_BULKY
force = 24
throwforce = 0
throw_range = 0
@@ -512,7 +512,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
force = 10
throwforce = 12
attack_verb = list("beat", "smacked")
- w_class = WEIGHT_CLASS_HUGE
+ w_class = WEIGHT_CLASS_BULKY
var/homerun_ready = 0
var/homerun_able = 0
total_mass = 2.7 //a regular wooden major league baseball bat weighs somewhere between 2 to 3.4 pounds, according to google
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 6dd8a43130..51386c791c 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -224,16 +224,17 @@
.["Modify armor values"] = "?_src_=vars;[HrefToken()];modarmor=[REF(src)]"
/obj/examine(mob/user)
- ..()
+ . = ..()
if(obj_flags & UNIQUE_RENAME)
- to_chat(user, "Use a pen on it to rename it or change its description.")
+ . += "Use a pen on it to rename it or change its description."
if(unique_reskin && (!current_skin || always_reskinnable))
- to_chat(user, "Alt-click it to reskin it.")
+ . += "Alt-click it to reskin it."
/obj/AltClick(mob/user)
. = ..()
if(unique_reskin && (!current_skin || always_reskinnable) && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
reskin_obj(user)
+ return TRUE
/obj/proc/reskin_obj(mob/M)
if(!LAZYLEN(unique_reskin))
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 7526807eeb..cf050f62d1 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -89,15 +89,15 @@
structureclimber = null
/obj/structure/examine(mob/user)
- ..()
+ . = ..()
if(!(resistance_flags & INDESTRUCTIBLE))
if(resistance_flags & ON_FIRE)
- to_chat(user, "It's on fire!")
+ . += "It's on fire!"
if(broken)
- to_chat(user, "It appears to be broken.")
+ . += "It appears to be broken."
var/examine_status = examine_status(user)
if(examine_status)
- to_chat(user, examine_status)
+ . += examine_status
/obj/structure/proc/examine_status(mob/user) //An overridable proc, mostly for falsewalls.
var/healthpercent = (obj_integrity/max_integrity) * 100
diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm
index be26567c7e..8964d1ca41 100644
--- a/code/game/objects/structures/ai_core.dm
+++ b/code/game/objects/structures/ai_core.dm
@@ -39,7 +39,7 @@
/obj/structure/AIcore/latejoin_inactive/examine(mob/user)
. = ..()
- to_chat(user, "Its transmitter seems to be [active? "on" : "off"].")
+ . += "Its transmitter seems to be [active? "on" : "off"]."
/obj/structure/AIcore/latejoin_inactive/proc/is_available() //If people still manage to use this feature to spawn-kill AI latejoins ahelp them.
if(!available)
diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm
index 12dcb97903..e9e09ddc91 100644
--- a/code/game/objects/structures/beds_chairs/bed.dm
+++ b/code/game/objects/structures/beds_chairs/bed.dm
@@ -23,9 +23,9 @@
var/bolts = TRUE
/obj/structure/bed/examine(mob/user)
- ..()
+ . = ..()
if(bolts)
- to_chat(user, "It's held together by a couple of bolts.")
+ . += "It's held together by a couple of bolts."
/obj/structure/bed/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
@@ -148,8 +148,8 @@
..()
/obj/item/roller/robo/examine(mob/user)
- ..()
- to_chat(user, "The dock is [loaded ? "loaded" : "empty"].")
+ . = ..()
+ . += "The dock is [loaded ? "loaded" : "empty"]."
/obj/item/roller/robo/deploy_roller(mob/user, atom/location)
if(loaded)
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index cec97d5d8b..e61a17b4ec 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -15,10 +15,10 @@
layer = OBJ_LAYER
/obj/structure/chair/examine(mob/user)
- ..()
- to_chat(user, "It's held together by a couple of bolts.")
+ . = ..()
+ . += "It's held together by a couple of bolts."
if(!has_buckled_mobs())
- to_chat(user, "Drag your sprite to sit in it.")
+ . += "Drag your sprite to sit in it."
/obj/structure/chair/Initialize()
. = ..()
@@ -449,6 +449,9 @@
item_chair = null
var/turns = 0
+/obj/structure/chair/brass/ComponentInitialize()
+ return //it spins with the power of ratvar, not components.
+
/obj/structure/chair/brass/Destroy()
STOP_PROCESSING(SSfastprocess, src)
. = ..()
@@ -464,6 +467,7 @@
return
/obj/structure/chair/brass/AltClick(mob/living/user)
+ . = ..()
turns = 0
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return
@@ -475,6 +479,7 @@
user.visible_message("[user] stops [src]'s uncontrollable spinning.", \
"You grab [src] and stop its wild spinning.")
STOP_PROCESSING(SSfastprocess, src)
+ return TRUE
/obj/structure/chair/bronze
name = "brass chair"
@@ -498,7 +503,7 @@
var/mutable_appearance/armrest
/obj/structure/chair/sofa/Initialize()
- armrest = mutable_appearance(icon, "[icon_state]_armrest")
+ armrest = mutable_appearance(icon, "[icon_state]_armrest", ABOVE_MOB_LAYER)
return ..()
/obj/structure/chair/sofa/post_buckle_mob(mob/living/M)
diff --git a/code/game/objects/structures/beds_chairs/pew.dm b/code/game/objects/structures/beds_chairs/pew.dm
new file mode 100644
index 0000000000..65440fb5d8
--- /dev/null
+++ b/code/game/objects/structures/beds_chairs/pew.dm
@@ -0,0 +1,72 @@
+/obj/structure/chair/pew
+ name = "wooden pew"
+ desc = "Kneel here and pray."
+ icon = 'icons/obj/sofa.dmi'
+ icon_state = "pewmiddle"
+ resistance_flags = FLAMMABLE
+ max_integrity = 70
+ buildstacktype = /obj/item/stack/sheet/mineral/wood
+ buildstackamount = 3
+ item_chair = null
+
+/obj/structure/chair/pew/left
+ name = "left wooden pew end"
+ icon_state = "pewend_left"
+ var/mutable_appearance/leftpewarmrest
+
+/obj/structure/chair/pew/left/Initialize()
+ leftpewarmrest = GetLeftPewArmrest()
+ leftpewarmrest.layer = ABOVE_MOB_LAYER
+ return ..()
+
+/obj/structure/chair/pew/left/proc/GetLeftPewArmrest()
+ return mutable_appearance('icons/obj/sofa.dmi', "pewend_left_armrest")
+
+/obj/structure/chair/pew/left/Destroy()
+ QDEL_NULL(leftpewarmrest)
+ return ..()
+
+/obj/structure/chair/pew/left/post_buckle_mob(mob/living/M)
+ . = ..()
+ update_leftpewarmrest()
+
+/obj/structure/chair/pew/left/proc/update_leftpewarmrest()
+ if(has_buckled_mobs())
+ add_overlay(leftpewarmrest)
+ else
+ cut_overlay(leftpewarmrest)
+
+/obj/structure/chair/pew/left/post_unbuckle_mob()
+ . = ..()
+ update_leftpewarmrest()
+
+/obj/structure/chair/pew/right
+ name = "left wooden pew end"
+ icon_state = "pewend_right"
+ var/mutable_appearance/rightpewarmrest
+
+/obj/structure/chair/pew/right/Initialize()
+ rightpewarmrest = GetRightPewArmrest()
+ rightpewarmrest.layer = ABOVE_MOB_LAYER
+ return ..()
+
+/obj/structure/chair/pew/right/proc/GetRightPewArmrest()
+ return mutable_appearance('icons/obj/sofa.dmi', "pewend_right_armrest")
+
+/obj/structure/chair/pew/right/Destroy()
+ QDEL_NULL(rightpewarmrest)
+ return ..()
+
+/obj/structure/chair/pew/right/post_buckle_mob(mob/living/M)
+ . = ..()
+ update_rightpewarmrest()
+
+/obj/structure/chair/pew/right/proc/update_rightpewarmrest()
+ if(has_buckled_mobs())
+ add_overlay(rightpewarmrest)
+ else
+ cut_overlay(rightpewarmrest)
+
+/obj/structure/chair/pew/right/post_unbuckle_mob()
+ . = ..()
+ update_rightpewarmrest()
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 1f7f0ab391..82a0c4d32f 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -41,7 +41,7 @@ LINEN BINS
return
/obj/item/bedsheet/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/wirecutters) || I.is_sharp())
+ if(istype(I, /obj/item/wirecutters) || I.get_sharpness())
var/obj/item/stack/sheet/cloth/C = new (get_turf(src), 3)
transfer_fingerprints_to(C)
C.add_fingerprint(user)
@@ -294,13 +294,13 @@ LINEN BINS
var/obj/item/hidden = null
/obj/structure/bedsheetbin/examine(mob/user)
- ..()
+ . = ..()
if(amount < 1)
- to_chat(user, "There are no sheets in the bin.")
+ . += "There are no sheets in the bin."
else if(amount == 1)
- to_chat(user, "There is one sheet in the bin.")
+ . += "There is one sheet in the bin."
else
- to_chat(user, "There are [amount] sheets in the bin.")
+ . += "There are [amount] sheets in the bin."
/obj/structure/bedsheetbin/update_icon()
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 172120861b..38944c0384 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -44,7 +44,7 @@
update_icon()
PopulateContents()
if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents
- take_contents()
+ addtimer(CALLBACK(src, .proc/take_contents), 0)
if(secure)
lockerelectronics = new(src)
lockerelectronics.accesses = req_access
@@ -84,22 +84,22 @@
add_overlay("unlocked")
/obj/structure/closet/examine(mob/user)
- ..()
+ . = ..()
if(welded)
- to_chat(user, "It's welded shut.")
+ . += "It's welded shut."
if(anchored)
- to_chat(user, "It is bolted to the ground.")
+ . += "It is bolted to the ground."
if(opened)
- to_chat(user, "The parts are welded together.")
+ . += "The parts are welded together."
else if(secure && !opened)
else if(broken)
- to_chat(user, "The lock is screwed in.")
+ . += "The lock is screwed in."
else if(secure)
- to_chat(user, "Alt-click to [locked ? "unlock" : "lock"].")
+ . += "Alt-click to [locked ? "unlock" : "lock"]."
if(isliving(user))
var/mob/living/L = user
if(HAS_TRAIT(L, TRAIT_SKITTISH))
- to_chat(user, "Ctrl-Shift-click [src] to jump inside.")
+ . += "Ctrl-Shift-click [src] to jump inside."
/obj/structure/closet/CanPass(atom/movable/mover, turf/target)
if(wall_mounted)
@@ -342,25 +342,21 @@
. = TRUE
if(opened)
if(istype(W, cutting_tool))
+ var/welder = FALSE
if(istype(W, /obj/item/weldingtool))
if(!W.tool_start_check(user, amount=0))
return
-
- to_chat(user, "You begin cutting \the [src] apart...")
- if(W.use_tool(src, user, 40, volume=50))
- if(eigen_teleport)
- to_chat(user, "The unstable nature of \the [src] makes it impossible to cut!")
- return
- if(!opened)
- return
- user.visible_message("[user] slices apart \the [src].",
- "You cut \the [src] apart with \the [W].",
- "You hear welding.")
- deconstruct(TRUE)
- return
- else // for example cardboard box is cut with wirecutters
- user.visible_message("[user] cut apart \the [src].", \
- "You cut \the [src] apart with \the [W].")
+ to_chat(user, "You begin [welder ? "slicing" : "deconstructing"] \the [src] apart...")
+ welder = TRUE
+ if(W.use_tool(src, user, 40, volume=50))
+ if(eigen_teleport)
+ to_chat(user, "The unstable nature of \the [src] makes it impossible to [welder ? "slice" : "deconstruct"]!")
+ return
+ if(!opened)
+ return
+ user.visible_message("[user] [welder ? "slice" : "deconstruct"]s apart \the [src].",
+ "You [welder ? "slice" : "deconstruct"] \the [src] apart with \the [W].",
+ "You hear [welder ? "welding" : "rustling of screws and metal"].")
deconstruct(TRUE)
return
if(user.transferItemToLoc(W, drop_location())) // so we put in unlit welder too
@@ -526,11 +522,12 @@
to_chat(user, "You fail to break out of [src]!")
/obj/structure/closet/AltClick(mob/user)
- ..()
+ . = ..()
if(!user.canUseTopic(src, be_close=TRUE) || !isturf(loc))
to_chat(user, "You can't do that right now!")
- return
+ return TRUE
togglelock(user)
+ return TRUE
/obj/structure/closet/CtrlShiftClick(mob/living/user)
if(!HAS_TRAIT(user, TRAIT_SKITTISH))
diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm
index ad493dd6f5..0adfe77853 100644
--- a/code/game/objects/structures/crates_lockers/closets/fitness.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm
@@ -12,6 +12,9 @@
new /obj/item/clothing/under/shorts/blue(src)
new /obj/item/clothing/under/shorts/green(src)
new /obj/item/clothing/under/jabroni(src)
+ new /obj/item/clothing/under/polychromic/shortpants(src)
+ new /obj/item/clothing/under/polychromic/shortpants(src)
+ new /obj/item/clothing/under/polychromic/shortpants(src)
/obj/structure/closet/boxinggloves
diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
index c9a2ad54ff..6548ec737c 100644
--- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm
+++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
@@ -4,6 +4,8 @@
icon_state = "cabinet"
resistance_flags = FLAMMABLE
max_integrity = 70
+ material_drop = /obj/item/stack/sheet/mineral/wood
+ cutting_tool = /obj/item/screwdriver
/obj/structure/closet/acloset
name = "strange closet"
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index b49d0a77d5..9deca71269 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -352,6 +352,7 @@
icon_door = "black"
/obj/structure/closet/wardrobe/curator/PopulateContents()
+ new /obj/item/clothing/accessory/pocketprotector/full(src)
new /obj/item/clothing/head/fedora/curator(src)
new /obj/item/clothing/suit/curator(src)
new /obj/item/clothing/under/rank/curator/treasure_hunter(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
index f0c1495281..bfcb00f285 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
@@ -4,6 +4,8 @@
icon_state = "cabinet"
resistance_flags = FLAMMABLE
max_integrity = 70
+ material_drop = /obj/item/stack/sheet/mineral/wood
+ cutting_tool = /obj/item/screwdriver
/obj/structure/closet/secure_closet/bar/PopulateContents()
..()
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index 18928424c0..b06073812a 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -11,7 +11,7 @@
new /obj/item/clothing/under/rank/cargo(src)
new /obj/item/clothing/under/rank/cargo/skirt(src)
new /obj/item/clothing/shoes/sneakers/brown(src)
- new /obj/item/radio/headset/headset_cargo(src)
+ new /obj/item/radio/headset/heads/qm(src)
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/gloves/fingerless(src)
new /obj/item/megaphone/cargo(src)
@@ -23,3 +23,4 @@
new /obj/item/circuitboard/machine/techfab/department/cargo(src)
new /obj/item/storage/photo_album/QM(src)
new /obj/item/circuitboard/machine/ore_silo(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/qm(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index a7adafdad4..8da50d488f 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -10,7 +10,7 @@
new /obj/item/clothing/under/rank/chief_engineer(src)
new /obj/item/clothing/under/rank/chief_engineer/skirt(src)
new /obj/item/clothing/head/hardhat/white(src)
- new /obj/item/clothing/head/welding(src)
+ new /obj/item/clothing/head/hardhat/weldhat/white(src)
new /obj/item/clothing/gloves/color/yellow(src)
new /obj/item/clothing/shoes/sneakers/brown(src)
new /obj/item/tank/jetpack/suit(src)
@@ -34,6 +34,8 @@
new /obj/item/storage/photo_album/CE(src)
new /obj/item/storage/lockbox/medal/engineering(src)
new /obj/item/construction/rcd/loaded/upgraded(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/ce(src)
+ new /obj/item/clothing/head/beret/ce/white(src)
/obj/structure/closet/secure_closet/engineering_electrical
name = "electrical supplies locker"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
index 9dab3679fa..dd72eb6b5d 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
@@ -61,6 +61,11 @@
..()
for(var/i = 0, i < 4, i++)
new /obj/item/reagent_containers/food/snacks/meat/slab/monkey(src)
+
+/obj/structure/closet/secure_closet/freezer/meat/open
+ req_access = null
+ locked = FALSE
+
/obj/structure/closet/secure_closet/freezer/fridge
name = "refrigerator"
@@ -73,6 +78,10 @@
for(var/i = 0, i < 2, i++)
new /obj/item/storage/fancy/egg_box(src)
+/obj/structure/closet/secure_closet/freezer/fridge/open
+ req_access = null
+ locked = FALSE
+
/obj/structure/closet/secure_closet/freezer/money
name = "freezer"
desc = "This contains cold hard cash."
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index 0f810225b3..ead133e22b 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -71,7 +71,7 @@
new /obj/item/storage/belt/medical(src)
new /obj/item/healthanalyzer/advanced(src)
new /obj/item/assembly/flash/handheld(src)
-// new /obj/item/reagent_containers/hypospray/CMO(src) // CITADEL EDIT comments out the hypospray mk I. the MK II kit is modularized
+ new /obj/item/storage/hypospraykit/cmo(src)
new /obj/item/autosurgeon/cmo(src)
new /obj/item/door_remote/chief_medical_officer(src)
new /obj/item/clothing/neck/petcollar(src)
@@ -81,6 +81,8 @@
new /obj/item/circuitboard/machine/techfab/department/medical(src)
new /obj/item/storage/photo_album/CMO(src)
new /obj/item/storage/lockbox/medal/medical(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/cmo(src)
+ new /obj/item/clothing/head/beret/cmo/blue(src)
/obj/structure/closet/secure_closet/animal
name = "animal control"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
index e44d3c9079..8cf0852aaa 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
@@ -5,16 +5,23 @@
var/registered_name = null
/obj/structure/closet/secure_closet/personal/examine(mob/user)
- ..()
+ . = ..()
if(registered_name)
- to_chat(user, "The display reads, \"Owned by [registered_name]\".")
+ . += "The display reads, \"Owned by [registered_name]\"."
-/obj/structure/closet/secure_closet/personal/check_access(obj/item/card/id/I)
+/obj/structure/closet/secure_closet/personal/check_access(obj/item/I)
. = ..()
if(!I || !istype(I))
return
- if(registered_name == I.registered_name)
+ if(istype(I,/obj/item/modular_computer/tablet))
+ var/obj/item/modular_computer/tablet/ourTablet = I
+ var/obj/item/computer_hardware/card_slot/card_slot = ourTablet.all_components[MC_CARD]
+ if(card_slot)
+ return registered_name == card_slot.stored_card.registered_name || registered_name == card_slot.stored_card2.registered_name
+ var/obj/item/card/id/ID = I.GetID()
+ if(ID && registered_name == ID.registered_name)
return TRUE
+ return FALSE
/obj/structure/closet/secure_closet/personal/PopulateContents()
..()
@@ -37,11 +44,14 @@
icon_state = "cabinet"
resistance_flags = FLAMMABLE
max_integrity = 70
+ material_drop = /obj/item/stack/sheet/mineral/wood
+ cutting_tool = /obj/item/screwdriver
/obj/structure/closet/secure_closet/personal/cabinet/PopulateContents()
new /obj/item/storage/backpack/satchel/leather/withwallet( src )
new /obj/item/instrument/piano_synth(src)
new /obj/item/radio/headset( src )
+ new /obj/item/clothing/head/colour(src)
/obj/structure/closet/secure_closet/personal/attackby(obj/item/W, mob/user, params)
var/obj/item/card/id/I = W.GetID()
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
index efcc2aa7ca..4e1ca9a77d 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -30,3 +30,5 @@
new /obj/item/door_remote/research_director(src)
new /obj/item/circuitboard/machine/techfab/department/science(src)
new /obj/item/storage/photo_album/RD(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/rd(src)
+
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 3cb8ceb22b..835be8d2fc 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -34,6 +34,8 @@
new /obj/item/gun/energy/e_gun(src)
new /obj/item/door_remote/captain(src)
new /obj/item/storage/photo_album/Captain(src)
+ new /obj/item/clothing/head/caphat/beret/white(src)
+
/obj/structure/closet/secure_closet/hop
name = "\proper head of personnel's locker"
req_access = list(ACCESS_HOP)
@@ -61,6 +63,9 @@
new /obj/item/door_remote/civillian(src)
new /obj/item/circuitboard/machine/techfab/department/service(src)
new /obj/item/storage/photo_album/HoP(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/hop(src)
+ new /obj/item/clothing/head/hopcap/beret/white(src)
+
/obj/structure/closet/secure_closet/hos
name = "\proper head of security's locker"
req_access = list(ACCESS_HOS)
@@ -94,6 +99,7 @@
new /obj/item/pinpointer/nuke(src)
new /obj/item/circuitboard/machine/techfab/department/security(src)
new /obj/item/storage/photo_album/HoS(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/hos(src)
/obj/structure/closet/secure_closet/warden
name = "\proper warden's locker"
req_access = list(ACCESS_ARMORY)
@@ -118,6 +124,7 @@
new /obj/item/clothing/gloves/krav_maga/sec(src)
new /obj/item/door_remote/head_of_security(src)
new /obj/item/gun/ballistic/shotgun/automatic/combat/compact(src)
+ new /obj/item/clothing/head/beret/sec/corporatewarden(src)
/obj/structure/closet/secure_closet/security
name = "security officer's locker"
req_access = list(ACCESS_SECURITY)
@@ -154,12 +161,16 @@
..()
new /obj/item/clothing/accessory/armband/medblue(src)
new /obj/item/encryptionkey/headset_med(src)
+
/obj/structure/closet/secure_closet/detective
name = "\improper detective's cabinet"
req_access = list(ACCESS_FORENSICS_LOCKERS)
icon_state = "cabinet"
resistance_flags = FLAMMABLE
max_integrity = 70
+ material_drop = /obj/item/stack/sheet/mineral/wood
+ cutting_tool = /obj/item/screwdriver
+
/obj/structure/closet/secure_closet/detective/PopulateContents()
..()
new /obj/item/clothing/under/rank/det(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 585f60a347..6ef6f2d5ce 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -26,7 +26,7 @@
if (prob(40))
new /obj/item/storage/toolbox/emergency(src)
- switch (pickweight(list("small" = 40, "aid" = 25, "tank" = 20, "both" = 10, "nothing" = 4, "delete" = 1)))
+ switch (pickweight(list("small" = 40, "aid" = 25, "tank" = 20, "both" = 10, "nothing" = 5)))
if ("small")
new /obj/item/tank/internals/emergency_oxygen(src)
new /obj/item/tank/internals/emergency_oxygen(src)
@@ -49,9 +49,7 @@
if ("nothing")
// doot
- // teehee
- if ("delete")
- qdel(src)
+ return
/*
* Fire Closet
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index d83922d708..9d554181eb 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -142,28 +142,21 @@
new /obj/item/clothing/suit/jacket(src)
if(prob(40))
new /obj/item/clothing/suit/jacket(src)
- new /obj/item/clothing/under/color/white(src)
- new /obj/item/clothing/under/skirt/color/white(src)
- new /obj/item/clothing/under/color/blue(src)
- new /obj/item/clothing/under/skirt/color/blue(src)
- new /obj/item/clothing/under/color/yellow(src)
- new /obj/item/clothing/under/skirt/color/yellow(src)
- new /obj/item/clothing/under/color/green(src)
- new /obj/item/clothing/under/skirt/color/green(src)
- new /obj/item/clothing/under/color/orange(src)
- new /obj/item/clothing/under/skirt/color/orange(src)
- new /obj/item/clothing/under/color/pink(src)
- new /obj/item/clothing/under/skirt/color/pink(src)
- new /obj/item/clothing/under/color/red(src)
- new /obj/item/clothing/under/skirt/color/red(src)
- new /obj/item/clothing/under/color/darkblue(src)
- new /obj/item/clothing/under/skirt/color/darkblue(src)
- new /obj/item/clothing/under/color/teal(src)
- new /obj/item/clothing/under/skirt/color/teal(src)
- new /obj/item/clothing/under/color/lightpurple(src)
- new /obj/item/clothing/under/skirt/color/lightpurple(src)
- new /obj/item/clothing/under/color/green(src)
- new /obj/item/clothing/under/skirt/color/green(src)
+ new /obj/item/clothing/under/polychromic/jumpsuit(src)
+ new /obj/item/clothing/under/polychromic/jumpsuit(src)
+ new /obj/item/clothing/under/polychromic/jumpsuit(src)
+ new /obj/item/clothing/under/polychromic/shirt(src)
+ new /obj/item/clothing/under/polychromic/shirt(src)
+ new /obj/item/clothing/under/polychromic/shirt(src)
+ new /obj/item/clothing/under/polychromic/kilt(src)
+ new /obj/item/clothing/under/polychromic/kilt(src)
+ new /obj/item/clothing/under/polychromic/kilt(src)
+ new /obj/item/clothing/under/polychromic/skirt(src)
+ new /obj/item/clothing/under/polychromic/skirt(src)
+ new /obj/item/clothing/under/polychromic/skirt(src)
+ new /obj/item/clothing/under/polychromic/shorts(src)
+ new /obj/item/clothing/under/polychromic/shorts(src)
+ new /obj/item/clothing/under/polychromic/shorts(src)
new /obj/item/clothing/mask/bandana/red(src)
new /obj/item/clothing/mask/bandana/red(src)
new /obj/item/clothing/mask/bandana/blue(src)
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 23703c7891..e416b2b436 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -79,6 +79,15 @@
material_drop = /obj/item/stack/sheet/mineral/wood
material_drop_amount = 5
+/obj/structure/closet/crate/coffin/examine(mob/user)
+ . = ..()
+ if(user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ . += {"This is a coffin which you can use to regenerate your burns and other wounds faster."}
+ . += {"You can also thicken your blood if you survive the day, and hide from the sun safely while inside."}
+ /* if(user.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ . += {"This is a coffin which your master can use to shield himself from the unforgiving sun.\n
+ You yourself are still human and dont need it. Yet."} */
+
/obj/structure/closet/crate/internals
desc = "An internals crate."
name = "internals crate"
diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm
index c0ca1277d3..1580c0104e 100644
--- a/code/game/objects/structures/crates_lockers/crates/bins.dm
+++ b/code/game/objects/structures/crates_lockers/crates/bins.dm
@@ -4,6 +4,8 @@
icon_state = "largebins"
open_sound = 'sound/effects/bin_open.ogg'
close_sound = 'sound/effects/bin_close.ogg'
+ material_drop = /obj/item/stack/sheet/plastic
+ material_drop_amount = 40
anchored = TRUE
horizontal = FALSE
delivery_icon = null
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index bcb025d14b..771b4bc04e 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -38,14 +38,14 @@
return ..()
/obj/structure/displaycase/examine(mob/user)
- ..()
+ . = ..()
if(alert)
- to_chat(user, "Hooked up with an anti-theft system.")
+ . += "Hooked up with an anti-theft system."
if(showpiece)
- to_chat(user, "There's [showpiece] inside.")
+ . += "There's [showpiece] inside."
if(trophy_message)
- to_chat(user, "The plaque reads:")
- to_chat(user, trophy_message)
+ . += "The plaque reads:"
+ . += trophy_message
/obj/structure/displaycase/proc/dump()
diff --git a/code/game/objects/structures/divine.dm b/code/game/objects/structures/divine.dm
index 5fd480f6fd..b8137d831b 100644
--- a/code/game/objects/structures/divine.dm
+++ b/code/game/objects/structures/divine.dm
@@ -40,11 +40,11 @@
last_process = world.time
to_chat(user, "The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards.")
user.reagents.add_reagent("godblood",20)
- update_icons()
- addtimer(CALLBACK(src, .proc/update_icons), time_between_uses)
+ update_icon()
+ addtimer(CALLBACK(src, .proc/update_icon), time_between_uses)
-/obj/structure/healingfountain/proc/update_icons()
+/obj/structure/healingfountain/update_icon()
if(last_process + time_between_uses > world.time)
icon_state = "fountain"
else
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 915d45be78..07a66505e7 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -26,28 +26,28 @@
..()
/obj/structure/door_assembly/examine(mob/user)
- ..()
+ . = ..()
var/doorname = ""
if(created_name)
doorname = ", written on it is '[created_name]'"
switch(state)
if(AIRLOCK_ASSEMBLY_NEEDS_WIRES)
if(anchored)
- to_chat(user, "The anchoring bolts are wrenched in place, but the maintenance panel lacks wiring.")
+ . += "The anchoring bolts are wrenched in place, but the maintenance panel lacks wiring."
else
- to_chat(user, "The assembly is welded together, but the anchoring bolts are unwrenched.")
+ . += "The assembly is welded together, but the anchoring bolts are unwrenched."
if(AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS)
- to_chat(user, "The maintenance panel is wired, but the circuit slot is empty.")
+ . += "The maintenance panel is wired, but the circuit slot is empty."
if(AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER)
- to_chat(user, "The circuit is connected loosely to its slot, but the maintenance panel is unscrewed and open.")
+ . += "The circuit is connected loosely to its slot, but the maintenance panel is unscrewed and open."
if(!mineral && !glass && !noglass)
- to_chat(user, "There is a small paper placard on the assembly[doorname]. There are empty slots for glass windows and mineral covers.")
+ . += "There is a small paper placard on the assembly[doorname]. There are empty slots for glass windows and mineral covers."
else if(!mineral && glass && !noglass)
- to_chat(user, "There is a small paper placard on the assembly[doorname]. There are empty slots for mineral covers.")
+ . += "There is a small paper placard on the assembly[doorname]. There are empty slots for mineral covers."
else if(mineral && !glass && !noglass)
- to_chat(user, "There is a small paper placard on the assembly[doorname]. There are empty slots for glass windows.")
+ . += "There is a small paper placard on the assembly[doorname]. There are empty slots for glass windows."
else
- to_chat(user, "There is a small paper placard on the assembly[doorname].")
+ . += "There is a small paper placard on the assembly[doorname]."
/obj/structure/door_assembly/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/pen))
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index d4e097e450..d6beaa2628 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -22,8 +22,8 @@
stored_extinguisher = new /obj/item/extinguisher(src)
/obj/structure/extinguisher_cabinet/examine(mob/user)
- ..()
- to_chat(user, "Alt-click to [opened ? "close":"open"] it.")
+ . = ..()
+ . += "Alt-click to [opened ? "close":"open"] it."
/obj/structure/extinguisher_cabinet/Destroy()
if(stored_extinguisher)
@@ -102,9 +102,11 @@
return attack_hand(user)
/obj/structure/extinguisher_cabinet/AltClick(mob/living/user)
+ . = ..()
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return
toggle_cabinet(user)
+ return TRUE
/obj/structure/extinguisher_cabinet/proc/toggle_cabinet(mob/user)
if(opened && broken)
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index d52ec81a05..d7e2d5564a 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -236,7 +236,7 @@
canSmoothWith = list(/obj/structure/falsewall/plasma, /turf/closed/wall/mineral/plasma)
/obj/structure/falsewall/plasma/attackby(obj/item/W, mob/user, params)
- if(W.is_hot() > 300)
+ if(W.get_temperature() > 300)
var/turf/T = get_turf(src)
message_admins("Plasma falsewall ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma falsewall ignited by [key_name(user)] in [AREACOORD(T)]")
diff --git a/code/game/objects/structures/femur_breaker.dm b/code/game/objects/structures/femur_breaker.dm
index e3002a8fae..7331285161 100644
--- a/code/game/objects/structures/femur_breaker.dm
+++ b/code/game/objects/structures/femur_breaker.dm
@@ -23,24 +23,14 @@
var/current_action = 0 // What's currently happening to the femur breaker
/obj/structure/femur_breaker/examine(mob/user)
- ..()
-
- var/msg = ""
-
- msg += "It is [anchored ? "secured to the floor." : "unsecured."]
"
-
+ . = ..()
+ . += "It is [anchored ? "secured to the floor." : "unsecured."]"
if (slat_status == BREAKER_SLAT_RAISED)
- msg += "The breaker slat is in a neutral position."
+ . += "The breaker slat is in a neutral position."
else
- msg += "The breaker slat is lowered, and must be raised."
-
+ . += "The breaker slat is lowered, and must be raised."
if (LAZYLEN(buckled_mobs))
- msg += "
"
- msg += "Someone appears to be strapped in. You can help them unbuckle, or activate the femur breaker."
-
- to_chat(user, msg)
-
- return msg
+ . += "Someone appears to be strapped in. You can help them unbuckle, or activate the femur breaker."
/obj/structure/femur_breaker/attack_hand(mob/user)
add_fingerprint(user)
diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm
index 19103c71ec..35891fa607 100644
--- a/code/game/objects/structures/fence.dm
+++ b/code/game/objects/structures/fence.dm
@@ -29,13 +29,12 @@
update_cut_status()
/obj/structure/fence/examine(mob/user)
- .=..()
-
+ . = ..()
switch(hole_size)
if(MEDIUM_HOLE)
- user.show_message("There is a large hole in \the [src].")
+ . += "There is a large hole in \the [src]."
if(LARGE_HOLE)
- user.show_message("\The [src] has been completely cut through.")
+ . += "\The [src] has been completely cut through."
/obj/structure/fence/end
icon_state = "end"
diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm
index baf0cf312f..736e58143e 100644
--- a/code/game/objects/structures/fluff.dm
+++ b/code/game/objects/structures/fluff.dm
@@ -182,3 +182,59 @@
icon_state = "snowlegion"
anchored = TRUE
deconstructible = FALSE
+
+/obj/structure/fluff/big_chain
+ name = "giant chain"
+ desc = "A towering link of chains leading up to the ceiling."
+ icon = 'icons/effects/32x96.dmi'
+ icon_state = "chain"
+ layer = ABOVE_OBJ_LAYER
+ anchored = TRUE
+ density = TRUE
+ deconstructible = FALSE
+
+/obj/structure/fluff/railing
+ name = "railing"
+ desc = "Basic railing meant to protect idiots like you from falling."
+ icon = 'icons/obj/fluff.dmi'
+ icon_state = "railing"
+ density = TRUE
+ anchored = TRUE
+ deconstructible = FALSE
+
+/obj/structure/fluff/railing/corner
+ icon_state = "railing_corner"
+ density = FALSE
+
+/obj/structure/fluff/beach_towel
+ name = "beach towel"
+ desc = "A towel decorated in various beach-themed designs."
+ icon = 'icons/obj/fluff.dmi'
+ icon_state = "railing"
+ density = FALSE
+ anchored = TRUE
+ deconstructible = FALSE
+
+/obj/structure/fluff/beach_umbrella
+ name = "beach umbrella"
+ desc = "A fancy umbrella designed to keep the sun off beach-goers."
+ icon = 'icons/obj/fluff.dmi'
+ icon_state = "brella"
+ density = FALSE
+ anchored = TRUE
+ deconstructible = FALSE
+
+/obj/structure/fluff/beach_umbrella/security
+ icon_state = "hos_brella"
+
+/obj/structure/fluff/beach_umbrella/science
+ icon_state = "rd_brella"
+
+/obj/structure/fluff/beach_umbrella/engine
+ icon_state = "ce_brella"
+
+/obj/structure/fluff/beach_umbrella/cap
+ icon_state = "cap_brella"
+
+/obj/structure/fluff/beach_umbrella/syndi
+ icon_state = "syndi_brella"
diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm
index b820e93c7b..688006a6e3 100644
--- a/code/game/objects/structures/ghost_role_spawners.dm
+++ b/code/game/objects/structures/ghost_role_spawners.dm
@@ -66,7 +66,7 @@
. = ..()
var/area/A = get_area(src)
if(A)
- notify_ghosts("An ash walker egg is ready to hatch in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_ASHWALKER)
+ notify_ghosts("An ash walker egg is ready to hatch in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_ASHWALKER, ignore_dnr_observers = TRUE)
/datum/outfit/ashwalker
name ="Ashwalker"
@@ -133,7 +133,7 @@
. = ..()
var/area/A = get_area(src)
if(!mapload && A)
- notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_GOLEM)
+ notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_GOLEM, ignore_dnr_observers = TRUE)
if(has_owner && creator)
flavour_text = "You are a Golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. \
Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost."
@@ -151,6 +151,9 @@
log_admin("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].")
if(ishuman(new_spawn))
var/mob/living/carbon/human/H = new_spawn
+ if(has_owner)
+ var/datum/species/golem/G = H.dna.species
+ G.owner = owner
H.set_cloned_appearance()
if(!name)
if(has_owner)
@@ -321,8 +324,9 @@
/datum/outfit/hotelstaff
name = "Hotel Staff"
- uniform = /obj/item/clothing/under/assistantformal
+ uniform = /obj/item/clothing/under/telegram
shoes = /obj/item/clothing/shoes/laceup
+ head = /obj/item/clothing/head/hotel
r_pocket = /obj/item/radio/off
back = /obj/item/storage/backpack
implants = list(/obj/item/implant/mindshield)
@@ -372,7 +376,7 @@
flavour_text = "You have been given a reprieve from your eternity of torment, to be [owner.name]'s friend for [owner.p_their()] short mortal coil. Be aware that if you do not live up to [owner.name]'s expectations, they can send you back to hell with a single thought. [owner.name]'s death will also return you to hell."
var/area/A = get_area(src)
if(!mapload && A)
- notify_ghosts("\A friendship shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE)
+ notify_ghosts("\A friendship shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_dnr_observers = TRUE)
objectives = "Be [owner.name]'s friend, and keep [owner.name] alive, so you don't get sent back to hell."
spell = summoning_spell
@@ -422,7 +426,7 @@
implants = list(/obj/item/implant/weapons_auth)
id = /obj/item/card/id/syndicate
-/datum/outfit/syndicate_empty/post_equip(mob/living/carbon/human/H)
+/datum/outfit/syndicate_empty/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
H.faction |= ROLE_SYNDICATE
/obj/effect/mob_spawn/human/syndicate/battlecruiser
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 31bf9318ce..94619e1858 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -15,16 +15,16 @@
. = ..()
switch(state)
if(GIRDER_REINF)
- to_chat(user, "The support struts are screwed in place.")
+ . += "The support struts are screwed in place."
if(GIRDER_REINF_STRUTS)
- to_chat(user, "The support struts are unscrewed and the inner grille is intact.")
+ . += "The support struts are unscrewed and the inner grille is intact."
if(GIRDER_NORMAL)
if(can_displace)
- to_chat(user, "The bolts are wrenched in place.")
+ . += "The bolts are wrenched in place."
if(GIRDER_DISPLACED)
- to_chat(user, "The bolts are loosened, but the screws are holding [src] together.")
+ . += "The bolts are loosened, but the screws are holding [src] together."
if(GIRDER_DISASSEMBLED)
- to_chat(user, "[src] is disassembled! You probably shouldn't be able to see this examine message.")
+ . += "[src] is disassembled! You probably shouldn't be able to see this examine message."
/obj/structure/girder/attackby(obj/item/W, mob/user, params)
add_fingerprint(user)
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 00d1690d86..c0519f2504 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -37,11 +37,11 @@
icon_state = "grille50_[rand(0,3)]"
/obj/structure/grille/examine(mob/user)
- ..()
+ . = ..()
if(anchored)
- to_chat(user, "It's secured in place with screws. The rods look like they could be cut through.")
- if(!anchored)
- to_chat(user, "The anchoring screws are unscrewed. The rods look like they could be cut through.")
+ . += "It's secured in place with screws. The rods look like they could be cut through."
+ else
+ . += "The anchoring screws are unscrewed. The rods look like they could be cut through."
/obj/structure/grille/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
switch(the_rcd.mode)
diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm
index 8714722f4b..3b4bbea559 100644
--- a/code/game/objects/structures/guillotine.dm
+++ b/code/game/objects/structures/guillotine.dm
@@ -34,29 +34,22 @@
. = ..()
/obj/structure/guillotine/examine(mob/user)
- ..()
-
- var/msg = ""
-
- msg += "It is [anchored ? "wrenched to the floor." : "unsecured. A wrench should fix that."]
"
+ . = ..()
+ . += "It is [anchored ? "wrenched to the floor." : "unsecured. A wrench should fix that."]"
if (blade_status == GUILLOTINE_BLADE_RAISED)
- msg += "The blade is raised, ready to fall, and"
+ var/msg = "The blade is raised, ready to fall, and"
if (blade_sharpness >= GUILLOTINE_DECAP_MIN_SHARP)
msg += " looks sharp enough to decapitate without any resistance."
else
msg += " doesn't look particularly sharp. Perhaps a whetstone can be used to sharpen it."
+ . += msg
else
- msg += "The blade is hidden inside the stocks."
+ . += "The blade is hidden inside the stocks."
if (LAZYLEN(buckled_mobs))
- msg += "
"
- msg += "Someone appears to be strapped in. You can help them out, or you can harm them by activating the guillotine."
-
- to_chat(user, msg)
-
- return msg
+ . += "Someone appears to be strapped in. You can help them out, or you can harm them by activating the guillotine."
/obj/structure/guillotine/attack_hand(mob/user)
add_fingerprint(user)
diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm
index 609384cdda..1f007b6993 100644
--- a/code/game/objects/structures/holosign.dm
+++ b/code/game/objects/structures/holosign.dm
@@ -9,11 +9,13 @@
armor = list("melee" = 0, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
var/obj/item/holosign_creator/projector
-/obj/structure/holosign/New(loc, source_projector)
+/obj/structure/holosign/Initialize(mapload, source_projector)
+ . = ..()
if(source_projector)
projector = source_projector
projector.signs += src
- ..()
+ SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, plane, dir, alpha, RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
+ alpha = 0
/obj/structure/holosign/Destroy()
if(projector)
@@ -71,10 +73,8 @@
desc = "A holographic barrier resembling a firelock. Though it does not prevent solid objects from passing through, gas is kept out."
icon_state = "holo_firelock"
density = FALSE
- layer = ABOVE_MOB_LAYER
anchored = TRUE
CanAtmosPass = ATMOS_PASS_NO
- layer = ABOVE_MOB_LAYER
alpha = 150
/obj/structure/holosign/barrier/atmos/Initialize()
@@ -100,13 +100,12 @@
desc = "A holobarrier that uses biometrics to detect human viruses. Denies passing to personnel with easily-detected, malicious viruses. Good for quarantines."
icon_state = "holo_medical"
alpha = 125 //lazy :)
- layer = ABOVE_MOB_LAYER
var/force_allaccess = FALSE
var/buzzcd = 0
/obj/structure/holosign/barrier/medical/examine(mob/user)
- ..()
- to_chat(user,"The biometric scanners are [force_allaccess ? "off" : "on"].")
+ . = ..()
+ . += "The biometric scanners are [force_allaccess ? "off" : "on"]."
/obj/structure/holosign/barrier/medical/CanPass(atom/movable/mover, turf/target)
icon_state = "holo_medical"
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index d6f304653d..b946a06432 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -19,10 +19,10 @@
/obj/structure/lattice/examine(mob/user)
..()
- deconstruction_hints(user)
+ . += deconstruction_hints(user)
/obj/structure/lattice/proc/deconstruction_hints(mob/user)
- to_chat(user, "The rods look like they could be cut. There's space for more rods or a tile.")
+ return "The rods look like they could be cut. There's space for more rods or a tile."
/obj/structure/lattice/Initialize(mapload)
. = ..()
@@ -100,6 +100,7 @@
number_of_rods = 2
smooth = SMOOTH_TRUE
canSmoothWith = null
+ obj_flags = CAN_BE_HIT | BLOCK_Z_FALL
/obj/structure/lattice/catwalk/deconstruction_hints(mob/user)
to_chat(user, "The supporting rods look like they could be cut.")
diff --git a/code/game/objects/structures/life_candle.dm b/code/game/objects/structures/life_candle.dm
index e1480b32b3..0ae0e29459 100644
--- a/code/game/objects/structures/life_candle.dm
+++ b/code/game/objects/structures/life_candle.dm
@@ -55,9 +55,9 @@
/obj/structure/life_candle/examine(mob/user)
. = ..()
if(linked_minds.len)
- to_chat(user, "[src] is active, and linked to [linked_minds.len] souls.")
+ . += "[src] is active, and linked to [linked_minds.len] souls."
else
- to_chat(user, "It is static, still, unmoving.")
+ . += "It is static, still, unmoving."
/obj/structure/life_candle/process()
if(!linked_minds.len)
diff --git a/code/game/objects/structures/loom.dm b/code/game/objects/structures/loom.dm
index c4e1968e59..28427469ba 100644
--- a/code/game/objects/structures/loom.dm
+++ b/code/game/objects/structures/loom.dm
@@ -1,5 +1,7 @@
-//Loom, turns raw cotton and durathread into their respective fabrics.
+#define FABRIC_PER_SHEET 4
+
+///This is a loom. It's usually made out of wood and used to weave fabric like durathread or cotton into their respective cloth types.
/obj/structure/loom
name = "loom"
desc = "A simple device used to weave cloth and other thread-based fabrics together into usable material."
@@ -8,14 +10,35 @@
density = TRUE
anchored = TRUE
-/obj/structure/loom/attackby(obj/item/stack/sheet/W, mob/user)
- if(W.is_fabric && W.amount > 1)
- user.show_message("You start weaving the [W.name] through the loom..", 1)
- if(W.use_tool(src, user, W.pull_effort))
- new W.loom_result(drop_location())
- user.show_message("You weave the [W.name] into a workable fabric.", 1)
- W.amount = (W.amount - 2)
- if(W.amount < 1)
- qdel(W)
- else
- user.show_message("You need a valid fabric and at least 2 of said fabric before using this.", 1)
\ No newline at end of file
+/obj/structure/loom/attackby(obj/item/I, mob/user)
+ if(weave(I, user))
+ return
+ return ..()
+
+/obj/structure/loom/wrench_act(mob/living/user, obj/item/I)
+ ..()
+ default_unfasten_wrench(user, I, 5)
+ return TRUE
+
+///Handles the weaving.
+/obj/structure/loom/proc/weave(obj/item/stack/sheet/S, mob/user)
+ if(!istype(S) || !S.is_fabric)
+ return FALSE
+ if(!anchored)
+ user.show_message("The loom needs to be wrenched down.", MSG_VISUAL)
+ return FALSE
+ if(S.amount < FABRIC_PER_SHEET)
+ user.show_message("You need at least [FABRIC_PER_SHEET] units of fabric before using this.", 1)
+ return FALSE
+ user.show_message("You start weaving \the [S.name] through the loom..", MSG_VISUAL)
+ if(S.use_tool(src, user, S.pull_effort))
+ if(S.amount >= FABRIC_PER_SHEET)
+ new S.loom_result(drop_location())
+ S.use(FABRIC_PER_SHEET)
+ user.show_message("You weave \the [S.name] into a workable fabric.", MSG_VISUAL)
+ return TRUE
+
+/obj/structure/loom/unanchored
+ anchored = FALSE
+
+#undef FABRIC_PER_SHEET
\ No newline at end of file
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 5733ea123c..efb12ae34a 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -193,7 +193,7 @@
return
/obj/structure/mineral_door/transparent/plasma/attackby(obj/item/W, mob/user, params)
- if(W.is_hot())
+ if(W.get_temperature())
var/turf/T = get_turf(src)
message_admins("Plasma mineral door ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma mineral door ignited by [key_name(user)] in [AREACOORD(T)]")
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index b15d686b7b..ba45ae5ef0 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -20,10 +20,9 @@
return
if(broken || !Adjacent(user))
return
-
+
if(ishuman(user))
var/mob/living/carbon/human/H = user
-
//see code/modules/mob/dead/new_player/preferences.dm at approx line 545 for comments!
//this is largely copypasted from there.
@@ -226,9 +225,13 @@
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(new_eye_color)
- H.eye_color = sanitize_hexcolor(new_eye_color)
+ var/n_color = sanitize_hexcolor(new_eye_color)
+ var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES)
+ if(eyes)
+ eyes.eye_color = n_color
+ H.eye_color = n_color
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
- H.update_body()
+ H.dna.species.handle_body()
if(choice)
curse(user)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index e7be30520e..cdd4cb5a31 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -163,15 +163,16 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
..()
/obj/structure/bodycontainer/morgue/examine(mob/user)
- ..()
- to_chat(user, "The speaker is [beeper ? "enabled" : "disabled"]. Alt-click to toggle it.")
+ . = ..()
+ . += "The speaker is [beeper ? "enabled" : "disabled"]. Alt-click to toggle it."
/obj/structure/bodycontainer/morgue/AltClick(mob/user)
- ..()
+ . = ..()
if(!user.canUseTopic(src, !issilicon(user)))
return
beeper = !beeper
to_chat(user, "You turn the speaker function [beeper ? "on" : "off"].")
+ return TRUE
/obj/structure/bodycontainer/morgue/update_icon()
if (!connected || connected.loc != src) // Open or tray is gone.
@@ -192,7 +193,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
icon_state = "morgue4" // Cloneable
if(mob_occupant.stat == DEAD && beeper)
if(world.time > next_beep)
- playsound(src, 'sound/weapons/smg_empty_alarm.ogg', 50, 0) //Clone them you blind fucks
+ playsound(src, 'sound/machines/beeping_alarm.ogg', 50, 0) //Clone them you blind fucks
next_beep = world.time + beep_cooldown
break
diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm
index 0e2f951f38..36dbcc1e28 100644
--- a/code/game/objects/structures/musician.dm
+++ b/code/game/objects/structures/musician.dm
@@ -104,12 +104,12 @@
playing = FALSE
hearing_mobs = null
return
- if(!lentext(note))
+ if(!length(note))
continue
var/cur_note = text2ascii(note) - 96
if(cur_note < 1 || cur_note > 7)
continue
- for(var/i=2 to lentext(note))
+ for(var/i=2 to length(note))
var/ni = copytext(note,i,i+1)
if(!text2num(ni))
if(ni == "#" || ni == "b" || ni == "n")
@@ -209,7 +209,7 @@
lines.Cut(MUSIC_MAXLINES + 1)
var/linenum = 1
for(var/l in lines)
- if(lentext(l) > MUSIC_MAXLINECHARS)
+ if(length(l) > MUSIC_MAXLINECHARS)
to_chat(usr, "Line [linenum] too long!")
lines.Remove(l)
else
@@ -236,11 +236,11 @@
if(!in_range(instrumentObj, usr))
return
- if(lentext(t) >= MUSIC_MAXLINES * MUSIC_MAXLINECHARS)
+ if(length(t) >= MUSIC_MAXLINES * MUSIC_MAXLINECHARS)
var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no")
if(cont == "no")
break
- while(lentext(t) > MUSIC_MAXLINES * MUSIC_MAXLINECHARS)
+ while(length(t) > MUSIC_MAXLINES * MUSIC_MAXLINECHARS)
ParseSong(t)
else if(href_list["help"])
@@ -272,7 +272,7 @@
return
if(lines.len > MUSIC_MAXLINES)
return
- if(lentext(newline) > MUSIC_MAXLINECHARS)
+ if(length(newline) > MUSIC_MAXLINECHARS)
newline = copytext(newline, 1, MUSIC_MAXLINECHARS)
lines.Add(newline)
@@ -287,7 +287,7 @@
var/content = html_encode(input("Enter your line: ", instrumentObj.name, lines[num]) as text|null)
if(!content || !in_range(instrumentObj, usr))
return
- if(lentext(content) > MUSIC_MAXLINECHARS)
+ if(length(content) > MUSIC_MAXLINECHARS)
content = copytext(content, 1, MUSIC_MAXLINECHARS)
if(num > lines.len || num < 1)
return
diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm
index e3862ed924..a07e9a26d5 100644
--- a/code/game/objects/structures/plasticflaps.dm
+++ b/code/game/objects/structures/plasticflaps.dm
@@ -6,18 +6,22 @@
armor = list("melee" = 100, "bullet" = 80, "laser" = 80, "energy" = 100, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 50, "acid" = 50)
density = FALSE
anchored = TRUE
- layer = ABOVE_MOB_LAYER
CanAtmosPass = ATMOS_PASS_NO
/obj/structure/plasticflaps/opaque
opacity = TRUE
+/obj/structure/plasticflaps/Initialize()
+ . = ..()
+ alpha = 0
+ SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, plane, dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
+
/obj/structure/plasticflaps/examine(mob/user)
. = ..()
if(anchored)
- to_chat(user, "[src] are screwed to the floor.")
+ . += "[src] are screwed to the floor."
else
- to_chat(user, "[src] are no longer screwed to the floor, and the flaps can be cut apart.")
+ . += "[src] are no longer screwed to the floor, and the flaps can be cut apart."
/obj/structure/plasticflaps/screwdriver_act(mob/living/user, obj/item/W)
if(..())
diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm
index 419502e2b0..cde60e15c1 100644
--- a/code/game/objects/structures/reflector.dm
+++ b/code/game/objects/structures/reflector.dm
@@ -34,14 +34,14 @@
can_rotate = FALSE
/obj/structure/reflector/examine(mob/user)
- ..()
+ . = ..()
if(finished)
- to_chat(user, "It is set to [rotation_angle] degrees, and the rotation is [can_rotate ? "unlocked" : "locked"].")
+ . += "It is set to [rotation_angle] degrees, and the rotation is [can_rotate ? "unlocked" : "locked"]."
if(!admin)
if(can_rotate)
- to_chat(user, "Alt-click to adjust its direction.")
+ . += "Alt-click to adjust its direction."
else
- to_chat(user, "Use screwdriver to unlock the rotation.")
+ . += "Use screwdriver to unlock the rotation."
/obj/structure/reflector/proc/setAngle(new_angle)
if(can_rotate)
@@ -167,10 +167,12 @@
return TRUE
/obj/structure/reflector/AltClick(mob/user)
+ . = ..()
if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return
else if(finished)
rotate(user)
+ return TRUE
//TYPES OF REFLECTORS, SINGLE, DOUBLE, BOX
diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm
index 5de3f0fc9a..b0427274a4 100644
--- a/code/game/objects/structures/showcase.dm
+++ b/code/game/objects/structures/showcase.dm
@@ -131,12 +131,11 @@
//Feedback is given in examine because showcases can basically have any sprite assigned to them
/obj/structure/showcase/examine(mob/user)
- ..()
-
+ . = ..()
switch(deconstruction_state)
if(SHOWCASE_CONSTRUCTED)
- to_chat(user, "The showcase is fully constructed.")
+ . += "The showcase is fully constructed."
if(SHOWCASE_SCREWDRIVERED)
- to_chat(user, "The showcase has its screws loosened.")
+ . += "The showcase has its screws loosened."
else
- to_chat(user, "If you see this, something is wrong.")
+ . += "If you see this, something is wrong."
diff --git a/code/game/objects/structures/signs/signs_maps.dm b/code/game/objects/structures/signs/signs_maps.dm
index f3188b90c2..1e3bfd6d36 100644
--- a/code/game/objects/structures/signs/signs_maps.dm
+++ b/code/game/objects/structures/signs/signs_maps.dm
@@ -50,7 +50,8 @@
name = "bar"
desc = "A direction sign, pointing out which way the Bar is."
icon_state = "direction_bar"
- /obj/structure/sign/directions/cafe
+
+/obj/structure/sign/directions/cafe
name = "cafe"
desc = "A direction sign, pointing out which way the Cafe is."
icon_state = "direction_cafe"
diff --git a/code/game/objects/structures/spirit_board.dm b/code/game/objects/structures/spirit_board.dm
index c35d16ab73..4a9a1bdce6 100644
--- a/code/game/objects/structures/spirit_board.dm
+++ b/code/game/objects/structures/spirit_board.dm
@@ -12,7 +12,7 @@
/obj/structure/spirit_board/examine()
desc = "[initial(desc)] The planchette is sitting at \"[planchette]\"."
- ..()
+ return ..()
/obj/structure/spirit_board/attack_hand(mob/user)
. = ..()
diff --git a/code/game/objects/structures/stairs.dm b/code/game/objects/structures/stairs.dm
new file mode 100644
index 0000000000..bd657fe1e8
--- /dev/null
+++ b/code/game/objects/structures/stairs.dm
@@ -0,0 +1,130 @@
+#define STAIR_TERMINATOR_AUTOMATIC 0
+#define STAIR_TERMINATOR_NO 1
+#define STAIR_TERMINATOR_YES 2
+
+// dir determines the direction of travel to go upwards (due to lack of sprites, currently only 1 and 2 make sense)
+// stairs require /turf/open/openspace as the tile above them to work
+// multiple stair objects can be chained together; the Z level transition will happen on the final stair object in the chain
+
+/obj/structure/stairs
+ name = "stairs"
+ icon = 'icons/obj/stairs.dmi'
+ icon_state = "stairs"
+ anchored = TRUE
+
+ var/force_open_above = FALSE // replaces the turf above this stair obj with /turf/open/openspace
+ var/terminator_mode = STAIR_TERMINATOR_AUTOMATIC
+ var/turf/listeningTo
+
+/obj/structure/stairs/Initialize(mapload)
+ if(force_open_above)
+ force_open_above()
+ build_signal_listener()
+ update_surrounding()
+ return ..()
+
+/obj/structure/stairs/Destroy()
+ listeningTo = null
+ return ..()
+
+/obj/structure/stairs/Move() //Look this should never happen but...
+ . = ..()
+ if(force_open_above)
+ build_signal_listener()
+ update_surrounding()
+
+/obj/structure/stairs/proc/update_surrounding()
+ update_icon()
+ for(var/i in GLOB.cardinals)
+ var/turf/T = get_step(get_turf(src), i)
+ var/obj/structure/stairs/S = locate() in T
+ if(S)
+ S.update_icon()
+
+/obj/structure/stairs/Uncross(atom/movable/AM, turf/newloc)
+ if(!newloc || !AM)
+ return ..()
+ if(!isobserver(AM) && isTerminator() && (get_dir(src, newloc) == dir))
+ stair_ascend(AM)
+ return FALSE
+ return ..()
+
+/obj/structure/stairs/Cross(atom/movable/AM)
+ if(isTerminator() && (get_dir(src, AM) == dir))
+ return FALSE
+ return ..()
+
+/obj/structure/stairs/update_icon()
+ if(isTerminator())
+ icon_state = "stairs_t"
+ else
+ icon_state = "stairs"
+
+/obj/structure/stairs/proc/stair_ascend(atom/movable/AM)
+ var/turf/checking = get_step_multiz(get_turf(src), UP)
+ if(!istype(checking))
+ return
+ if(!checking.zPassIn(AM, UP, get_turf(src)))
+ return
+ var/turf/target = get_step_multiz(get_turf(src), (dir|UP))
+ if(istype(target) && !target.can_zFall(AM, null, get_step_multiz(target, DOWN))) //Don't throw them into a tile that will just dump them back down.
+ if(isliving(AM))
+ var/mob/living/L = AM
+ var/pulling = L.pulling
+ if(pulling)
+ L.pulling.forceMove(target)
+ L.forceMove(target)
+ L.start_pulling(pulling)
+ else
+ AM.forceMove(target)
+
+/obj/structure/stairs/vv_edit_var(var_name, var_value)
+ . = ..()
+ if(!.)
+ return
+ if(var_name != NAMEOF(src, force_open_above))
+ return
+ if(!var_value)
+ if(listeningTo)
+ UnregisterSignal(listeningTo, COMSIG_TURF_MULTIZ_NEW)
+ listeningTo = null
+ else
+ build_signal_listener()
+ force_open_above()
+
+/obj/structure/stairs/proc/build_signal_listener()
+ if(listeningTo)
+ UnregisterSignal(listeningTo, COMSIG_TURF_MULTIZ_NEW)
+ var/turf/open/openspace/T = get_step_multiz(get_turf(src), UP)
+ RegisterSignal(T, COMSIG_TURF_MULTIZ_NEW, .proc/on_multiz_new)
+ listeningTo = T
+
+/obj/structure/stairs/proc/force_open_above()
+ var/turf/open/openspace/T = get_step_multiz(get_turf(src), UP)
+ if(T && !istype(T))
+ T.ChangeTurf(/turf/open/openspace)
+
+/obj/structure/stairs/proc/on_multiz_new(turf/source, dir)
+ if(dir == UP)
+ var/turf/open/openspace/T = get_step_multiz(get_turf(src), UP)
+ if(T && !istype(T))
+ T.ChangeTurf(/turf/open/openspace)
+
+/obj/structure/stairs/intercept_zImpact(atom/movable/AM, levels = 1)
+ . = ..()
+ if(isTerminator())
+ . |= FALL_INTERCEPTED | FALL_NO_MESSAGE
+
+/obj/structure/stairs/proc/isTerminator() //If this is the last stair in a chain and should move mobs up
+ if(terminator_mode != STAIR_TERMINATOR_AUTOMATIC)
+ return (terminator_mode == STAIR_TERMINATOR_YES)
+ var/turf/T = get_turf(src)
+ if(!T)
+ return FALSE
+ var/turf/them = get_step(T, dir)
+ if(!them)
+ return FALSE
+ for(var/obj/structure/stairs/S in them)
+ if(S.dir == dir)
+ return FALSE
+ return TRUE
diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm
index dd28168ccc..5e6b35ba4f 100644
--- a/code/game/objects/structures/statues.dm
+++ b/code/game/objects/structures/statues.dm
@@ -127,11 +127,11 @@
..()
/obj/structure/statue/plasma/attackby(obj/item/W, mob/user, params)
- if(W.is_hot() > 300 && !QDELETED(src))//If the temperature of the object is over 300, then ignite
+ if(W.get_temperature() > 300 && !QDELETED(src))//If the temperature of the object is over 300, then ignite
var/turf/T = get_turf(src)
message_admins("Plasma statue ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma statue ignited by [key_name(user)] in [AREACOORD(T)]")
- ignite(W.is_hot())
+ ignite(W.get_temperature())
else
return ..()
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index b12a26cd00..99f8875aef 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -36,11 +36,11 @@
canSmoothWith = list(/obj/structure/table, /obj/structure/table/reinforced)
/obj/structure/table/examine(mob/user)
- ..()
- deconstruction_hints(user)
+ . = ..()
+ . += deconstruction_hints(user)
/obj/structure/table/proc/deconstruction_hints(mob/user)
- to_chat(user, "The top is screwed on, but the main bolts are also visible.")
+ return "The top is screwed on, but the main bolts are also visible."
/obj/structure/table/update_icon()
if(smooth)
@@ -452,9 +452,8 @@
/obj/structure/table/reinforced/deconstruction_hints(mob/user)
if(deconstruction_ready)
- to_chat(user, "The top cover has been welded loose and the main frame's bolts are exposed.")
- else
- to_chat(user, "The top cover is firmly welded on.")
+ return "The top cover has been welded loose and the main frame's bolts are exposed."
+ return "The top cover is firmly welded on."
/obj/structure/table/reinforced/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weldingtool))
@@ -582,8 +581,8 @@
max_integrity = 20
/obj/structure/rack/examine(mob/user)
- ..()
- to_chat(user, "It's held together by a couple of bolts.")
+ . = ..()
+ . += "It's held together by a couple of bolts."
/obj/structure/rack/CanPass(atom/movable/mover, turf/target)
if(src.density == 0) //Because broken racks -Agouri |TODO: SPRITE!|
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm
index fb5988f72a..08f16554bc 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm
@@ -15,6 +15,15 @@
var/flipped_build_type
var/base_icon
+/obj/structure/c_transit_tube/proc/can_wrench_in_loc(mob/user)
+ var/turf/source_turf = get_turf(loc)
+ var/existing_tubes = 0
+ for(var/obj/structure/transit_tube/tube in source_turf)
+ existing_tubes++
+ if(existing_tubes >= 2)
+ to_chat(user, "You cannot wrench any more transit tubes!")
+ return FALSE
+ return TRUE
/obj/structure/c_transit_tube/ComponentInitialize()
. = ..()
@@ -32,9 +41,11 @@
icon_state = "[base_icon][flipped]"
/obj/structure/c_transit_tube/wrench_act(mob/living/user, obj/item/I)
+ if(!can_wrench_in_loc(user))
+ return
to_chat(user, "You start attaching the [name]...")
add_fingerprint(user)
- if(I.use_tool(src, user, time_to_unwrench, volume=50))
+ if(I.use_tool(src, user, time_to_unwrench, volume=50, extra_checks=CALLBACK(src, .proc/can_wrench_in_loc, user)))
to_chat(user, "You attach the [name].")
var/obj/structure/transit_tube/R = new build_type(loc, dir)
transfer_fingerprints_to(R)
diff --git a/code/game/objects/structures/traps.dm b/code/game/objects/structures/traps.dm
index 176779abd7..9c1859df08 100644
--- a/code/game/objects/structures/traps.dm
+++ b/code/game/objects/structures/traps.dm
@@ -38,7 +38,7 @@
if(user.mind && user.mind in immune_minds)
return
if(get_dist(user, src) <= 1)
- to_chat(user, "You reveal [src]!")
+ . += "You reveal [src]!"
flare()
/obj/structure/trap/proc/flare()
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 9fc055c2ba..58588c5693 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -29,21 +29,21 @@
rad_flags = RAD_PROTECT_CONTENTS
/obj/structure/window/examine(mob/user)
- ..()
+ . = ..()
if(reinf)
if(anchored && state == WINDOW_SCREWED_TO_FRAME)
- to_chat(user, "The window is screwed to the frame.")
+ . += "The window is screwed to the frame."
else if(anchored && state == WINDOW_IN_FRAME)
- to_chat(user, "The window is unscrewed but pried into the frame.")
+ . += "The window is unscrewed but pried into the frame."
else if(anchored && state == WINDOW_OUT_OF_FRAME)
- to_chat(user, "The window is out of the frame, but could be pried in. It is screwed to the floor.")
+ . += "The window is out of the frame, but could be pried in. It is screwed to the floor."
else if(!anchored)
- to_chat(user, "The window is unscrewed from the floor, and could be deconstructed by wrenching.")
+ . += "The window is unscrewed from the floor, and could be deconstructed by wrenching."
else
if(anchored)
- to_chat(user, "The window is screwed to the floor.")
+ . += "The window is screwed to the floor."
else
- to_chat(user, "The window is unscrewed from the floor, and could be deconstructed by wrenching.")
+ . += "The window is unscrewed from the floor, and could be deconstructed by wrenching."
/obj/structure/window/Initialize(mapload, direct)
. = ..()
@@ -285,6 +285,13 @@
. += new /obj/item/shard(location)
/obj/structure/window/proc/can_be_rotated(mob/user,rotation_type)
+ if (get_dist(src,user) > 1)
+ if (iscarbon(user))
+ var/mob/living/carbon/H = user
+ if (!(H.dna && H.dna.check_mutation(TK) && tkMaxRangeCheck(src,H)))
+ return FALSE
+ else
+ return FALSE
if(anchored)
to_chat(user, "[src] cannot be rotated while it is fastened to the floor!")
return FALSE
@@ -731,8 +738,8 @@
/obj/structure/window/paperframe/attackby(obj/item/W, mob/user)
- if(W.is_hot())
- fire_act(W.is_hot())
+ if(W.get_temperature())
+ fire_act(W.get_temperature())
return
if(user.a_intent == INTENT_HARM)
return ..()
diff --git a/code/game/say.dm b/code/game/say.dm
index 4ce1d3c710..7f01bf163d 100644
--- a/code/game/say.dm
+++ b/code/game/say.dm
@@ -28,19 +28,21 @@ GLOBAL_LIST_INIT(freqtospan, list(
language = get_default_language()
send_speech(message, 7, src, , spans, message_language=language)
-/atom/movable/proc/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
- SEND_SIGNAL(src, COMSIG_MOVABLE_HEAR, message, speaker, message_language, raw_message, radio_freq, spans, message_mode)
+/atom/movable/proc/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
+ SEND_SIGNAL(src, COMSIG_MOVABLE_HEAR, args)
/atom/movable/proc/can_speak()
return 1
-/atom/movable/proc/send_speech(message, range = 7, obj/source = src, bubble_type, list/spans, datum/language/message_language = null, message_mode)
- var/rendered = compose_message(src, message_language, message, , spans, message_mode)
+/atom/movable/proc/send_speech(message, range = 7, atom/movable/source = src, bubble_type, list/spans, datum/language/message_language = null, message_mode)
+ var/rendered = compose_message(src, message_language, message, , spans, message_mode, source)
for(var/_AM in get_hearers_in_view(range, source))
var/atom/movable/AM = _AM
- AM.Hear(rendered, src, message_language, message, , spans, message_mode)
+ AM.Hear(rendered, src, message_language, message, , spans, message_mode, source)
-/atom/movable/proc/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, face_name = FALSE)
+/atom/movable/proc/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, face_name = FALSE, atom/movable/source)
+ if(!source)
+ source = speaker
//This proc uses text() because it is faster than appending strings. Thanks BYOND.
//Basic span
var/spanpart1 = ""
@@ -124,8 +126,14 @@ GLOBAL_LIST_INIT(freqtospan, list(
return returntext
return "[copytext("[freq]", 1, 4)].[copytext("[freq]", 4, 5)]"
-/proc/attach_spans(input, list/spans)
- return "[message_spans_start(spans)][input]"
+/atom/movable/proc/attach_spans(input, list/spans)
+ var/customsayverb = findtext(input, "*")
+ if(customsayverb)
+ input = capitalize(copytext(input, customsayverb+1))
+ if(input)
+ return "[message_spans_start(spans)][input]"
+ else
+ return
/proc/message_spans_start(list/spans)
var/output = "You slipped[ O ? " on the [O.name]" : ""]!")
playsound(C.loc, 'sound/misc/slip.ogg', 50, 1, -3)
diff --git a/code/game/turfs/openspace/openspace.dm b/code/game/turfs/openspace/openspace.dm
new file mode 100644
index 0000000000..e68aabcd08
--- /dev/null
+++ b/code/game/turfs/openspace/openspace.dm
@@ -0,0 +1,134 @@
+/turf/open/openspace
+ name = "open space"
+ desc = "Watch your step!"
+ icon_state = "grey"
+ baseturfs = /turf/open/openspace
+ CanAtmosPassVertical = ATMOS_PASS_YES
+ //mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+ var/can_cover_up = TRUE
+ var/can_build_on = TRUE
+
+/turf/open/openspace/debug/update_multiz()
+ ..()
+ return TRUE
+
+/turf/open/openspace/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
+ . = ..()
+ plane = FLOOR_OPENSPACE_PLANE
+ layer = OPENSPACE_LAYER
+ return INITIALIZE_HINT_LATELOAD
+
+/turf/open/openspace/LateInitialize()
+ update_multiz(TRUE, TRUE)
+
+/turf/open/openspace/Destroy()
+ vis_contents.len = 0
+ return ..()
+
+/turf/open/openspace/update_multiz(prune_on_fail = FALSE, init = FALSE)
+ . = ..()
+ var/turf/T = below()
+ if(!T)
+ vis_contents.len = 0
+ if(prune_on_fail)
+ ChangeTurf(/turf/open/floor/plating)
+ return FALSE
+ if(init)
+ vis_contents += T
+ return TRUE
+
+/turf/open/openspace/multiz_turf_del(turf/T, dir)
+ if(dir != DOWN)
+ return
+ update_multiz()
+
+/turf/open/openspace/multiz_turf_new(turf/T, dir)
+ if(dir != DOWN)
+ return
+ update_multiz()
+
+/turf/open/openspace/zAirIn()
+ return TRUE
+
+/turf/open/openspace/zAirOut()
+ return TRUE
+
+/turf/open/openspace/zPassIn(atom/movable/A, direction, turf/source)
+ return TRUE
+
+/turf/open/openspace/zPassOut(atom/movable/A, direction, turf/destination)
+ if(A.anchored)
+ return FALSE
+ for(var/obj/O in contents)
+ if(O.obj_flags & BLOCK_Z_FALL)
+ return FALSE
+ return TRUE
+
+/turf/open/openspace/proc/CanCoverUp()
+ return can_cover_up
+
+/turf/open/openspace/proc/CanBuildHere()
+ return can_build_on
+
+/turf/open/openspace/attackby(obj/item/C, mob/user, params)
+ ..()
+ if(!CanBuildHere())
+ return
+ if(istype(C, /obj/item/stack/rods))
+ var/obj/item/stack/rods/R = C
+ var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
+ var/obj/structure/lattice/catwalk/W = locate(/obj/structure/lattice/catwalk, src)
+ if(W)
+ to_chat(user, "There is already a catwalk here!")
+ return
+ if(L)
+ if(R.use(1))
+ to_chat(user, "You construct a catwalk.")
+ playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
+ new/obj/structure/lattice/catwalk(src)
+ else
+ to_chat(user, "You need two rods to build a catwalk!")
+ return
+ if(R.use(1))
+ to_chat(user, "You construct a lattice.")
+ playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
+ ReplaceWithLattice()
+ else
+ to_chat(user, "You need one rod to build a lattice.")
+ return
+ if(istype(C, /obj/item/stack/tile/plasteel))
+ if(!CanCoverUp())
+ return
+ var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
+ if(L)
+ var/obj/item/stack/tile/plasteel/S = C
+ if(S.use(1))
+ qdel(L)
+ playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
+ to_chat(user, "You build a floor.")
+ PlaceOnTop(/turf/open/floor/plating)
+ else
+ to_chat(user, "You need one floor tile to build a floor!")
+ else
+ to_chat(user, "The plating is going to need some support! Place metal rods first.")
+
+/turf/open/openspace/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
+ if(!CanBuildHere())
+ return FALSE
+
+ switch(the_rcd.mode)
+ if(RCD_FLOORWALL)
+ var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
+ if(L)
+ return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 1)
+ else
+ return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 3)
+ return FALSE
+
+/turf/open/openspace/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
+ switch(passed_mode)
+ if(RCD_FLOORWALL)
+ to_chat(user, "You build a floor.")
+ PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
+ return TRUE
+ return FALSE
diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm
index ed6e279088..82f1a88253 100644
--- a/code/game/turfs/simulated/floor/fancy_floor.dm
+++ b/code/game/turfs/simulated/floor/fancy_floor.dm
@@ -19,8 +19,8 @@
tiled_dirt = FALSE
/turf/open/floor/wood/examine(mob/user)
- ..()
- to_chat(user, "There's a few screws and a small crack visible.")
+ . = ..()
+ . += "There's a few screws and a small crack visible."
/turf/open/floor/wood/screwdriver_act(mob/living/user, obj/item/I)
if(..())
@@ -65,7 +65,7 @@
temperature = 255.37
/turf/open/floor/wood/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/grass
name = "grass patch"
@@ -96,6 +96,56 @@
if(..())
return
+/turf/open/floor/grass/fairy //like grass but fae-er
+ name = "fairygrass patch"
+ desc = "Something about this grass makes you want to frolic. Or get high."
+ icon_state = "fairygrass"
+ floor_tile = /obj/item/stack/tile/fairygrass
+ light_range = 2
+ light_power = 0.80
+ light_color = "#33CCFF"
+ color = "#33CCFF"
+
+/turf/open/floor/grass/fairy/white
+ name = "white fairygrass patch"
+ light_color = "#FFFFFF"
+ color = "#FFFFFF"
+ floor_tile = /obj/item/stack/tile/fairygrass/white
+
+/turf/open/floor/grass/fairy/red
+ name = "red fairygrass patch"
+ light_color = "#FF3333"
+ color = "#FF3333"
+ floor_tile = /obj/item/stack/tile/fairygrass/red
+
+/turf/open/floor/grass/fairy/yellow
+ name = "yellow fairygrass patch"
+ light_color = "#FFFF66"
+ color = "#FFFF66"
+ floor_tile = /obj/item/stack/tile/fairygrass/yellow
+
+/turf/open/floor/grass/fairy/green
+ name = "green fairygrass patch"
+ light_color = "#99FF99"
+ color = "#99FF99"
+ floor_tile = /obj/item/stack/tile/fairygrass/green
+
+/turf/open/floor/grass/fairy/blue
+ name = "blue fairygrass patch"
+ floor_tile = /obj/item/stack/tile/fairygrass/blue
+
+/turf/open/floor/grass/fairy/purple
+ name = "purple fairygrass patch"
+ light_color = "#D966FF"
+ color = "#D966FF"
+ floor_tile = /obj/item/stack/tile/fairygrass/purple
+
+/turf/open/floor/grass/fairy/pink
+ name = "pink fairygrass patch"
+ light_color = "#FFB3DA"
+ color = "#FFB3DA"
+ floor_tile = /obj/item/stack/tile/fairygrass/pink
+
/turf/open/floor/grass/snow
gender = PLURAL
name = "snow"
@@ -105,7 +155,7 @@
ore_type = /obj/item/stack/sheet/mineral/snow
planetary_atmos = TRUE
floor_tile = null
- initial_gas_mix = "o2=22;n2=82;TEMP=180"
+ initial_gas_mix = FROZEN_ATMOS
slowdown = 2
bullet_sizzle = TRUE
footstep = FOOTSTEP_SAND
@@ -174,8 +224,8 @@
tiled_dirt = FALSE
/turf/open/floor/carpet/examine(mob/user)
- ..()
- to_chat(user, "There's a small crack on the edge of it.")
+ . = ..()
+ . += "There's a small crack on the edge of it."
/turf/open/floor/carpet/Initialize()
. = ..()
diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm
index 6e896b5e56..f9376c0672 100644
--- a/code/game/turfs/simulated/floor/light_floor.dm
+++ b/code/game/turfs/simulated/floor/light_floor.dm
@@ -14,8 +14,8 @@
/turf/open/floor/light/examine(mob/user)
- ..()
- to_chat(user, "There's a small crack on the edge of it.")
+ . = ..()
+ . += "There's a small crack on the edge of it."
/turf/open/floor/light/Initialize()
. = ..()
diff --git a/code/game/turfs/simulated/floor/mineral_floor.dm b/code/game/turfs/simulated/floor/mineral_floor.dm
index a77417e4e4..f0ac0053ce 100644
--- a/code/game/turfs/simulated/floor/mineral_floor.dm
+++ b/code/game/turfs/simulated/floor/mineral_floor.dm
@@ -43,10 +43,10 @@
PlasmaBurn(exposed_temperature)
/turf/open/floor/mineral/plasma/attackby(obj/item/W, mob/user, params)
- if(W.is_hot() > 300)//If the temperature of the object is over 300, then ignite
+ if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
message_admins("Plasma flooring was ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]")
log_game("Plasma flooring was ignited by [key_name(user)] in [AREACOORD(src)]")
- ignite(W.is_hot())
+ ignite(W.get_temperature())
return
..()
@@ -84,31 +84,31 @@
broken_states = list("titanium_dam1","titanium_dam2","titanium_dam3","titanium_dam4","titanium_dam5")
/turf/open/floor/mineral/titanium/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/mineral/titanium/yellow
icon_state = "titanium_yellow"
/turf/open/floor/mineral/titanium/yellow/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/mineral/titanium/blue
icon_state = "titanium_blue"
/turf/open/floor/mineral/titanium/blue/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/mineral/titanium/white
icon_state = "titanium_white"
/turf/open/floor/mineral/titanium/white/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/mineral/titanium/purple
icon_state = "titanium_purple"
/turf/open/floor/mineral/titanium/purple/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
//PLASTITANIUM (syndieshuttle)
/turf/open/floor/mineral/plastitanium
@@ -118,13 +118,13 @@
broken_states = list("plastitanium_dam1","plastitanium_dam2","plastitanium_dam3","plastitanium_dam4","plastitanium_dam5")
/turf/open/floor/mineral/plastitanium/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/mineral/plastitanium/red
icon_state = "plastitanium_red"
/turf/open/floor/mineral/plastitanium/red/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/mineral/plastitanium/red/brig
name = "brig floor"
@@ -170,7 +170,7 @@
spam_flag = world.time + 10
/turf/open/floor/mineral/bananium/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
//DIAMOND
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index 253a6ead90..f75772a230 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -45,10 +45,10 @@
on = FALSE
/turf/open/floor/circuit/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/circuit/telecomms
- initial_gas_mix = "n2=100;TEMP=80"
+ initial_gas_mix = TCOMMS_ATMOS
/turf/open/floor/circuit/telecomms/mainframe
name = "mainframe base"
@@ -72,10 +72,10 @@
floor_tile = /obj/item/stack/tile/circuit/green/anim
/turf/open/floor/circuit/green/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/circuit/green/telecomms
- initial_gas_mix = "n2=100;TEMP=80"
+ initial_gas_mix = TCOMMS_ATMOS
/turf/open/floor/circuit/green/telecomms/mainframe
name = "mainframe base"
@@ -96,10 +96,10 @@
floor_tile = /obj/item/stack/tile/circuit/red/anim
/turf/open/floor/circuit/red/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/circuit/red/telecomms
- initial_gas_mix = "n2=100;TEMP=80"
+ initial_gas_mix = TCOMMS_ATMOS
/turf/open/floor/pod
name = "pod floor"
diff --git a/code/game/turfs/simulated/floor/plasteel_floor.dm b/code/game/turfs/simulated/floor/plasteel_floor.dm
index 884e4c6551..a3a92e7898 100644
--- a/code/game/turfs/simulated/floor/plasteel_floor.dm
+++ b/code/game/turfs/simulated/floor/plasteel_floor.dm
@@ -5,8 +5,8 @@
burnt_states = list("floorscorched1", "floorscorched2")
/turf/open/floor/plasteel/examine(mob/user)
- ..()
- to_chat(user, "There's a small crack on the edge of it.")
+ . = ..()
+ . += "There's a small crack on the edge of it."
/turf/open/floor/plasteel/update_icon()
if(!..())
@@ -16,17 +16,17 @@
/turf/open/floor/plasteel/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/plasteel/telecomms
- initial_gas_mix = "n2=100;TEMP=80"
+ initial_gas_mix = TCOMMS_ATMOS
/turf/open/floor/plasteel/dark
icon_state = "darkfull"
/turf/open/floor/plasteel/dark/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/plasteel/dark/telecomms
- initial_gas_mix = "n2=100;TEMP=80"
+ initial_gas_mix = TCOMMS_ATMOS
/turf/open/floor/plasteel/airless/dark
icon_state = "darkfull"
/turf/open/floor/plasteel/dark/side
@@ -50,7 +50,7 @@
/turf/open/floor/plasteel/airless/white/corner
icon_state = "whitecorner"
/turf/open/floor/plasteel/white/telecomms
- initial_gas_mix = "n2=100;TEMP=80"
+ initial_gas_mix = TCOMMS_ATMOS
/turf/open/floor/plasteel/yellowsiding
@@ -82,7 +82,7 @@
/turf/open/floor/plasteel/freezer
icon_state = "freezerfloor"
/turf/open/floor/plasteel/freezer/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/plasteel/grimy
icon_state = "grimy"
@@ -111,7 +111,7 @@
/turf/open/floor/plasteel/cult/narsie_act()
return
/turf/open/floor/plasteel/cult/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/plasteel/stairs
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index 036f54c710..ae67edf073 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -20,14 +20,14 @@
var/attachment_holes = TRUE
/turf/open/floor/plating/examine(mob/user)
- ..()
+ . = ..()
if(broken || burnt)
- to_chat(user, "It looks like the dents could be welded smooth.")
+ . += "It looks like the dents could be welded smooth."
return
if(attachment_holes)
- to_chat(user, "There are a few attachment holes for a new tile or reinforcement rods.")
+ . += "There are a few attachment holes for a new tile or reinforcement rods."
else
- to_chat(user, "You might be able to build ontop of it with some tiles...")
+ . += "You might be able to build ontop of it with some tiles..."
/turf/open/floor/plating/Initialize()
if (!broken_states)
@@ -144,5 +144,5 @@
..()
ScrapeAway()
-/turf/open/floor/plating/foam/tool_act(mob/living/user, obj/tool/I, tool_type)
+/turf/open/floor/plating/foam/tool_act(mob/living/user, obj/item/I, tool_type)
return
diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm
index d9966ee55c..9f2da57312 100644
--- a/code/game/turfs/simulated/floor/plating/asteroid.dm
+++ b/code/game/turfs/simulated/floor/plating/asteroid.dm
@@ -103,7 +103,7 @@
/turf/open/floor/plating/asteroid/basalt/airless
baseturfs = /turf/open/floor/plating/asteroid/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/plating/asteroid/basalt/Initialize()
. = ..()
@@ -131,7 +131,7 @@
/turf/open/floor/plating/asteroid/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
turf_type = /turf/open/floor/plating/asteroid/airless
@@ -307,7 +307,7 @@
baseturfs = /turf/open/floor/plating/asteroid/snow
icon_state = "snow"
icon_plating = "snow"
- initial_gas_mix = "o2=22;n2=82;TEMP=180"
+ initial_gas_mix = FROZEN_ATMOS
slowdown = 2
environment_type = "snow"
flags_1 = NONE
@@ -344,11 +344,11 @@
return FALSE
/turf/open/floor/plating/asteroid/snow/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/plating/asteroid/snow/temperatre
initial_gas_mix = "o2=22;n2=82;TEMP=255.37"
/turf/open/floor/plating/asteroid/snow/atmosphere
- initial_gas_mix = "o2=22;n2=82;TEMP=180"
+ initial_gas_mix = FROZEN_ATMOS
planetary_atmos = FALSE
\ No newline at end of file
diff --git a/code/game/turfs/simulated/floor/plating/misc_plating.dm b/code/game/turfs/simulated/floor/plating/misc_plating.dm
index 15b039193d..5c58d99e1a 100644
--- a/code/game/turfs/simulated/floor/plating/misc_plating.dm
+++ b/code/game/turfs/simulated/floor/plating/misc_plating.dm
@@ -1,7 +1,7 @@
/turf/open/floor/plating/airless
icon_state = "plating"
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/plating/abductor
name = "alien floor"
@@ -172,7 +172,7 @@
desc = "A sheet of solid ice. Looks slippery."
icon = 'icons/turf/floors/ice_turf.dmi'
icon_state = "unsmooth"
- initial_gas_mix = "o2=22;n2=82;TEMP=180"
+ initial_gas_mix = FROZEN_ATMOS
temperature = 180
planetary_atmos = TRUE
baseturfs = /turf/open/floor/plating/ice
@@ -215,7 +215,7 @@
desc = "A section of heated plating, helps keep the snow from stacking up too high."
icon = 'icons/turf/snow.dmi'
icon_state = "snowplating"
- initial_gas_mix = "o2=22;n2=82;TEMP=180"
+ initial_gas_mix = FROZEN_ATMOS
temperature = 180
attachment_holes = FALSE
planetary_atmos = TRUE
diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm
index 1a477d5d9a..b04f89f8be 100644
--- a/code/game/turfs/simulated/floor/reinf_floor.dm
+++ b/code/game/turfs/simulated/floor/reinf_floor.dm
@@ -13,11 +13,11 @@
tiled_dirt = FALSE
/turf/open/floor/engine/examine(mob/user)
- ..()
- to_chat(user, "The reinforcement rods are wrenched firmly in place.")
+ . = ..()
+ . += "The reinforcement rods are wrenched firmly in place."
/turf/open/floor/engine/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/engine/break_tile()
return //unbreakable
@@ -98,28 +98,28 @@
/turf/open/floor/engine/n2o
article = "an"
name = "\improper N2O floor"
- initial_gas_mix = "n2o=6000;TEMP=293.15"
+ initial_gas_mix = ATMOS_TANK_N2O
/turf/open/floor/engine/co2
name = "\improper CO2 floor"
- initial_gas_mix = "co2=50000;TEMP=293.15"
+ initial_gas_mix = ATMOS_TANK_CO2
/turf/open/floor/engine/plasma
name = "plasma floor"
- initial_gas_mix = "plasma=70000;TEMP=293.15"
+ initial_gas_mix = ATMOS_TANK_PLASMA
/turf/open/floor/engine/o2
name = "\improper O2 floor"
- initial_gas_mix = "o2=100000;TEMP=293.15"
+ initial_gas_mix = ATMOS_TANK_O2
/turf/open/floor/engine/n2
article = "an"
name = "\improper N2 floor"
- initial_gas_mix = "n2=100000;TEMP=293.15"
+ initial_gas_mix = ATMOS_TANK_N2
/turf/open/floor/engine/air
name = "air floor"
- initial_gas_mix = "o2=2644;n2=10580;TEMP=293.15"
+ initial_gas_mix = ATMOS_TANK_AIRMIX
@@ -159,8 +159,8 @@
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
/turf/open/floor/engine/cult/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/floor/engine/vacuum
name = "vacuum floor"
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm
index e24736ecf3..362b410cbb 100644
--- a/code/game/turfs/simulated/lava.dm
+++ b/code/game/turfs/simulated/lava.dm
@@ -30,7 +30,7 @@
return
/turf/open/lava/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
/turf/open/lava/Entered(atom/movable/AM)
if(burn_stuff(AM))
@@ -158,4 +158,4 @@
baseturfs = /turf/open/lava/smooth/lava_land_surface
/turf/open/lava/smooth/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm
index 0004a4485b..aeadceb2e5 100644
--- a/code/game/turfs/simulated/minerals.dm
+++ b/code/game/turfs/simulated/minerals.dm
@@ -8,7 +8,7 @@
smooth = SMOOTH_MORE|SMOOTH_BORDER
canSmoothWith = null
baseturfs = /turf/open/floor/plating/asteroid/airless
- initial_gas_mix = "TEMP=2.7"
+ initial_gas_mix = AIRLESS_ATMOS
opacity = 1
density = TRUE
blocks_air = 1
@@ -176,6 +176,12 @@
/turf/closed/mineral/uranium/volcanic = 35, /turf/closed/mineral/diamond/volcanic = 30, /turf/closed/mineral/gold/volcanic = 45, /turf/closed/mineral/titanium/volcanic = 45,
/turf/closed/mineral/silver/volcanic = 50, /turf/closed/mineral/plasma/volcanic = 50, /turf/closed/mineral/bscrystal/volcanic = 20)
+/turf/closed/mineral/random/high_chance/earth_like
+ icon_state = "rock_highchance_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
/turf/closed/mineral/random/low_chance
@@ -186,6 +192,12 @@
/turf/closed/mineral/silver = 6, /turf/closed/mineral/plasma = 15, /turf/closed/mineral/iron = 40,
/turf/closed/mineral/gibtonite = 2, /turf/closed/mineral/bscrystal = 1)
+/turf/closed/mineral/random/low_chance/earth_like
+ icon_state = "rock_lowchance_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
/turf/closed/mineral/random/volcanic
environment_type = "basalt"
@@ -220,6 +232,12 @@
/turf/closed/mineral/silver/volcanic = 20, /turf/closed/mineral/plasma/volcanic = 30, /turf/closed/mineral/bscrystal/volcanic = 1, /turf/closed/mineral/gibtonite/volcanic = 2,
/turf/closed/mineral/iron/volcanic = 95)
+/turf/closed/mineral/random/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
/turf/closed/mineral/iron
@@ -235,13 +253,20 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
+/turf/closed/mineral/iron/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
+
/turf/closed/mineral/iron/ice
environment_type = "snow_cavern"
icon_state = "icerock_iron"
smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
turf_type = /turf/open/floor/plating/asteroid/snow/ice
baseturfs = /turf/open/floor/plating/asteroid/snow/ice
- initial_gas_mix = "o2=22;n2=82;TEMP=180"
+ initial_gas_mix = FROZEN_ATMOS
defer_change = TRUE
@@ -258,6 +283,13 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
+/turf/closed/mineral/uranium/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
+
/turf/closed/mineral/diamond
mineralType = /obj/item/stack/ore/diamond
@@ -272,13 +304,20 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
+/turf/closed/mineral/diamond/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
+
/turf/closed/mineral/diamond/ice
environment_type = "snow_cavern"
icon_state = "icerock_diamond"
smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
turf_type = /turf/open/floor/plating/asteroid/snow/ice
baseturfs = /turf/open/floor/plating/asteroid/snow/ice
- initial_gas_mix = "o2=22;n2=82;TEMP=180"
+ initial_gas_mix = FROZEN_ATMOS
defer_change = TRUE
@@ -295,6 +334,13 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
+/turf/closed/mineral/gold/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
+
/turf/closed/mineral/silver
mineralType = /obj/item/stack/ore/silver
@@ -309,6 +355,13 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
+/turf/closed/mineral/silver/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
+
/turf/closed/mineral/titanium
mineralType = /obj/item/stack/ore/titanium
@@ -323,6 +376,13 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
+/turf/closed/mineral/titanium/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
+
/turf/closed/mineral/plasma
mineralType = /obj/item/stack/ore/plasma
@@ -337,13 +397,20 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
+/turf/closed/mineral/plasma/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
+
/turf/closed/mineral/plasma/ice
environment_type = "snow_cavern"
icon_state = "icerock_plasma"
smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
turf_type = /turf/open/floor/plating/asteroid/snow/ice
baseturfs = /turf/open/floor/plating/asteroid/snow/ice
- initial_gas_mix = "o2=22;n2=82;TEMP=180"
+ initial_gas_mix = FROZEN_ATMOS
defer_change = TRUE
@@ -355,6 +422,12 @@
spread = 0
scan_state = "rock_Bananium"
+/turf/closed/mineral/bananium/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
/turf/closed/mineral/bscrystal
mineralType = /obj/item/stack/ore/bluespace_crystal
@@ -370,6 +443,13 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
+/turf/closed/mineral/bscrystal/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
+
/turf/closed/mineral/volcanic
environment_type = "basalt"
@@ -383,6 +463,13 @@
baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
defer_change = 1
+/turf/closed/mineral/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
+
/turf/closed/mineral/ash_rock //wall piece
name = "rock"
icon = 'icons/turf/mining.dmi'
@@ -404,7 +491,7 @@
smooth = SMOOTH_MORE|SMOOTH_BORDER
canSmoothWith = list (/turf/closed)
baseturfs = /turf/open/floor/plating/asteroid/snow
- initial_gas_mix = "o2=22;n2=82;TEMP=180"
+ initial_gas_mix = FROZEN_ATMOS
environment_type = "snow"
turf_type = /turf/open/floor/plating/asteroid/snow
defer_change = TRUE
diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm
index dbffd1010b..9962f72d4a 100644
--- a/code/game/turfs/simulated/wall/mineral_walls.dm
+++ b/code/game/turfs/simulated/wall/mineral_walls.dm
@@ -94,10 +94,10 @@
canSmoothWith = list(/turf/closed/wall/mineral/plasma, /obj/structure/falsewall/plasma)
/turf/closed/wall/mineral/plasma/attackby(obj/item/W, mob/user, params)
- if(W.is_hot() > 300)//If the temperature of the object is over 300, then ignite
+ if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
message_admins("Plasma wall ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]")
log_game("Plasma wall ignited by [key_name(user)] in [AREACOORD(src)]")
- ignite(W.is_hot())
+ ignite(W.get_temperature())
return
..()
diff --git a/code/game/turfs/simulated/wall/reinf_walls.dm b/code/game/turfs/simulated/wall/reinf_walls.dm
index d52a3bcc23..b4e84648c2 100644
--- a/code/game/turfs/simulated/wall/reinf_walls.dm
+++ b/code/game/turfs/simulated/wall/reinf_walls.dm
@@ -17,19 +17,19 @@
/turf/closed/wall/r_wall/deconstruction_hints(mob/user)
switch(d_state)
if(INTACT)
- to_chat(user, "The outer grille is fully intact.")
+ return "The outer grille is fully intact."
if(SUPPORT_LINES)
- to_chat(user, "The outer grille has been cut, and the support lines are screwed securely to the outer cover.")
+ return "The outer grille has been cut, and the support lines are screwed securely to the outer cover."
if(COVER)
- to_chat(user, "The support lines have been unscrewed, and the metal cover is welded firmly in place.")
+ return "The support lines have been unscrewed, and the metal cover is welded firmly in place."
if(CUT_COVER)
- to_chat(user, "The metal cover has been sliced through, and is connected loosely to the girder.")
+ return "The metal cover has been sliced through, and is connected loosely to the girder."
if(ANCHOR_BOLTS)
- to_chat(user, "The outer cover has been pried away, and the bolts anchoring the support rods are wrenched in place.")
+ return "The outer cover has been pried away, and the bolts anchoring the support rods are wrenched in place."
if(SUPPORT_RODS)
- to_chat(user, "The bolts anchoring the support rods have been loosened, but are still welded firmly to the girder.")
+ return "The bolts anchoring the support rods have been loosened, but are still welded firmly to the girder."
if(SHEATH)
- to_chat(user, "The support rods have been sliced through, and the outer sheath is connected loosely to the girder.")
+ return "The support rods have been sliced through, and the outer sheath is connected loosely to the girder."
/turf/closed/wall/r_wall/devastate_wall()
new sheet_type(src, sheet_amount)
@@ -227,3 +227,29 @@
/turf/closed/wall/r_wall/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
if(the_rcd.canRturf)
return ..()
+
+/turf/closed/wall/r_wall/syndicate
+ name = "hull"
+ desc = "The armored hull of an ominous looking ship."
+ icon = 'icons/turf/walls/plastitanium_wall.dmi'
+ icon_state = "map-shuttle"
+ explosion_block = 20
+ sheet_type = /obj/item/stack/sheet/mineral/plastitanium
+ smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
+ canSmoothWith = list(/turf/closed/wall/r_wall/syndicate, /turf/closed/wall/mineral/plastitanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/plastitanium, /obj/structure/shuttle/engine, /obj/structure/falsewall/plastitanium)
+
+/turf/closed/wall/r_wall/syndicate/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
+ return FALSE
+
+/turf/closed/wall/r_wall/syndicate/nodiagonal
+ smooth = SMOOTH_MORE
+ icon_state = "map-shuttle_nd"
+
+/turf/closed/wall/r_wall/syndicate/nosmooth
+ icon = 'icons/turf/shuttle.dmi'
+ icon_state = "wall"
+ smooth = SMOOTH_FALSE
+
+/turf/closed/wall/r_wall/syndicate/overspace
+ icon_state = "map-overspace"
+ fixed_underlay = list("space"=1)
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index b18fbb50f6..460c6a52c9 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -32,11 +32,11 @@
var/list/dent_decals
/turf/closed/wall/examine(mob/user)
- ..()
+ . = ..()
deconstruction_hints(user)
/turf/closed/wall/proc/deconstruction_hints(mob/user)
- to_chat(user, "The outer plating is welded firmly in place.")
+ return "The outer plating is welded firmly in place."
/turf/closed/wall/attack_tk()
return
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index 9ebe8f3c19..f38f13e657 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -12,7 +12,7 @@
var/destination_x
var/destination_y
- var/global/datum/gas_mixture/immutable/space/space_gas = new
+ var/static/datum/gas_mixture/immutable/space/space_gas = new
plane = PLANE_SPACE
layer = SPACE_LAYER
light_power = 0.25
@@ -27,6 +27,8 @@
/turf/open/space/Initialize()
icon_state = SPACE_ICON_STATE
air = space_gas
+ vis_contents.Cut() //removes inherited overlays
+ visibilityChanged()
if(flags_1 & INITIALIZED_1)
stack_trace("Warning: [src]([type]) initialized multiple times!")
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index ebf6f6626c..d618e457b0 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -39,7 +39,7 @@
return FALSE
. = ..()
-/turf/Initialize()
+/turf/Initialize(mapload)
if(flags_1 & INITIALIZED_1)
stack_trace("Warning: [src]([type]) initialized multiple times!")
flags_1 |= INITIALIZED_1
@@ -62,12 +62,21 @@
add_overlay(/obj/effect/fullbright)
if(requires_activation)
- CalculateAdjacentTurfs()
+ CALCULATE_ADJACENT_TURFS(src)
SSair.add_to_active(src)
if (light_power && light_range)
update_light()
+ var/turf/T = SSmapping.get_turf_above(src)
+ if(T)
+ T.multiz_turf_new(src, DOWN)
+ SEND_SIGNAL(T, COMSIG_TURF_MULTIZ_NEW, src, DOWN)
+ T = SSmapping.get_turf_below(src)
+ if(T)
+ T.multiz_turf_new(src, UP)
+ SEND_SIGNAL(T, COMSIG_TURF_MULTIZ_NEW, src, UP)
+
if (opacity)
has_opaque_atom = TRUE
@@ -76,13 +85,19 @@
return INITIALIZE_HINT_NORMAL
/turf/proc/Initalize_Atmos(times_fired)
- CalculateAdjacentTurfs()
+ CALCULATE_ADJACENT_TURFS(src)
/turf/Destroy(force)
. = QDEL_HINT_IWILLGC
if(!changing_turf)
stack_trace("Incorrect turf deletion")
changing_turf = FALSE
+ var/turf/T = SSmapping.get_turf_above(src)
+ if(T)
+ T.multiz_turf_del(src, DOWN)
+ T = SSmapping.get_turf_below(src)
+ if(T)
+ T.multiz_turf_del(src, UP)
if(force)
..()
//this will completely wipe turf state
@@ -105,6 +120,60 @@
return
user.Move_Pulled(src)
+/turf/proc/multiz_turf_del(turf/T, dir)
+
+/turf/proc/multiz_turf_new(turf/T, dir)
+
+//zPassIn doesn't necessarily pass an atom!
+//direction is direction of travel of air
+/turf/proc/zPassIn(atom/movable/A, direction, turf/source)
+ return FALSE
+
+//direction is direction of travel of air
+/turf/proc/zPassOut(atom/movable/A, direction, turf/destination)
+ return FALSE
+
+//direction is direction of travel of air
+/turf/proc/zAirIn(direction, turf/source)
+ return FALSE
+
+//direction is direction of travel of air
+/turf/proc/zAirOut(direction, turf/source)
+ return FALSE
+
+/turf/proc/zImpact(atom/movable/A, levels = 1, turf/prev_turf)
+ var/flags = NONE
+ var/mov_name = A.name
+ for(var/i in contents)
+ var/atom/thing = i
+ flags |= thing.intercept_zImpact(A, levels)
+ if(flags & FALL_STOP_INTERCEPTING)
+ break
+ if(prev_turf && !(flags & FALL_NO_MESSAGE))
+ prev_turf.visible_message("[mov_name] falls through [prev_turf]!")
+ if(flags & FALL_INTERCEPTED)
+ return
+ if(zFall(A, ++levels))
+ return FALSE
+ A.visible_message("[A] crashes into [src]!")
+ A.onZImpact(src, levels)
+ return TRUE
+
+/turf/proc/can_zFall(atom/movable/A, levels = 1, turf/target)
+ return zPassOut(A, DOWN, target) && target.zPassIn(A, DOWN, src)
+
+/turf/proc/zFall(atom/movable/A, levels = 1, force = FALSE)
+ var/turf/target = get_step_multiz(src, DOWN)
+ if(!target || (!isobj(A) && !ismob(A)))
+ return FALSE
+ if(!force && (!can_zFall(A, levels, target) || !A.can_zFall(src, levels, target, DOWN)))
+ return FALSE
+ A.zfalling = TRUE
+ A.forceMove(target)
+ A.zfalling = FALSE
+ target.zImpact(A, levels, src)
+ return TRUE
+
/turf/proc/handleRCL(obj/item/twohanded/rcl/C, mob/user)
if(C.loaded)
for(var/obj/structure/cable/LC in src)
@@ -196,6 +265,9 @@
if(O.obj_flags & FROZEN)
O.make_unfrozen()
+ if(!AM.zfalling)
+ zFall(AM)
+
/turf/proc/is_plasteel_floor()
return FALSE
diff --git a/code/modules/VR/vr_mob.dm b/code/modules/VR/vr_mob.dm
index 5c0cea9f60..5f2caffc76 100644
--- a/code/modules/VR/vr_mob.dm
+++ b/code/modules/VR/vr_mob.dm
@@ -40,5 +40,5 @@
/datum/action/quit_vr/Trigger() //this merely a trigger for /datum/component/virtual_reality
. = ..()
- if(!.)
+ if(.) //The component was not there to block the trigger.
Remove(owner)
diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm
index 72cbdc1409..7cda24d98b 100644
--- a/code/modules/VR/vr_sleeper.dm
+++ b/code/modules/VR/vr_sleeper.dm
@@ -52,18 +52,16 @@
flags_1 = NODECONSTRUCT_1
only_current_user_can_interact = TRUE
-/obj/machinery/vr_sleeper/hugbox/emag_act(mob/user)
- return SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT)
-
/obj/machinery/vr_sleeper/emag_act(mob/user)
. = ..()
if(!(obj_flags & EMAGGED))
return
- obj_flags |= EMAGGED
- you_die_in_the_game_you_die_for_real = TRUE
- sparks.start()
- addtimer(CALLBACK(src, .proc/emagNotify), 150)
- return TRUE
+ if(!only_current_user_can_interact)
+ obj_flags |= EMAGGED
+ you_die_in_the_game_you_die_for_real = TRUE
+ sparks.start()
+ addtimer(CALLBACK(src, .proc/emagNotify), 150)
+ return TRUE
/obj/machinery/vr_sleeper/update_icon()
icon_state = "[initial(icon_state)][state_open ? "-open" : ""]"
@@ -76,7 +74,7 @@
return ..()
/obj/machinery/vr_sleeper/MouseDrop_T(mob/target, mob/user)
- if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser())
+ if(user.lying || !iscarbon(target) || !Adjacent(target) || !user.canUseTopic(src, BE_CLOSE, TRUE, NO_TK))
return
close_machine(target)
@@ -91,26 +89,25 @@
return
switch(action)
if("vr_connect")
- var/mob/living/carbon/human/human_occupant = occupant
- if(human_occupant && human_occupant.mind && usr == occupant)
-
- to_chat(occupant, "Transferring to virtual reality...")
- if(vr_mob && (!istype(vr_mob) || !vr_mob.InCritical()) && !vr_mob.GetComponent(/datum/component/virtual_reality))
- vr_mob.AddComponent(/datum/component/virtual_reality, human_occupant, src, you_die_in_the_game_you_die_for_real)
- to_chat(vr_mob, "Transfer successful! You are now playing as [vr_mob] in VR!")
- else
+ var/mob/M = occupant
+ if(M?.mind && M == usr)
+ to_chat(M, "Transferring to virtual reality...")
+ var/datum/component/virtual_reality/VR
+ if(vr_mob)
+ VR = vr_mob.GetComponent(/datum/component/virtual_reality)
+ if(!(VR?.connect(M)))
if(allow_creating_vr_mobs)
- to_chat(occupant, "Virtual avatar not found, attempting to create one...")
+ to_chat(occupant, "Virtual avatar [vr_mob ? "corrupted" : "missing"], attempting to create one...")
var/obj/effect/landmark/vr_spawn/V = get_vr_spawnpoint()
var/turf/T = get_turf(V)
if(T)
- SStgui.close_user_uis(occupant, src)
new_player(occupant, T, V.vr_outfit)
- to_chat(vr_mob, "Transfer successful! You are now playing as [vr_mob] in VR!")
else
to_chat(occupant, "Virtual world misconfigured, aborting transfer")
else
to_chat(occupant, "The virtual world does not support the creation of new virtual avatars, aborting transfer")
+ else
+ to_chat(vr_mob, "Transfer successful! You are now playing as [vr_mob] in VR!")
. = TRUE
if("delete_avatar")
if(!occupant || usr == occupant)
@@ -157,17 +154,31 @@
for(var/obj/effect/landmark/vr_spawn/V in GLOB.landmarks_list)
GLOB.vr_spawnpoints[V.vr_category] = V
-/obj/machinery/vr_sleeper/proc/new_player(mob/living/carbon/human/H, location, datum/outfit/outfit, transfer = TRUE)
- if(!H)
+/obj/machinery/vr_sleeper/proc/new_player(mob/M, location, datum/outfit/outfit, transfer = TRUE)
+ if(!M)
return
cleanup_vr_mob()
vr_mob = new virtual_mob_type(location)
- if(vr_mob.build_virtual_character(H, outfit))
- var/mob/living/carbon/human/vr_H = vr_mob
- vr_H.updateappearance(TRUE, TRUE, TRUE)
- if(!transfer || !H.mind)
- return
- vr_mob.AddComponent(/datum/component/virtual_reality, H, src, you_die_in_the_game_you_die_for_real)
+ if(vr_mob.build_virtual_character(M, outfit) && iscarbon(vr_mob))
+ var/mob/living/carbon/C = vr_mob
+ C.updateappearance(TRUE, TRUE, TRUE)
+ var/datum/component/virtual_reality/VR = vr_mob.AddComponent(/datum/component/virtual_reality, you_die_in_the_game_you_die_for_real)
+ if(VR.connect(M))
+ RegisterSignal(VR, COMSIG_COMPONENT_UNREGISTER_PARENT, .proc/unset_vr_mob)
+ RegisterSignal(VR, COMSIG_COMPONENT_REGISTER_PARENT, .proc/set_vr_mob)
+ if(!only_current_user_can_interact)
+ VR.RegisterSignal(src, COMSIG_ATOM_EMAG_ACT, /datum/component/virtual_reality.proc/you_only_live_once)
+ VR.RegisterSignal(src, COMSIG_MACHINE_EJECT_OCCUPANT, /datum/component/virtual_reality.proc/revert_to_reality)
+ VR.RegisterSignal(src, COMSIG_PARENT_QDELETING, /datum/component/virtual_reality.proc/machine_destroyed)
+ to_chat(vr_mob, "Transfer successful! You are now playing as [vr_mob] in VR!")
+ else
+ to_chat(M, "Transfer failed! virtual reality data likely corrupted!")
+
+/obj/machinery/vr_sleeper/proc/unset_vr_mob(datum/component/virtual_reality/VR)
+ vr_mob = null
+
+/obj/machinery/vr_sleeper/proc/set_vr_mob(datum/component/virtual_reality/VR)
+ vr_mob = VR.parent
/obj/machinery/vr_sleeper/proc/cleanup_vr_mob()
if(vr_mob)
@@ -222,6 +233,7 @@
qdel(C)
for (var/A in corpse_party)
var/mob/M = A
- if(get_area(M) == vr_area && M.stat == DEAD)
+ if(M && M.stat == DEAD && get_area(M) == vr_area)
qdel(M)
+ corpse_party -= M
addtimer(CALLBACK(src, .proc/clean_up), 3 MINUTES)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 7fafca69f0..895f8c9f88 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -686,6 +686,20 @@
log_admin("[key_name(usr)] set the pre-game delay to [DisplayTimeText(newtime)].")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Delay Game Start") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+/datum/admins/proc/toggledynamicvote()
+ set category = "Server"
+ set desc="Switches between secret/extended and dynamic voting"
+ set name="Toggle Dynamic Vote"
+ var/prev_dynamic_voting = CONFIG_GET(flag/dynamic_voting)
+ CONFIG_SET(flag/dynamic_voting,!prev_dynamic_voting)
+ if (!prev_dynamic_voting)
+ to_chat(world, "Vote is now between extended and dynamic chaos.")
+ else
+ to_chat(world, "Vote is now between extended and secret.")
+ log_admin("[key_name(usr)] [prev_dynamic_voting ? "disabled" : "enabled"] dynamic voting.")
+ message_admins("[key_name_admin(usr)] toggled dynamic voting.")
+ SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Dynamic Voting", "[prev_dynamic_voting ? "Disabled" : "Enabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
/datum/admins/proc/unprison(mob/M in GLOB.mob_list)
set category = "Admin"
set name = "Unprison"
@@ -706,20 +720,44 @@
if(!check_rights(R_SPAWN))
return
+ var/turf/T = get_turf(usr)
var/chosen = pick_closest_path(object)
if(!chosen)
return
if(ispath(chosen, /turf))
- var/turf/T = get_turf(usr.loc)
T.ChangeTurf(chosen)
else
- var/atom/A = new chosen(usr.loc)
+ var/atom/A = new chosen(T)
A.flags_1 |= ADMIN_SPAWNED_1
log_admin("[key_name(usr)] spawned [chosen] at [AREACOORD(usr)]")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Spawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+/datum/admins/proc/podspawn_atom(object as text)
+ set category = "Debug"
+ set desc = "(atom path) Spawn an atom via supply drop"
+ set name = "Podspawn"
+
+ if(!check_rights(R_SPAWN))
+ return
+
+ var/chosen = pick_closest_path(object)
+ if(!chosen)
+ return
+ var/turf/T = get_turf(usr)
+
+ if(ispath(chosen, /turf))
+ T.ChangeTurf(chosen)
+ else
+ var/obj/structure/closet/supplypod/centcompod/pod = new()
+ var/atom/A = new chosen(pod)
+ A.flags_1 |= ADMIN_SPAWNED_1
+ new /obj/effect/abstract/DPtarget(T, pod)
+
+ log_admin("[key_name(usr)] pod-spawned [chosen] at [AREACOORD(usr)]")
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "Podspawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
/datum/admins/proc/spawn_cargo(object as text)
set category = "Debug"
set desc = "(atom path) Spawn a cargo crate"
@@ -861,7 +899,7 @@
/datum/admins/proc/dynamic_mode_options(mob/user)
var/dat = {"
Dynamic Mode Options
-
+
Common options
All these options can be changed midround.
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 626fa7f66f..c3ffd10174 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -1,7 +1,7 @@
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
//the procs are cause you can't put the comments in the GLOB var define
-GLOBAL_PROTECT(admin_verbs_default)
GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault())
+GLOBAL_PROTECT(admin_verbs_default)
/world/proc/AVerbsDefault()
return list(
/client/proc/deadmin, /*destroys our own admin datum so we can play as a regular player*/
@@ -13,8 +13,8 @@ GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault())
/client/proc/toggleprayers,
/client/proc/toggleadminhelpsound
)
-GLOBAL_PROTECT(admin_verbs_admin)
GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin())
+GLOBAL_PROTECT(admin_verbs_admin)
/world/proc/AVerbsAdmin()
return list(
/client/proc/invisimin, /*allows our mob to go invisible/visible*/
@@ -78,11 +78,10 @@ GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin())
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
/datum/admins/proc/open_borgopanel
)
-GLOBAL_PROTECT(admin_verbs_ban)
GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/DB_ban_panel, /client/proc/stickybanpanel))
-GLOBAL_PROTECT(admin_verbs_sounds)
+GLOBAL_PROTECT(admin_verbs_ban)
GLOBAL_LIST_INIT(admin_verbs_sounds, list(/client/proc/play_local_sound, /client/proc/play_sound, /client/proc/set_round_end_sound))
-GLOBAL_PROTECT(admin_verbs_fun)
+GLOBAL_PROTECT(admin_verbs_sounds)
GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/cmd_admin_dress,
/client/proc/cmd_admin_gib_self,
@@ -108,9 +107,9 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/admin_away,
/client/proc/roll_dices //CIT CHANGE - Adds dice verb
))
+GLOBAL_PROTECT(admin_verbs_fun)
+GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/podspawn_atom, /datum/admins/proc/spawn_cargo, /datum/admins/proc/spawn_objasmob, /client/proc/respawn_character))
GLOBAL_PROTECT(admin_verbs_spawn)
-GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/spawn_cargo, /datum/admins/proc/spawn_objasmob, /client/proc/respawn_character))
-GLOBAL_PROTECT(admin_verbs_server)
GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer())
/world/proc/AVerbsServer()
return list(
@@ -122,6 +121,7 @@ GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer())
/client/proc/everyone_random,
/datum/admins/proc/toggleAI,
/datum/admins/proc/toggleMulticam,
+ /datum/admins/proc/toggledynamicvote,
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
/client/proc/cmd_debug_del_all,
/client/proc/toggle_random_events,
@@ -129,7 +129,7 @@ GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer())
/client/proc/adminchangemap,
/client/proc/toggle_hub
)
-GLOBAL_PROTECT(admin_verbs_debug)
+GLOBAL_PROTECT(admin_verbs_server)
GLOBAL_LIST_INIT(admin_verbs_debug, world.AVerbsDebug())
/world/proc/AVerbsDebug()
return list(
@@ -171,15 +171,15 @@ GLOBAL_LIST_INIT(admin_verbs_debug, world.AVerbsDebug())
/datum/admins/proc/create_or_modify_area,
/client/proc/generate_wikichem_list //DO NOT PRESS UNLESS YOU WANT SUPERLAG
)
-GLOBAL_PROTECT(admin_verbs_possess)
+GLOBAL_PROTECT(admin_verbs_debug)
GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, /proc/release))
-GLOBAL_PROTECT(admin_verbs_permissions)
+GLOBAL_PROTECT(admin_verbs_possess)
GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions))
-GLOBAL_PROTECT(admin_verbs_poll)
+GLOBAL_PROTECT(admin_verbs_permissions)
GLOBAL_LIST_INIT(admin_verbs_poll, list(/client/proc/create_poll))
//verbs which can be hidden - needs work
-GLOBAL_PROTECT(admin_verbs_hideable)
+GLOBAL_PROTECT(admin_verbs_poll)
GLOBAL_LIST_INIT(admin_verbs_hideable, list(
/client/proc/set_ooc,
/client/proc/reset_ooc,
@@ -247,6 +247,7 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list(
/client/proc/cmd_admin_man_up, //CIT CHANGE - adds man up verb
/client/proc/cmd_admin_man_up_global //CIT CHANGE - ditto
))
+GLOBAL_PROTECT(admin_verbs_hideable)
/client/proc/add_admin_verbs()
if(holder)
diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm
index 028af313b0..702e2071bd 100644
--- a/code/modules/admin/sound_emitter.dm
+++ b/code/modules/admin/sound_emitter.dm
@@ -34,15 +34,15 @@
return
/obj/effect/sound_emitter/examine(mob/user)
- ..()
+ . = ..()
if(!isobserver(user))
return
- to_chat(user, "Sound File: [sound_file ? sound_file : "None chosen"]")
- to_chat(user, "Mode: [motus_operandi]")
- to_chat(user, "Range: [emitter_range]")
- to_chat(user, "Sound is playing at [sound_volume]% volume.")
+ . += "Sound File: [sound_file ? sound_file : "None chosen"]"
+ . += "Mode: [motus_operandi]"
+ . += "Range: [emitter_range]"
+ . += "Sound is playing at [sound_volume]% volume."
if(user.client.holder)
- to_chat(user, "Alt-click it to quickly activate it!")
+ . += "Alt-click it to quickly activate it!"
//ATTACK GHOST IGNORING PARENT RETURN VALUE
/obj/effect/sound_emitter/attack_ghost(mob/user)
@@ -52,9 +52,11 @@
edit_emitter(user)
/obj/effect/sound_emitter/AltClick(mob/user)
+ . = ..()
if(check_rights_for(user.client, R_SOUNDS))
activate(user)
to_chat(user, "Sound emitter activated.")
+ return TRUE
/obj/effect/sound_emitter/proc/edit_emitter(mob/user)
var/dat = ""
diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm
index 72ec3da8f9..7b59e72403 100644
--- a/code/modules/admin/sql_message_system.dm
+++ b/code/modules/admin/sql_message_system.dm
@@ -504,7 +504,7 @@
output += ruler
var/datum/browser/browser = new(usr, "Note panel", "Manage player notes", 1000, 500)
var/datum/asset/notes_assets = get_asset_datum(/datum/asset/simple/notes)
- notes_assets.send(src)
+ notes_assets.send(usr.client)
browser.set_content(jointext(output, ""))
browser.open()
@@ -556,7 +556,7 @@
/proc/convert_notes_sql(ckey)
if(!fexists(NOTESFILE))
return
-
+
var/savefile/notesfile = new(NOTESFILE)
if(!notesfile)
log_game("Error: Cannot access [NOTESFILE]")
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index b0b9190556..5b751ffe30 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1347,7 +1347,7 @@
else if(href_list["f_secret"])
return HandleFSecret()
-
+
else if(href_list["f_dynamic_roundstart"])
if(!check_rights(R_ADMIN))
return
@@ -1449,9 +1449,7 @@
if(GLOB.master_mode != "dynamic")
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
- var/new_centre = input(usr,"Change the centre of the dynamic mode threat curve. A negative value will give a more peaceful round ; a positive value, a round with higher threat. Any number between -5 and +5 is allowed.", "Change curve centre", null) as num
- if (new_centre < -5 || new_centre > 5)
- return alert(usr, "Only values between -5 and +5 are allowed.", null, null, null, null)
+ var/new_centre = input(usr,"Change the centre of the dynamic mode threat curve. A negative value will give a more peaceful round ; a positive value, a round with higher threat. Any number is allowed. This is adjusted by dynamic voting.", "Change curve centre", null) as num
log_admin("[key_name(usr)] changed the distribution curve center to [new_centre].")
message_admins("[key_name(usr)] changed the distribution curve center to [new_centre]", 1)
@@ -1593,7 +1591,7 @@
GLOB.dynamic_stacking_limit = input(usr,"Change the threat limit at which round-endings rulesets will start to stack.", "Change stacking limit", null) as num
log_admin("[key_name(usr)] set 'stacking_limit' to [GLOB.dynamic_stacking_limit].")
message_admins("[key_name(usr)] set 'stacking_limit' to [GLOB.dynamic_stacking_limit].")
- dynamic_mode_options(usr)
+ dynamic_mode_options(usr)
else if(href_list["f_dynamic_high_pop_limit"])
if(!check_rights(R_ADMIN))
@@ -1612,7 +1610,7 @@
log_admin("[key_name(usr)] set 'high_pop_limit' to [GLOB.dynamic_high_pop_limit].")
message_admins("[key_name(usr)] set 'high_pop_limit' to [GLOB.dynamic_high_pop_limit].")
- dynamic_mode_options(usr)
+ dynamic_mode_options(usr)
else if(href_list["f_dynamic_forced_threat"])
if(!check_rights(R_ADMIN))
@@ -1631,7 +1629,7 @@
log_admin("[key_name(usr)] set 'forced_threat_level' to [GLOB.dynamic_forced_threat_level].")
message_admins("[key_name(usr)] set 'forced_threat_level' to [GLOB.dynamic_forced_threat_level].")
- dynamic_mode_options(usr)
+ dynamic_mode_options(usr)
else if(href_list["c_mode2"])
if(!check_rights(R_ADMIN|R_SERVER))
@@ -2357,7 +2355,7 @@
var/atom/target //Where the object will be spawned
var/where = href_list["object_where"]
- if (!( where in list("onfloor","inhand","inmarked") ))
+ if (!( where in list("onfloor","frompod","inhand","inmarked") ))
where = "onfloor"
@@ -2368,7 +2366,7 @@
where = "onfloor"
target = usr
- if("onfloor")
+ if("onfloor", "frompod")
switch(href_list["offset_type"])
if ("absolute")
target = locate(0 + X,0 + Y,0 + Z)
@@ -2384,7 +2382,10 @@
else
target = marked_datum
+ var/obj/structure/closet/supplypod/centcompod/pod
if(target)
+ if(where == "frompod")
+ pod = new()
for (var/path in paths)
for (var/i = 0; i < number; i++)
if(path in typesof(/turf))
@@ -2393,7 +2394,11 @@
if(N && obj_name)
N.name = obj_name
else
- var/atom/O = new path(target)
+ var/atom/O
+ if(where == "frompod")
+ O = new path(pod)
+ else
+ O = new path(target)
if(!QDELETED(O))
O.flags_1 |= ADMIN_SPAWNED_1
if(obj_dir)
@@ -2413,6 +2418,8 @@
R.module.add_module(I, TRUE, TRUE)
R.activate_module(I)
+ if(pod)
+ new /obj/effect/abstract/DPtarget(target, pod)
if (number == 1)
log_admin("[key_name(usr)] created a [english_list(paths)]")
@@ -2442,7 +2449,7 @@
return
src.admincaster_feed_channel.channel_name = stripped_input(usr, "Provide a Feed Channel Name.", "Network Channel Handler", "")
while (findtext(src.admincaster_feed_channel.channel_name," ") == 1)
- src.admincaster_feed_channel.channel_name = copytext(src.admincaster_feed_channel.channel_name,2,lentext(src.admincaster_feed_channel.channel_name)+1)
+ src.admincaster_feed_channel.channel_name = copytext(src.admincaster_feed_channel.channel_name,2,length(src.admincaster_feed_channel.channel_name)+1)
src.access_news_network()
else if(href_list["ac_set_channel_lock"])
@@ -2484,7 +2491,7 @@
return
src.admincaster_feed_message.body = adminscrub(input(usr, "Write your Feed story.", "Network Channel Handler", ""))
while (findtext(src.admincaster_feed_message.returnBody(-1)," ") == 1)
- src.admincaster_feed_message.body = copytext(src.admincaster_feed_message.returnBody(-1),2,lentext(src.admincaster_feed_message.returnBody(-1))+1)
+ src.admincaster_feed_message.body = copytext(src.admincaster_feed_message.returnBody(-1),2,length(src.admincaster_feed_message.returnBody(-1))+1)
src.access_news_network()
else if(href_list["ac_submit_new_message"])
@@ -2545,7 +2552,7 @@
return
src.admincaster_wanted_message.criminal = adminscrub(input(usr, "Provide the name of the Wanted person.", "Network Security Handler", ""))
while(findtext(src.admincaster_wanted_message.criminal," ") == 1)
- src.admincaster_wanted_message.criminal = copytext(admincaster_wanted_message.criminal,2,lentext(admincaster_wanted_message.criminal)+1)
+ src.admincaster_wanted_message.criminal = copytext(admincaster_wanted_message.criminal,2,length(admincaster_wanted_message.criminal)+1)
src.access_news_network()
else if(href_list["ac_set_wanted_desc"])
@@ -2553,7 +2560,7 @@
return
src.admincaster_wanted_message.body = adminscrub(input(usr, "Provide the a description of the Wanted person and any other details you deem important.", "Network Security Handler", ""))
while (findtext(src.admincaster_wanted_message.body," ") == 1)
- src.admincaster_wanted_message.body = copytext(src.admincaster_wanted_message.body,2,lentext(src.admincaster_wanted_message.body)+1)
+ src.admincaster_wanted_message.body = copytext(src.admincaster_wanted_message.body,2,length(src.admincaster_wanted_message.body)+1)
src.access_news_network()
else if(href_list["ac_submit_wanted"])
diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm
index b19b2a91d8..072fbaa123 100644
--- a/code/modules/admin/verbs/diagnostics.dm
+++ b/code/modules/admin/verbs/diagnostics.dm
@@ -61,7 +61,7 @@
var/output = "Radio Report
"
for (var/fq in SSradio.frequencies)
output += "Freq: [fq]
"
- var/list/datum/radio_frequency/fqs = SSradio.frequencies[fq]
+ var/datum/radio_frequency/fqs = SSradio.frequencies[fq]
if (!fqs)
output += " ERROR
"
continue
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index 8559a3235e..2b8d365e15 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -19,7 +19,6 @@
//- Identify how hard it is to break into the area and where the weak points are
//- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels.
-GLOBAL_PROTECT(admin_verbs_debug_mapping)
GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list(
/client/proc/camera_view, //-errorage
/client/proc/sec_camera_report, //-errorage
@@ -50,6 +49,7 @@ GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list(
/client/proc/debug_z_levels,
/client/proc/place_ruin
))
+GLOBAL_PROTECT(admin_verbs_debug_mapping)
/obj/effect/debugging/mapfix_marker
name = "map fix marker"
diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm
index e70ea1c1b3..644b2729e0 100644
--- a/code/modules/admin/verbs/modifyvariables.dm
+++ b/code/modules/admin/verbs/modifyvariables.dm
@@ -307,11 +307,11 @@ GLOBAL_PROTECT(VVpixelmovement)
// the type with the base type removed from the begaining
var/fancytype = types[D.type]
if (findtext(fancytype, types[type]))
- fancytype = copytext(fancytype, lentext(types[type])+1)
- var/shorttype = copytext("[D.type]", lentext("[type]")+1)
- if (lentext(shorttype) > lentext(fancytype))
+ fancytype = copytext(fancytype, length(types[type])+1)
+ var/shorttype = copytext("[D.type]", length("[type]")+1)
+ if (length(shorttype) > length(fancytype))
shorttype = fancytype
- if (!lentext(shorttype))
+ if (!length(shorttype))
shorttype = "/"
.["[D]([shorttype])[REF(D)]#[i]"] = D
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index d7dd8db08d..f97822a043 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -949,7 +949,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
| Uniform: |
- [uniform_select]
+ [uniform_select]
|
@@ -1249,7 +1249,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
if(!check_rights(R_ADMIN) || !check_rights(R_FUN))
return
- var/list/punishment_list = list(ADMIN_PUNISHMENT_PIE, ADMIN_PUNISHMENT_FIREBALL, ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_BSA, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_SUPPLYPOD, ADMIN_PUNISHMENT_MAZING, ADMIN_PUNISHMENT_ROD)
+ var/list/punishment_list = list(ADMIN_PUNISHMENT_PIE, ADMIN_PUNISHMENT_FIREBALL, ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_BSA, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_SUPPLYPOD_QUICK, ADMIN_PUNISHMENT_SUPPLYPOD, ADMIN_PUNISHMENT_MAZING, ADMIN_PUNISHMENT_ROD)
var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list
@@ -1277,6 +1277,22 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
var/turf/startT = spaceDebrisStartLoc(startside, T.z)
var/turf/endT = spaceDebrisFinishLoc(startside, T.z)
new /obj/effect/immovablerod(startT, endT,target)
+ if(ADMIN_PUNISHMENT_SUPPLYPOD_QUICK)
+ var/target_path = input(usr,"Enter typepath of an atom you'd like to send with the pod (type \"empty\" to send an empty pod):" ,"Typepath","/obj/item/reagent_containers/food/snacks/grown/harebell") as null|text
+ var/obj/structure/closet/supplypod/centcompod/pod = new()
+ pod.damage = 40
+ pod.explosionSize = list(0,0,0,2)
+ pod.effectStun = TRUE
+ if (isnull(target_path)) //The user pressed "Cancel"
+ return
+ if (target_path != "empty")//if you didn't type empty, we want to load the pod with a delivery
+ var/delivery = text2path(target_path)
+ if(!ispath(delivery))
+ delivery = pick_closest_path(target_path)
+ if(!delivery)
+ alert("ERROR: Incorrect / improper path given.")
+ new delivery(pod)
+ new /obj/effect/abstract/DPtarget(get_turf(target), pod)
if(ADMIN_PUNISHMENT_SUPPLYPOD)
var/datum/centcom_podlauncher/plaunch = new(usr)
if(!holder)
@@ -1289,6 +1305,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
plaunch.temp_pod.explosionSize = list(0,0,0,2)
plaunch.temp_pod.effectStun = TRUE
plaunch.ui_interact(usr)
+ return //We return here because punish_log() is handled by the centcom_podlauncher datum
if(ADMIN_PUNISHMENT_MAZING)
if(!puzzle_imprison(target))
@@ -1298,11 +1315,13 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
var/obj/item/reagent_containers/food/snacks/pie/cream/nostun/creamy = new(get_turf(target))
creamy.splat(target)
- var/msg = "[key_name_admin(usr)] punished [key_name_admin(target)] with [punishment]."
- message_admins(msg)
- admin_ticket_log(target, msg)
- log_admin("[key_name(usr)] punished [key_name(target)] with [punishment].")
+ punish_log(target, punishment)
+/client/proc/punish_log(var/whom, var/punishment)
+ var/msg = "[key_name_admin(usr)] punished [key_name_admin(whom)] with [punishment]."
+ message_admins(msg)
+ admin_ticket_log(whom, msg)
+ log_admin("[key_name(usr)] punished [key_name(whom)] with [punishment].")
/client/proc/trigger_centcom_recall()
if(!check_rights(R_ADMIN))
diff --git a/code/modules/admin/verbs/spawnobjasmob.dm b/code/modules/admin/verbs/spawnobjasmob.dm
index 621e6c3618..1d3cf95222 100644
--- a/code/modules/admin/verbs/spawnobjasmob.dm
+++ b/code/modules/admin/verbs/spawnobjasmob.dm
@@ -16,10 +16,10 @@
var/obj/chosen_obj = text2path(chosen)
var/list/settings = list(
- "mainsettings" = list(
- "name" = list("desc" = "Name", "type" = "string", "value" = "Bob"),
+ "mainsettings" = list(
+ "name" = list("desc" = "Name", "type" = "string", "value" = "Bob"),
"maxhealth" = list("desc" = "Max. health", "type" = "number", "value" = 100),
- "access" = list("desc" = "Access ID", "type" = "datum", "path" = "/obj/item/card/id", "value" = "Default"),
+ "access" = list("desc" = "Access ID", "type" = "datum", "path" = "/obj/item/card/id", "value" = "Default"),
"objtype" = list("desc" = "Base obj type", "type" = "datum", "path" = "/obj", "value" = "[chosen]"),
"googlyeyes" = list("desc" = "Googly eyes", "type" = "boolean", "value" = "No"),
"disableai" = list("desc" = "Disable AI", "type" = "boolean", "value" = "Yes"),
@@ -27,7 +27,7 @@
"dropitem" = list("desc" = "Drop obj on death", "type" = "boolean", "value" = "Yes"),
"mobtype" = list("desc" = "Base mob type", "type" = "datum", "path" = "/mob/living/simple_animal/hostile/mimic/copy", "value" = "/mob/living/simple_animal/hostile/mimic/copy"),
"ckey" = list("desc" = "ckey", "type" = "ckey", "value" = "none"),
- )
+ )
)
var/list/prefreturn = presentpreflikepicker(usr,"Customize mob", "Customize mob", Button1="Ok", width = 450, StealFocus = 1,Timeout = 0, settings=settings)
diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm
index 42719e28bd..1894d8c7ae 100644
--- a/code/modules/antagonists/_common/antag_datum.dm
+++ b/code/modules/antagonists/_common/antag_datum.dm
@@ -96,7 +96,6 @@ GLOBAL_LIST_EMPTY(antagonists)
LAZYREMOVE(owner.antag_datums, src)
if(!silent && owner.current)
farewell()
- owner.objectives -= objectives
var/datum/team/team = get_team()
if(team)
team.remove_member(owner)
@@ -132,14 +131,14 @@ GLOBAL_LIST_EMPTY(antagonists)
report += printplayer(owner)
var/objectives_complete = TRUE
- if(owner.objectives.len)
- report += printobjectives(owner)
- for(var/datum/objective/objective in owner.objectives)
+ if(objectives.len)
+ report += printobjectives(objectives)
+ for(var/datum/objective/objective in objectives)
if(!objective.check_completion())
objectives_complete = FALSE
break
- if(owner.objectives.len == 0 || objectives_complete)
+ if(objectives.len == 0 || objectives_complete)
report += "The [name] was successful!"
else
report += "The [name] has failed!"
@@ -216,25 +215,6 @@ GLOBAL_LIST_EMPTY(antagonists)
return
antag_memory = new_memo
-//This datum will autofill the name with special_role
-//Used as placeholder for minor antagonists, please create proper datums for these
-/datum/antagonist/auto_custom
- show_in_antagpanel = FALSE
- antagpanel_category = "Other"
- show_name_in_check_antagonists = TRUE
-
-/datum/antagonist/auto_custom/on_gain()
- ..()
- name = owner.special_role
- //Add all objectives not already owned by other datums to this one.
- var/list/already_registered_objectives = list()
- for(var/datum/antagonist/A in owner.antag_datums)
- if(A == src)
- continue
- else
- already_registered_objectives |= A.objectives
- objectives = owner.objectives - already_registered_objectives
-
//This one is created by admin tools for custom objectives
/datum/antagonist/custom
antagpanel_category = "Custom"
diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm
index c1e6ff826f..c8fbfde4d2 100644
--- a/code/modules/antagonists/_common/antag_spawner.dm
+++ b/code/modules/antagonists/_common/antag_spawner.dm
@@ -37,6 +37,8 @@
dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
"
dat += "Robeless
"
dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
"
+ dat += "Martial Artist
"
+ dat += "Your apprentice is training in ancient martial arts. They know the Plasmafist and Nuclear Fist.
"
user << browse(dat, "window=radio")
onclose(user, "radio")
return
@@ -56,7 +58,7 @@
if(used)
to_chat(H, "You already used this contract!")
return
- var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src)
+ var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src, ignore_category = POLL_IGNORE_WIZARD)
if(LAZYLEN(candidates))
if(QDELETED(src))
return
@@ -182,6 +184,10 @@
name = "syndicate medical teleporter"
borg_to_spawn = "Medical"
+/obj/item/antag_spawner/nuke_ops/borg_tele/saboteur
+ name = "syndicate saboteur teleporter"
+ borg_to_spawn = "Saboteur"
+
/obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T, kind, datum/mind/user)
var/mob/living/silicon/robot/R
var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE)
@@ -191,6 +197,8 @@
switch(borg_to_spawn)
if("Medical")
R = new /mob/living/silicon/robot/modules/syndicate/medical(T)
+ if("Saboteur")
+ R = new /mob/living/silicon/robot/modules/syndicate/saboteur(T)
else
R = new /mob/living/silicon/robot/modules/syndicate(T) //Assault borg by default
@@ -235,7 +243,7 @@
return
if(used)
return
- var/list/candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, src)
+ var/list/candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, src, ignore_category = POLL_IGNORE_DEMON)
if(LAZYLEN(candidates))
if(used || QDELETED(src))
return
diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm
index e8d30e8dbe..92504641a9 100644
--- a/code/modules/antagonists/abductor/abductor.dm
+++ b/code/modules/antagonists/abductor/abductor.dm
@@ -65,6 +65,8 @@
//Equip
var/mob/living/carbon/human/H = owner.current
H.set_species(/datum/species/abductor)
+ var/obj/item/organ/tongue/abductor/T = H.getorganslot(ORGAN_SLOT_TONGUE)
+ T.mothership = "[team.name]"
H.real_name = "[team.name] [sub_role]"
H.equipOutfit(outfit)
diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
index c1088cbb3d..433f52306b 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
@@ -17,7 +17,7 @@
actions_types = list(/datum/action/item_action/hands_free/activate)
allowed = list(
/obj/item/abductor,
- /obj/item/abductor_baton,
+ /obj/item/abductor/baton,
/obj/item/melee/baton,
/obj/item/gun/energy,
/obj/item/restraints/handcuffs
@@ -57,7 +57,7 @@
/obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user, datum/action/A)
if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to activate the vest if he's actually wearing it.
- return 1
+ return TRUE
/obj/item/clothing/suit/armor/abductor/vest/proc/SetDisguise(datum/icon_snapshot/entry)
disguise = entry
@@ -89,11 +89,9 @@
/obj/item/clothing/suit/armor/abductor/vest/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
DeactivateStealth()
- return 0
/obj/item/clothing/suit/armor/abductor/vest/IsReflect()
DeactivateStealth()
- return 0
/obj/item/clothing/suit/armor/abductor/vest/ui_action_click()
switch(mode)
@@ -111,7 +109,10 @@
to_chat(loc, "Combat injection is still recharging.")
return
var/mob/living/carbon/human/M = loc
- M.do_adrenaline(150, FALSE, 0, 0, TRUE, list("inaprovaline" = 3, "synaptizine" = 10, "omnizine" = 10), "You feel a sudden surge of energy!")
+ M.adjustStaminaLoss(-75)
+ M.SetUnconscious(0)
+ M.SetStun(0)
+ M.SetKnockdown(0)
combat_cooldown = 0
START_PROCESSING(SSobj, src)
@@ -131,9 +132,11 @@
/obj/item/abductor
icon = 'icons/obj/abductor.dmi'
+ lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
/obj/item/abductor/proc/AbductorCheck(mob/user)
- if(HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING))
+ if (HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING))
return TRUE
if (istype(user) && user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING))
return TRUE
@@ -158,8 +161,6 @@
desc = "A dual-mode tool for retrieving specimens and scanning appearances. Scanning can be done through cameras."
icon_state = "gizmo_scan"
item_state = "silencer"
- lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
var/mode = GIZMO_SCAN
var/mob/living/marked = null
var/obj/machinery/abductor/console/console
@@ -218,12 +219,9 @@
if(marked == target)
to_chat(user, "This specimen is already marked!")
return
- if(ishuman(target))
- if(isabductor(target))
- marked = target
- to_chat(user, "You mark [target] for future retrieval.")
- else
- prepare(target,user)
+ if(isabductor(target) || iscow(target))
+ marked = target
+ to_chat(user, "You mark [target] for future retrieval.")
else
prepare(target,user)
@@ -247,8 +245,6 @@
desc = "A compact device used to shut down communications equipment."
icon_state = "silencer"
item_state = "gizmo"
- lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
/obj/item/abductor/silencer/attack(mob/living/M, mob/user)
if(!AbductorCheck(user))
@@ -292,8 +288,6 @@
or to send a command to a test subject with a charged gland."
icon_state = "mind_device_message"
item_state = "silencer"
- lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
var/mode = MIND_DEVICE_MESSAGE
/obj/item/abductor/mind_device/attack_self(mob/user)
@@ -389,27 +383,37 @@
item_state = "alienpistol"
trigger_guard = TRIGGER_GUARD_ALLOW_ALL
+/obj/item/gun/energy/shrink_ray
+ name = "shrink ray blaster"
+ desc = "This is a piece of frightening alien tech that enhances the magnetic pull of atoms in a localized space to temporarily make an object shrink. \
+ That or it's just space magic. Either way, it shrinks stuff."
+ ammo_type = list(/obj/item/ammo_casing/energy/shrink)
+ item_state = "shrink_ray"
+ icon_state = "shrink_ray"
+ fire_delay = 30
+ selfcharge = 1//shot costs 200 energy, has a max capacity of 1000 for 5 shots. self charge returns 25 energy every couple ticks, so about 1 shot charged every 12~ seconds
+ trigger_guard = TRIGGER_GUARD_ALLOW_ALL// variable-size trigger, get it? (abductors need this to be set so the gun is usable for them)
+
/obj/item/paper/guides/antag/abductor
name = "Dissection Guide"
icon_state = "alienpaper_words"
info = {"Dissection for Dummies
-
-
- 1.Acquire fresh specimen.
- 2.Put the specimen on operating table.
- 3.Apply surgical drapes, preparing for experimental dissection.
- 4.Apply scalpel to specimen's torso.
- 5.Clamp bleeders on specimen's torso with a hemostat.
- 6.Retract skin of specimen's torso with a retractor.
- 7.Apply scalpel again to specimen's torso.
- 8.Search through the specimen's torso with your hands to remove any superfluous organs.
- 9.Insert replacement gland (Retrieve one from gland storage).
- 10.Consider dressing the specimen back to not disturb the habitat.
- 11.Put the specimen in the experiment machinery.
- 12.Choose one of the machine options. The target will be analyzed and teleported to the selected drop-off point.
- 13.You will receive one supply credit, and the subject will be counted towards your quota.
-
-Congratulations! You are now trained for invasive xenobiology research!"}
+
+ 1.Acquire fresh specimen.
+ 2.Put the specimen on operating table.
+ 3.Apply surgical drapes, preparing for experimental dissection.
+ 4.Apply scalpel to specimen's torso.
+ 5.Clamp bleeders on specimen's torso with a hemostat.
+ 6.Retract skin of specimen's torso with a retractor.
+ 7.Apply scalpel again to specimen's torso.
+ 8.Search through the specimen's torso with your hands to remove any superfluous organs.
+ 9.Insert replacement gland (Retrieve one from gland storage).
+ 10.Consider dressing the specimen back to not disturb the habitat.
+ 11.Put the specimen in the experiment machinery.
+ 12.Choose one of the machine options. The target will be analyzed and teleported to the selected drop-off point.
+ 13.You will receive one supply credit, and the subject will be counted towards your quota.
+
+ Congratulations! You are now trained for invasive xenobiology research!"}
/obj/item/paper/guides/antag/abductor/update_icon()
return
@@ -423,21 +427,18 @@ Congratulations! You are now trained for invasive xenobiology research!"}
#define BATON_PROBE 3
#define BATON_MODES 4
-/obj/item/abductor_baton
+/obj/item/abductor/baton
name = "advanced baton"
desc = "A quad-mode baton used for incapacitation and restraining of specimens."
var/mode = BATON_STUN
- icon = 'icons/obj/abductor.dmi'
icon_state = "wonderprodStun"
item_state = "wonderprod"
- lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
slot_flags = ITEM_SLOT_BELT
force = 7
w_class = WEIGHT_CLASS_NORMAL
actions_types = list(/datum/action/item_action/toggle_mode)
-/obj/item/abductor_baton/proc/toggle(mob/living/user=usr)
+/obj/item/abductor/baton/proc/toggle(mob/living/user=usr)
mode = (mode+1)%BATON_MODES
var/txt
switch(mode)
@@ -453,7 +454,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
to_chat(usr, "You switch the baton to [txt] mode.")
update_icon()
-/obj/item/abductor_baton/update_icon()
+/obj/item/abductor/baton/update_icon()
switch(mode)
if(BATON_STUN)
icon_state = "wonderprodStun"
@@ -468,8 +469,8 @@ Congratulations! You are now trained for invasive xenobiology research!"}
icon_state = "wonderprodProbe"
item_state = "wonderprodProbe"
-/obj/item/abductor_baton/attack(mob/target, mob/living/user)
- if(!isabductor(user))
+/obj/item/abductor/baton/attack(mob/target, mob/living/user)
+ if(!AbductorCheck(user))
return
if(iscyborg(target))
@@ -486,8 +487,8 @@ Congratulations! You are now trained for invasive xenobiology research!"}
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
- playsound(L, 'sound/weapons/genhit.ogg', 50, 1)
- return 0
+ playsound(H, 'sound/weapons/genhit.ogg', 50, TRUE)
+ return FALSE
switch (mode)
if(BATON_STUN)
@@ -499,10 +500,10 @@ Congratulations! You are now trained for invasive xenobiology research!"}
if(BATON_PROBE)
ProbeAttack(L,user)
-/obj/item/abductor_baton/attack_self(mob/living/user)
+/obj/item/abductor/baton/attack_self(mob/living/user)
toggle(user)
-/obj/item/abductor_baton/proc/StunAttack(mob/living/L,mob/living/user)
+/obj/item/abductor/baton/proc/StunAttack(mob/living/L,mob/living/user)
L.lastattacker = user.real_name
L.lastattackerckey = user.ckey
@@ -514,7 +515,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
L.visible_message("[user] has stunned [L] with [src]!", \
"[user] has stunned you with [src]!")
- playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
+ playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
if(ishuman(L))
var/mob/living/carbon/human/H = L
@@ -522,7 +523,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
log_combat(user, L, "stunned")
-/obj/item/abductor_baton/proc/SleepAttack(mob/living/L,mob/living/user)
+/obj/item/abductor/baton/proc/SleepAttack(mob/living/L,mob/living/user)
if(L.incapacitated(TRUE, TRUE))
if(L.anti_magic_check(FALSE, FALSE, TRUE, 0))
to_chat(user, "The specimen's tinfoil protection is interfering with the sleep inducement!")
@@ -532,7 +533,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
return
L.visible_message("[user] has induced sleep in [L] with [src]!", \
"You suddenly feel very drowsy!")
- playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
+ playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
L.Sleeping(1200)
log_combat(user, L, "put to sleep")
else
@@ -546,13 +547,13 @@ Congratulations! You are now trained for invasive xenobiology research!"}
L.visible_message("[user] tried to induce sleep in [L] with [src]!", \
"You suddenly feel drowsy!")
-/obj/item/abductor_baton/proc/CuffAttack(mob/living/L,mob/living/user)
+/obj/item/abductor/baton/proc/CuffAttack(mob/living/L,mob/living/user)
if(!iscarbon(L))
return
var/mob/living/carbon/C = L
if(!C.handcuffed)
if(C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore())
- playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
+ playsound(src, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2)
C.visible_message("[user] begins restraining [C] with [src]!", \
"[user] begins shaping an energy field around your hands!")
if(do_mob(user, C, 30) && (C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore()))
@@ -566,7 +567,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
else
to_chat(user, "[C] doesn't have two hands...")
-/obj/item/abductor_baton/proc/ProbeAttack(mob/living/L,mob/living/user)
+/obj/item/abductor/baton/proc/ProbeAttack(mob/living/L,mob/living/user)
L.visible_message("[user] probes [L] with [src]!", \
"[user] probes you!")
@@ -611,17 +612,17 @@ Congratulations! You are now trained for invasive xenobiology research!"}
S.start()
. = ..()
-/obj/item/abductor_baton/examine(mob/user)
- ..()
+/obj/item/abductor/baton/examine(mob/user)
+ . = ..()
switch(mode)
if(BATON_STUN)
- to_chat(user, "The baton is in stun mode.")
+ . += "The baton is in stun mode."
if(BATON_SLEEP)
- to_chat(user, "The baton is in sleep inducement mode.")
+ . += "The baton is in sleep inducement mode."
if(BATON_CUFF)
- to_chat(user, "The baton is in restraining mode.")
+ . += "The baton is in restraining mode."
if(BATON_PROBE)
- to_chat(user, "The baton is in probing mode.")
+ . += "The baton is in probing mode."
/obj/item/radio/headset/abductor
name = "alien headset"
@@ -640,10 +641,44 @@ Congratulations! You are now trained for invasive xenobiology research!"}
AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
/obj/item/radio/headset/abductor/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/screwdriver))
+ if(W.tool_behaviour == TOOL_SCREWDRIVER)
return // Stops humans from disassembling abductor headsets.
return ..()
+/obj/item/abductor_machine_beacon
+ name = "machine beacon"
+ desc = "A beacon designed to instantly tele-construct abductor machinery."
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "beacon"
+ w_class = WEIGHT_CLASS_TINY
+ var/obj/machinery/spawned_machine
+
+/obj/item/abductor_machine_beacon/attack_self(mob/user)
+ ..()
+ user.visible_message("[user] places down [src] and activates it.", "You place down [src] and activate it.")
+ user.dropItemToGround(src)
+ playsound(src, 'sound/machines/terminal_alert.ogg', 50)
+ addtimer(CALLBACK(src, .proc/try_spawn_machine), 30)
+
+/obj/item/abductor_machine_beacon/proc/try_spawn_machine()
+ var/viable = FALSE
+ if(isfloorturf(loc))
+ var/turf/T = loc
+ viable = TRUE
+ for(var/obj/thing in T.contents)
+ if(thing.density || ismachinery(thing) || isstructure(thing))
+ viable = FALSE
+ if(viable)
+ playsound(src, 'sound/effects/phasein.ogg', 50, TRUE)
+ var/new_machine = new spawned_machine(loc)
+ visible_message("[new_machine] warps on top of the beacon!")
+ qdel(src)
+ else
+ playsound(src, 'sound/machines/buzz-two.ogg', 50)
+
+/obj/item/abductor_machine_beacon/chem_dispenser
+ name = "beacon - Reagent Synthesizer"
+ spawned_machine = /obj/machinery/chem_dispenser/abductor
/obj/item/scalpel/alien
name = "alien scalpel"
@@ -707,11 +742,11 @@ Congratulations! You are now trained for invasive xenobiology research!"}
framestackamount = 1
/obj/structure/table_frame/abductor/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/wrench))
+ if(I.tool_behaviour == TOOL_WRENCH)
to_chat(user, "You start disassembling [src]...")
I.play_tool_sound(src)
if(I.use_tool(src, user, 30))
- playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
+ playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE)
for(var/i = 1, i <= framestackamount, i++)
new framestack(get_turf(src))
qdel(src)
@@ -761,7 +796,6 @@ Congratulations! You are now trained for invasive xenobiology research!"}
icon = 'icons/obj/abductor.dmi'
icon_state = "bed"
can_buckle = 1
- buckle_lying = 1
var/static/list/injected_reagents = list("corazone")
@@ -799,3 +833,11 @@ Congratulations! You are now trained for invasive xenobiology research!"}
airlock_type = /obj/machinery/door/airlock/abductor
material_type = /obj/item/stack/sheet/mineral/abductor
noglass = TRUE
+
+/obj/item/clothing/under/abductor
+ desc = "The most advanced form of jumpsuit known to reality, looks uncomfortable."
+ name = "alien jumpsuit"
+ icon_state = "abductor"
+ item_state = "bl_suit"
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0, fire = 0, acid = 0)
+ can_adjust = 0
diff --git a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
index 7e03bbf57a..ec76f61ec6 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
@@ -1,6 +1,6 @@
/datum/outfit/abductor
name = "Abductor Basic"
- uniform = /obj/item/clothing/under/color/grey //they're greys gettit
+ uniform = /obj/item/clothing/under/abductor
shoes = /obj/item/clothing/shoes/combat
back = /obj/item/storage/backpack
ears = /obj/item/radio/headset/abductor
@@ -24,7 +24,7 @@
for(var/obj/item/abductor/gizmo/G in B.contents)
console.AddGizmo(G)
-/datum/outfit/abductor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/abductor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
..()
if(!visualsOnly)
link_to_console(H)
@@ -34,7 +34,7 @@
name = "Abductor Agent"
head = /obj/item/clothing/head/helmet/abductor
suit = /obj/item/clothing/suit/armor/abductor/vest
- suit_store = /obj/item/abductor_baton
+ suit_store = /obj/item/abductor/baton
belt = /obj/item/storage/belt/military/abductor/full
backpack_contents = list(
@@ -49,7 +49,7 @@
/obj/item/abductor/gizmo = 1
)
-/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
..()
if(!visualsOnly)
var/obj/item/implant/abductor/beamplant = new
diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm
index a35cbbf0e4..82170444d0 100644
--- a/code/modules/antagonists/abductor/equipment/gland.dm
+++ b/code/modules/antagonists/abductor/equipment/gland.dm
@@ -5,22 +5,27 @@
icon_state = "gland"
status = ORGAN_ROBOTIC
beating = TRUE
+ organ_flags = ORGAN_NO_SPOIL
var/true_name = "baseline placebo referencer"
var/cooldown_low = 300
var/cooldown_high = 300
var/next_activation = 0
var/uses // -1 For infinite
- var/human_only = 0
- var/active = 0
+ var/human_only = FALSE
+ var/active = FALSE
var/mind_control_uses = 1
var/mind_control_duration = 1800
var/active_mind_control = FALSE
+/obj/item/organ/heart/gland/Initialize()
+ . = ..()
+ icon_state = pick(list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral"))
+
/obj/item/organ/heart/gland/examine(mob/user)
. = ..()
if((user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_SCIENTIST_TRAINING)) || isobserver(user))
- to_chat(user, "It is \a [true_name].")
+ . += "It is \a [true_name]."
/obj/item/organ/heart/gland/proc/ownerCheck()
if(ishuman(owner))
@@ -55,14 +60,18 @@
active_mind_control = TRUE
message_admins("[key_name(user)] sent an abductor mind control message to [key_name(owner)]: [command]")
update_gland_hud()
-
+ var/obj/screen/alert/mind_control/mind_alert = owner.throw_alert("mind_control", /obj/screen/alert/mind_control)
+ mind_alert.command = command
addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration)
+ return TRUE
/obj/item/organ/heart/gland/proc/clear_mind_control()
if(!ownerCheck() || !active_mind_control)
return FALSE
- to_chat(owner, "You feel the compulsion fade, and you completely forget about your previous orders.")
+ to_chat(owner, "You feel the compulsion fade, and you completely forget about your previous orders.")
+ owner.clear_alert("mind_control")
active_mind_control = FALSE
+ return TRUE
/obj/item/organ/heart/gland/Remove(mob/living/carbon/M, special = 0)
active = 0
@@ -73,7 +82,7 @@
clear_mind_control()
..()
-/obj/item/organ/heart/gland/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/heart/gland/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
if(special != 2 && uses) // Special 2 means abductor surgery
Start()
@@ -98,257 +107,4 @@
active = 0
/obj/item/organ/heart/gland/proc/activate()
- return
-
-/obj/item/organ/heart/gland/heals
- true_name = "coherency harmonizer"
- cooldown_low = 200
- cooldown_high = 400
- uses = -1
- icon_state = "health"
- mind_control_uses = 3
- mind_control_duration = 3000
-
-/obj/item/organ/heart/gland/heals/activate()
- to_chat(owner, "You feel curiously revitalized.")
- owner.adjustToxLoss(-20, FALSE, TRUE)
- owner.heal_bodypart_damage(20, 20, 0, TRUE)
- owner.adjustOxyLoss(-20)
-
-/obj/item/organ/heart/gland/slime
- true_name = "gastric animation galvanizer"
- cooldown_low = 600
- cooldown_high = 1200
- uses = -1
- icon_state = "slime"
- mind_control_uses = 1
- mind_control_duration = 2400
-
-/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0)
- ..()
- owner.faction |= "slime"
- owner.grant_language(/datum/language/slime)
-
-/obj/item/organ/heart/gland/slime/activate()
- to_chat(owner, "You feel nauseated!")
- owner.vomit(20)
-
- var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey")
- Slime.Friends = list(owner)
- Slime.Leader = owner
-
-/obj/item/organ/heart/gland/mindshock
- true_name = "neural crosstalk uninhibitor"
- cooldown_low = 400
- cooldown_high = 700
- uses = -1
- icon_state = "mindshock"
- mind_control_uses = 1
- mind_control_duration = 6000
-
-/obj/item/organ/heart/gland/mindshock/activate()
- to_chat(owner, "You get a headache.")
-
- var/turf/T = get_turf(owner)
- for(var/mob/living/carbon/H in orange(4,T))
- if(H == owner)
- continue
- switch(pick(1,3))
- if(1)
- to_chat(H, "You hear a loud buzz in your head, silencing your thoughts!")
- H.Stun(50)
- if(2)
- to_chat(H, "You hear an annoying buzz in your head.")
- H.confused += 15
- H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160)
- if(3)
- H.hallucination += 60
-
-/obj/item/organ/heart/gland/pop
- true_name = "anthropmorphic translocator"
- cooldown_low = 900
- cooldown_high = 1800
- uses = -1
- human_only = TRUE
- icon_state = "species"
- mind_control_uses = 5
- mind_control_duration = 300
-
-/obj/item/organ/heart/gland/pop/activate()
- to_chat(owner, "You feel unlike yourself.")
- randomize_human(owner)
- var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/insect, /datum/species/fly))
- owner.set_species(species)
-
-/obj/item/organ/heart/gland/ventcrawling
- true_name = "pliant cartilage enabler"
- cooldown_low = 1800
- cooldown_high = 2400
- uses = 1
- icon_state = "vent"
- mind_control_uses = 4
- mind_control_duration = 1800
-
-/obj/item/organ/heart/gland/ventcrawling/activate()
- to_chat(owner, "You feel very stretchy.")
- owner.ventcrawler = VENTCRAWLER_ALWAYS
-
-/obj/item/organ/heart/gland/viral
- true_name = "contamination incubator"
- cooldown_low = 1800
- cooldown_high = 2400
- uses = 1
- icon_state = "viral"
- mind_control_uses = 1
- mind_control_duration = 1800
-
-/obj/item/organ/heart/gland/viral/activate()
- to_chat(owner, "You feel sick.")
- var/datum/disease/advance/A = random_virus(pick(2,6),6)
- A.carrier = TRUE
- owner.ForceContractDisease(A, FALSE, TRUE)
-
-/obj/item/organ/heart/gland/viral/proc/random_virus(max_symptoms, max_level)
- if(max_symptoms > VIRUS_SYMPTOM_LIMIT)
- max_symptoms = VIRUS_SYMPTOM_LIMIT
- var/datum/disease/advance/A = new /datum/disease/advance()
- var/list/datum/symptom/possible_symptoms = list()
- for(var/symptom in subtypesof(/datum/symptom))
- var/datum/symptom/S = symptom
- if(initial(S.level) > max_level)
- continue
- if(initial(S.level) <= 0) //unobtainable symptoms
- continue
- possible_symptoms += S
- for(var/i in 1 to max_symptoms)
- var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms)
- if(chosen_symptom)
- var/datum/symptom/S = new chosen_symptom
- A.symptoms += S
- A.Refresh() //just in case someone already made and named the same disease
- return A
-
-/obj/item/organ/heart/gland/trauma
- true_name = "white matter randomiser"
- cooldown_low = 800
- cooldown_high = 1200
- uses = 5
- icon_state = "emp"
- mind_control_uses = 3
- mind_control_duration = 1800
-
-/obj/item/organ/heart/gland/trauma/activate()
- to_chat(owner, "You feel a spike of pain in your head.")
- if(prob(33))
- owner.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
- else
- if(prob(20))
- owner.gain_trauma_type(BRAIN_TRAUMA_SEVERE, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
- else
- owner.gain_trauma_type(BRAIN_TRAUMA_MILD, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
-
-/obj/item/organ/heart/gland/spiderman
- true_name = "araneae cloister accelerator"
- cooldown_low = 450
- cooldown_high = 900
- uses = -1
- icon_state = "spider"
- mind_control_uses = 2
- mind_control_duration = 2400
-
-/obj/item/organ/heart/gland/spiderman/activate()
- to_chat(owner, "You feel something crawling in your skin.")
- owner.faction |= "spiders"
- var/obj/structure/spider/spiderling/S = new(owner.drop_location())
- S.directive = "Protect your nest inside [owner.real_name]."
-
-/obj/item/organ/heart/gland/egg
- true_name = "roe/enzymatic synthesizer"
- cooldown_low = 300
- cooldown_high = 400
- uses = -1
- icon_state = "egg"
- lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
- mind_control_uses = 2
- mind_control_duration = 1800
-
-/obj/item/organ/heart/gland/egg/activate()
- owner.visible_message("[owner] [pick(EGG_LAYING_MESSAGES)]")
- var/turf/T = owner.drop_location()
- new /obj/item/reagent_containers/food/snacks/egg/gland(T)
-
-/obj/item/organ/heart/gland/electric
- true_name = "electron accumulator/discharger"
- cooldown_low = 800
- cooldown_high = 1200
- uses = -1
- mind_control_uses = 2
- mind_control_duration = 900
-
-/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0)
- ..()
- ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
-
-/obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0)
- REMOVE_TRAIT(owner, TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
- ..()
-
-/obj/item/organ/heart/gland/electric/activate()
- owner.visible_message("[owner]'s skin starts emitting electric arcs!",\
- "You feel electric energy building up inside you!")
- playsound(get_turf(owner), "sparks", 100, 1, -1)
- addtimer(CALLBACK(src, .proc/zap), rand(30, 100))
-
-/obj/item/organ/heart/gland/electric/proc/zap()
- tesla_zap(owner, 4, 8000, TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN)
- playsound(get_turf(owner), 'sound/magic/lightningshock.ogg', 50, 1)
-
-/obj/item/organ/heart/gland/chem
- true_name = "intrinsic pharma-provider"
- cooldown_low = 50
- cooldown_high = 50
- uses = -1
- mind_control_uses = 3
- mind_control_duration = 1200
- var/list/possible_reagents = list()
-
-/obj/item/organ/heart/gland/chem/Initialize()
- ..()
- for(var/X in subtypesof(/datum/reagent/drug))
- var/datum/reagent/R = X
- possible_reagents += initial(R.id)
- for(var/X in subtypesof(/datum/reagent/medicine))
- var/datum/reagent/R = X
- possible_reagents += initial(R.id)
- for(var/X in typesof(/datum/reagent/toxin))
- var/datum/reagent/R = X
- possible_reagents += initial(R.id)
-
-/obj/item/organ/heart/gland/chem/activate()
- var/chem_to_add = pick(possible_reagents)
- owner.reagents.add_reagent(chem_to_add, 2)
- owner.adjustToxLoss(-2, TRUE, TRUE)
- ..()
-
-/obj/item/organ/heart/gland/plasma
- true_name = "effluvium sanguine-synonym emitter"
- cooldown_low = 1200
- cooldown_high = 1800
- uses = -1
- mind_control_uses = 1
- mind_control_duration = 800
-
-/obj/item/organ/heart/gland/plasma/activate()
- to_chat(owner, "You feel bloated.")
- addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, owner, "A massive stomachache overcomes you."), 150)
- addtimer(CALLBACK(src, .proc/vomit_plasma), 200)
-
-/obj/item/organ/heart/gland/plasma/proc/vomit_plasma()
- if(!owner)
- return
- owner.visible_message("[owner] vomits a cloud of plasma!")
- var/turf/open/T = get_turf(owner)
- if(istype(T))
- T.atmos_spawn_air("plasma=50;TEMP=[T20C]")
- owner.vomit()
+ return
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/access.dm b/code/modules/antagonists/abductor/equipment/glands/access.dm
new file mode 100644
index 0000000000..548650d4e3
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/access.dm
@@ -0,0 +1,19 @@
+/obj/item/organ/heart/gland/access
+ true_name = "anagraphic electro-scrambler"
+ cooldown_low = 600
+ cooldown_high = 1200
+ uses = 1
+ icon_state = "mindshock"
+ mind_control_uses = 3
+ mind_control_duration = 900
+
+/obj/item/organ/heart/gland/access/activate()
+ to_chat(owner, "You feel like a VIP for some reason.")
+ RegisterSignal(owner, COMSIG_MOB_ALLOWED, .proc/free_access)
+
+/obj/item/organ/heart/gland/access/proc/free_access(datum/source, obj/O)
+ return TRUE
+
+/obj/item/organ/heart/gland/access/Remove(mob/living/carbon/M, special = 0)
+ UnregisterSignal(owner, COMSIG_MOB_ALLOWED)
+ ..()
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/blood.dm b/code/modules/antagonists/abductor/equipment/glands/blood.dm
new file mode 100644
index 0000000000..06b8249484
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/blood.dm
@@ -0,0 +1,18 @@
+/obj/item/organ/heart/gland/blood
+ true_name = "pseudonuclear hemo-destabilizer"
+ cooldown_low = 1200
+ cooldown_high = 1800
+ uses = -1
+ icon_state = "egg"
+ lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
+ mind_control_uses = 3
+ mind_control_duration = 1500
+
+/obj/item/organ/heart/gland/blood/activate()
+ if(!ishuman(owner) || !owner.dna.species)
+ return
+ var/mob/living/carbon/human/H = owner
+ var/datum/species/species = H.dna.species
+ to_chat(H, "You feel your blood heat up for a moment.")
+ species.exotic_blood = get_random_reagent_id()
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/chem.dm b/code/modules/antagonists/abductor/equipment/glands/chem.dm
new file mode 100644
index 0000000000..e7b6fda85f
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/chem.dm
@@ -0,0 +1,20 @@
+/obj/item/organ/heart/gland/chem
+ true_name = "intrinsic pharma-provider"
+ cooldown_low = 50
+ cooldown_high = 50
+ uses = -1
+ icon_state = "viral"
+ mind_control_uses = 3
+ mind_control_duration = 1200
+ var/list/possible_reagents = list()
+
+/obj/item/organ/heart/gland/chem/Initialize()
+ . = ..()
+ for(var/R in subtypesof(/datum/reagent/drug) + subtypesof(/datum/reagent/medicine) + typesof(/datum/reagent/toxin))
+ possible_reagents += R
+
+/obj/item/organ/heart/gland/chem/activate()
+ var/chem_to_add = pick(possible_reagents)
+ owner.reagents.add_reagent(chem_to_add, 2)
+ owner.adjustToxLoss(-5, TRUE, TRUE)
+ ..()
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/egg.dm b/code/modules/antagonists/abductor/equipment/glands/egg.dm
new file mode 100644
index 0000000000..429a24b19c
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/egg.dm
@@ -0,0 +1,15 @@
+/obj/item/organ/heart/gland/egg
+ true_name = "roe/enzymatic synthesizer"
+ cooldown_low = 300
+ cooldown_high = 400
+ uses = -1
+ icon_state = "egg"
+ lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
+ mind_control_uses = 2
+ mind_control_duration = 1800
+
+/obj/item/organ/heart/gland/egg/activate()
+ owner.visible_message("[owner] [pick(EGG_LAYING_MESSAGES)]")
+ var/turf/T = owner.drop_location()
+ new /obj/item/reagent_containers/food/snacks/egg/gland(T)
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/electric.dm b/code/modules/antagonists/abductor/equipment/glands/electric.dm
new file mode 100644
index 0000000000..63d95f8b1f
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/electric.dm
@@ -0,0 +1,26 @@
+/obj/item/organ/heart/gland/electric
+ true_name = "electron accumulator/discharger"
+ cooldown_low = 800
+ cooldown_high = 1200
+ icon_state = "species"
+ uses = -1
+ mind_control_uses = 2
+ mind_control_duration = 900
+
+/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
+ ..()
+ ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, "abductor_gland")
+
+/obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0)
+ REMOVE_TRAIT(owner, TRAIT_SHOCKIMMUNE, "abductor_gland")
+ ..()
+
+/obj/item/organ/heart/gland/electric/activate()
+ owner.visible_message("[owner]'s skin starts emitting electric arcs!",\
+ "You feel electric energy building up inside you!")
+ playsound(get_turf(owner), "sparks", 100, TRUE, -1)
+ addtimer(CALLBACK(src, .proc/zap), rand(30, 100))
+
+/obj/item/organ/heart/gland/electric/proc/zap()
+ tesla_zap(owner, 4, 8000, TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN)
+ playsound(get_turf(owner), 'sound/magic/lightningshock.ogg', 50, TRUE)
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm
new file mode 100644
index 0000000000..bf9a00e13c
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm
@@ -0,0 +1,178 @@
+/obj/item/organ/heart/gland/heal
+ true_name = "organic replicator"
+ cooldown_low = 200
+ cooldown_high = 400
+ uses = -1
+ human_only = TRUE
+ icon_state = "health"
+ mind_control_uses = 3
+ mind_control_duration = 3000
+
+/obj/item/organ/heart/gland/heal/activate()
+ if(!(owner.mob_biotypes & MOB_ORGANIC))
+ return
+
+ for(var/organ in owner.internal_organs)
+ if(istype(organ, /obj/item/organ/cyberimp))
+ reject_implant(organ)
+ return
+
+ var/obj/item/organ/liver/liver = owner.getorganslot(ORGAN_SLOT_LIVER)
+ if((!liver/* && !HAS_TRAIT(owner, TRAIT_NOMETABOLISM)*/) || (liver && ((liver.damage > (liver.maxHealth / 2)) || (istype(liver, /obj/item/organ/liver/cybernetic)))))
+ replace_liver(liver)
+ return
+
+ var/obj/item/organ/lungs/lungs = owner.getorganslot(ORGAN_SLOT_LUNGS)
+ if((!lungs && !HAS_TRAIT(owner, TRAIT_NOBREATH)) || (lungs && (istype(lungs, /obj/item/organ/lungs/cybernetic))))
+ replace_lungs(lungs)
+ return
+
+ var/obj/item/organ/eyes/eyes = owner.getorganslot(ORGAN_SLOT_EYES)
+ if(!eyes || (eyes && ((HAS_TRAIT_FROM(owner, TRAIT_NEARSIGHT, EYE_DAMAGE)) || (HAS_TRAIT_FROM(owner, TRAIT_BLIND, EYE_DAMAGE)) || (istype(eyes, /obj/item/organ/eyes/robotic)))))
+ replace_eyes(eyes)
+ return
+
+ var/obj/item/bodypart/limb
+ var/list/limb_list = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
+ for(var/zone in limb_list)
+ limb = owner.get_bodypart(zone)
+ if(!limb)
+ replace_limb(zone)
+ return
+ if((limb.get_damage() >= (limb.max_damage / 2)) || (limb.status == BODYPART_ROBOTIC))
+ replace_limb(zone, limb)
+ return
+
+ if(owner.getToxLoss() > 40)
+ replace_blood()
+ return
+ var/tox_amount = 0
+ for(var/datum/reagent/toxin/T in owner.reagents.reagent_list)
+ tox_amount += owner.reagents.get_reagent_amount(T.type)
+ if(tox_amount > 10)
+ replace_blood()
+ return
+ if(owner.blood_volume < BLOOD_VOLUME_OKAY)
+ owner.blood_volume = BLOOD_VOLUME_NORMAL
+ to_chat(owner, "You feel your blood pulsing within you.")
+ return
+
+ var/obj/item/bodypart/chest/chest = owner.get_bodypart(BODY_ZONE_CHEST)
+ if((chest.get_damage() >= (chest.max_damage / 4)) || (chest.status == BODYPART_ROBOTIC))
+ replace_chest(chest)
+ return
+
+/obj/item/organ/heart/gland/heal/proc/reject_implant(obj/item/organ/cyberimp/implant)
+ owner.visible_message("[owner] vomits up his [implant.name]!", "You suddenly vomit up your [implant.name]!")
+ owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
+ implant.Remove(owner)
+ implant.forceMove(owner.drop_location())
+
+/obj/item/organ/heart/gland/heal/proc/replace_liver(obj/item/organ/liver/liver)
+ if(liver)
+ owner.visible_message("[owner] vomits up his [liver.name]!", "You suddenly vomit up your [liver.name]!")
+ owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
+ liver.Remove(owner)
+ liver.forceMove(owner.drop_location())
+ else
+ to_chat(owner, "You feel a weird rumble in your bowels...")
+
+ var/liver_type = /obj/item/organ/liver
+ if(owner?.dna?.species?.mutantliver)
+ liver_type = owner.dna.species.mutantliver
+ var/obj/item/organ/liver/new_liver = new liver_type()
+ new_liver.Insert(owner)
+
+/obj/item/organ/heart/gland/heal/proc/replace_lungs(obj/item/organ/lungs/lungs)
+ if(lungs)
+ owner.visible_message("[owner] vomits up his [lungs.name]!", "You suddenly vomit up your [lungs.name]!")
+ owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
+ lungs.Remove(owner)
+ lungs.forceMove(owner.drop_location())
+ else
+ to_chat(owner, "You feel a weird rumble inside your chest...")
+
+ var/lung_type = /obj/item/organ/lungs
+ if(owner.dna.species && owner.dna.species.mutantlungs)
+ lung_type = owner.dna.species.mutantlungs
+ var/obj/item/organ/lungs/new_lungs = new lung_type()
+ new_lungs.Insert(owner)
+
+/obj/item/organ/heart/gland/heal/proc/replace_eyes(obj/item/organ/eyes/eyes)
+ if(eyes)
+ owner.visible_message("[owner]'s [eyes.name] fall out of their sockets!", "Your [eyes.name] fall out of their sockets!")
+ playsound(owner, 'sound/effects/splat.ogg', 50, TRUE)
+ eyes.Remove(owner)
+ eyes.forceMove(owner.drop_location())
+ else
+ to_chat(owner, "You feel a weird rumble behind your eye sockets...")
+
+ addtimer(CALLBACK(src, .proc/finish_replace_eyes), rand(100, 200))
+
+/obj/item/organ/heart/gland/heal/proc/finish_replace_eyes()
+ var/eye_type = /obj/item/organ/eyes
+ if(owner.dna.species && owner.dna.species.mutanteyes)
+ eye_type = owner.dna.species.mutanteyes
+ var/obj/item/organ/eyes/new_eyes = new eye_type()
+ new_eyes.Insert(owner)
+ owner.visible_message("A pair of new eyes suddenly inflates into [owner]'s eye sockets!", "A pair of new eyes suddenly inflates into your eye sockets!")
+
+/obj/item/organ/heart/gland/heal/proc/replace_limb(body_zone, obj/item/bodypart/limb)
+ if(limb)
+ owner.visible_message("[owner]'s [limb.name] suddenly detaches from [owner.p_their()] body!", "Your [limb.name] suddenly detaches from your body!")
+ playsound(owner, "desceration", 50, TRUE, -1)
+ limb.drop_limb()
+ else
+ to_chat(owner, "You feel a weird tingle in your [parse_zone(body_zone)]... even if you don't have one.")
+
+ addtimer(CALLBACK(src, .proc/finish_replace_limb, body_zone), rand(150, 300))
+
+/obj/item/organ/heart/gland/heal/proc/finish_replace_limb(body_zone)
+ owner.visible_message("With a loud snap, [owner]'s [parse_zone(body_zone)] rapidly grows back from [owner.p_their()] body!",
+ "With a loud snap, your [parse_zone(body_zone)] rapidly grows back from your body!",
+ "Your hear a loud snap.")
+ playsound(owner, 'sound/magic/demon_consume.ogg', 50, TRUE)
+ owner.regenerate_limb(body_zone)
+
+/obj/item/organ/heart/gland/heal/proc/replace_blood()
+ owner.visible_message("[owner] starts vomiting huge amounts of blood!", "You suddenly start vomiting huge amounts of blood!")
+ keep_replacing_blood()
+
+/obj/item/organ/heart/gland/heal/proc/keep_replacing_blood()
+ var/keep_going = FALSE
+ owner.vomit(0, TRUE, FALSE, 3, FALSE, FALSE, FALSE, TRUE)
+ owner.Stun(15)
+ owner.adjustToxLoss(-15, TRUE, TRUE)
+
+ owner.blood_volume = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20)
+ if(owner.blood_volume < BLOOD_VOLUME_NORMAL)
+ keep_going = TRUE
+
+ if(owner.getToxLoss())
+ keep_going = TRUE
+ for(var/datum/reagent/toxin/R in owner.reagents.reagent_list)
+ owner.reagents.remove_reagent(R.type, 4)
+ if(owner.reagents.has_reagent(R.type))
+ keep_going = TRUE
+ if(keep_going)
+ addtimer(CALLBACK(src, .proc/keep_replacing_blood), 30)
+
+/obj/item/organ/heart/gland/heal/proc/replace_chest(obj/item/bodypart/chest/chest)
+ if(chest.status == BODYPART_ROBOTIC)
+ owner.visible_message("[owner]'s [chest.name] rapidly expels its mechanical components, replacing them with flesh!", "Your [chest.name] rapidly expels its mechanical components, replacing them with flesh!")
+ playsound(owner, 'sound/magic/clockwork/anima_fragment_attack.ogg', 50, TRUE)
+ var/list/dirs = GLOB.alldirs.Copy()
+ for(var/i in 1 to 3)
+ var/obj/effect/decal/cleanable/robot_debris/debris = new(get_turf(owner))
+ debris.streak(dirs)
+ else
+ owner.visible_message("[owner]'s [chest.name] sheds off its damaged flesh, rapidly replacing it!", "Your [chest.name] sheds off its damaged flesh, rapidly replacing it!")
+ playsound(owner, 'sound/effects/splat.ogg', 50, TRUE)
+ var/list/dirs = GLOB.alldirs.Copy()
+ for(var/i in 1 to 3)
+ var/obj/effect/decal/cleanable/blood/gibs/gibs = new(get_turf(owner))
+ gibs.streak(dirs)
+
+ var/obj/item/bodypart/chest/new_chest = new(null)
+ new_chest.replace_limb(owner, TRUE)
+ qdel(chest)
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/mindshock.dm b/code/modules/antagonists/abductor/equipment/glands/mindshock.dm
new file mode 100644
index 0000000000..f8b91343f2
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/mindshock.dm
@@ -0,0 +1,64 @@
+/obj/item/organ/heart/gland/mindshock
+ true_name = "neural crosstalk uninhibitor"
+ cooldown_low = 400
+ cooldown_high = 700
+ uses = -1
+ icon_state = "mindshock"
+ mind_control_uses = 1
+ mind_control_duration = 6000
+ var/list/mob/living/carbon/human/broadcasted_mobs = list()
+
+/obj/item/organ/heart/gland/mindshock/activate()
+ to_chat(owner, "You get a headache.")
+
+ var/turf/T = get_turf(owner)
+ for(var/mob/living/carbon/H in orange(4,T))
+ if(H == owner)
+ continue
+ switch(pick(1,3))
+ if(1)
+ to_chat(H, "You hear a loud buzz in your head, silencing your thoughts!")
+ H.Stun(50)
+ if(2)
+ to_chat(H, "You hear an annoying buzz in your head.")
+ H.confused += 15
+ H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160)
+ if(3)
+ H.hallucination += 60
+
+/obj/item/organ/heart/gland/mindshock/mind_control(command, mob/living/user)
+ if(!ownerCheck() || !mind_control_uses || active_mind_control)
+ return FALSE
+ mind_control_uses--
+ for(var/mob/M in oview(7, owner))
+ if(!ishuman(M))
+ continue
+ var/mob/living/carbon/human/H = M
+ if(H.stat)
+ continue
+
+ broadcasted_mobs += H
+ to_chat(H, "You suddenly feel an irresistible compulsion to follow an order...")
+ to_chat(H, "[command]")
+
+ message_admins("[key_name(user)] broadcasted an abductor mind control message from [key_name(owner)] to [key_name(H)]: [command]")
+
+ var/obj/screen/alert/mind_control/mind_alert = H.throw_alert("mind_control", /obj/screen/alert/mind_control)
+ mind_alert.command = command
+
+ if(LAZYLEN(broadcasted_mobs))
+ active_mind_control = TRUE
+ addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration)
+
+ update_gland_hud()
+ return TRUE
+
+/obj/item/organ/heart/gland/mindshock/clear_mind_control()
+ if(!active_mind_control || !LAZYLEN(broadcasted_mobs))
+ return FALSE
+ for(var/M in broadcasted_mobs)
+ var/mob/living/carbon/human/H = M
+ to_chat(H, "You feel the compulsion fade, and you completely forget about your previous orders.")
+ H.clear_alert("mind_control")
+ active_mind_control = FALSE
+ return TRUE
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/plasma.dm b/code/modules/antagonists/abductor/equipment/glands/plasma.dm
new file mode 100644
index 0000000000..4a30d99d44
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/plasma.dm
@@ -0,0 +1,22 @@
+/obj/item/organ/heart/gland/plasma
+ true_name = "effluvium sanguine-synonym emitter"
+ cooldown_low = 1200
+ cooldown_high = 1800
+ icon_state = "slime"
+ uses = -1
+ mind_control_uses = 1
+ mind_control_duration = 800
+
+/obj/item/organ/heart/gland/plasma/activate()
+ to_chat(owner, "You feel bloated.")
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, owner, "A massive stomachache overcomes you."), 150)
+ addtimer(CALLBACK(src, .proc/vomit_plasma), 200)
+
+/obj/item/organ/heart/gland/plasma/proc/vomit_plasma()
+ if(!owner)
+ return
+ owner.visible_message("[owner] vomits a cloud of plasma!")
+ var/turf/open/T = get_turf(owner)
+ if(istype(T))
+ T.atmos_spawn_air("plasma=50;TEMP=[T20C]")
+ owner.vomit()
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/quantum.dm b/code/modules/antagonists/abductor/equipment/glands/quantum.dm
new file mode 100644
index 0000000000..a5b8815437
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/quantum.dm
@@ -0,0 +1,47 @@
+/obj/item/organ/heart/gland/quantum
+ true_name = "quantic de-observation matrix"
+ cooldown_low = 150
+ cooldown_high = 150
+ uses = -1
+ icon_state = "emp"
+ mind_control_uses = 2
+ mind_control_duration = 1200
+ var/mob/living/carbon/entangled_mob
+
+/obj/item/organ/heart/gland/quantum/activate()
+ if(entangled_mob)
+ return
+ for(var/mob/M in oview(owner, 7))
+ if(!iscarbon(M))
+ continue
+ entangled_mob = M
+ addtimer(CALLBACK(src, .proc/quantum_swap), rand(600, 2400))
+ return
+
+/obj/item/organ/heart/gland/quantum/proc/quantum_swap()
+ if(QDELETED(entangled_mob))
+ entangled_mob = null
+ return
+ var/turf/T = get_turf(owner)
+ do_teleport(owner, get_turf(entangled_mob),null,TRUE,channel = TELEPORT_CHANNEL_QUANTUM)
+ do_teleport(entangled_mob, T,null,TRUE,channel = TELEPORT_CHANNEL_QUANTUM)
+ to_chat(owner, "You suddenly find yourself somewhere else!")
+ to_chat(entangled_mob, "You suddenly find yourself somewhere else!")
+ if(!active_mind_control) //Do not reset entangled mob while mind control is active
+ entangled_mob = null
+
+/obj/item/organ/heart/gland/quantum/mind_control(command, mob/living/user)
+ if(..())
+ if(entangled_mob && ishuman(entangled_mob) && (entangled_mob.stat < DEAD))
+ to_chat(entangled_mob, "You suddenly feel an irresistible compulsion to follow an order...")
+ to_chat(entangled_mob, "[command]")
+ var/obj/screen/alert/mind_control/mind_alert = entangled_mob.throw_alert("mind_control", /obj/screen/alert/mind_control)
+ mind_alert.command = command
+ message_admins("[key_name(owner)] mirrored an abductor mind control message to [key_name(entangled_mob)]: [command]")
+ update_gland_hud()
+
+/obj/item/organ/heart/gland/quantum/clear_mind_control()
+ if(active_mind_control)
+ to_chat(entangled_mob, "You feel the compulsion fade, and you completely forget about your previous orders.")
+ entangled_mob.clear_alert("mind_control")
+ ..()
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/slime.dm b/code/modules/antagonists/abductor/equipment/glands/slime.dm
new file mode 100644
index 0000000000..53b8133528
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/slime.dm
@@ -0,0 +1,21 @@
+/obj/item/organ/heart/gland/slime
+ true_name = "gastric animation galvanizer"
+ cooldown_low = 600
+ cooldown_high = 1200
+ uses = -1
+ icon_state = "slime"
+ mind_control_uses = 1
+ mind_control_duration = 2400
+
+/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
+ ..()
+ owner.faction |= "slime"
+ owner.grant_language(/datum/language/slime)
+
+/obj/item/organ/heart/gland/slime/activate()
+ to_chat(owner, "You feel nauseated!")
+ owner.vomit(20)
+
+ var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey")
+ Slime.Friends = list(owner)
+ Slime.Leader = owner
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/spider.dm b/code/modules/antagonists/abductor/equipment/glands/spider.dm
new file mode 100644
index 0000000000..f0421b23b2
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/spider.dm
@@ -0,0 +1,14 @@
+/obj/item/organ/heart/gland/spiderman
+ true_name = "araneae cloister accelerator"
+ cooldown_low = 450
+ cooldown_high = 900
+ uses = -1
+ icon_state = "spider"
+ mind_control_uses = 2
+ mind_control_duration = 2400
+
+/obj/item/organ/heart/gland/spiderman/activate()
+ to_chat(owner, "You feel something crawling in your skin.")
+ owner.faction |= "spiders"
+ var/obj/structure/spider/spiderling/S = new(owner.drop_location())
+ S.directive = "Protect your nest inside [owner.real_name]."
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/transform.dm b/code/modules/antagonists/abductor/equipment/glands/transform.dm
new file mode 100644
index 0000000000..05c4760d37
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/transform.dm
@@ -0,0 +1,15 @@
+/obj/item/organ/heart/gland/transform
+ true_name = "anthropmorphic transmorphosizer"
+ cooldown_low = 900
+ cooldown_high = 1800
+ uses = -1
+ human_only = TRUE
+ icon_state = "species"
+ mind_control_uses = 7
+ mind_control_duration = 300
+
+/obj/item/organ/heart/gland/transform/activate()
+ to_chat(owner, "You feel unlike yourself.")
+ randomize_human(owner)
+ var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/insect, /datum/species/fly))
+ owner.set_species(species)
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/trauma.dm b/code/modules/antagonists/abductor/equipment/glands/trauma.dm
new file mode 100644
index 0000000000..b6280ec017
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/trauma.dm
@@ -0,0 +1,18 @@
+/obj/item/organ/heart/gland/trauma
+ true_name = "white matter randomiser"
+ cooldown_low = 800
+ cooldown_high = 1200
+ uses = 5
+ icon_state = "emp"
+ mind_control_uses = 3
+ mind_control_duration = 1800
+
+/obj/item/organ/heart/gland/trauma/activate()
+ to_chat(owner, "You feel a spike of pain in your head.")
+ if(prob(33))
+ owner.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
+ else
+ if(prob(20))
+ owner.gain_trauma_type(BRAIN_TRAUMA_SEVERE, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
+ else
+ owner.gain_trauma_type(BRAIN_TRAUMA_MILD, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm b/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm
new file mode 100644
index 0000000000..d1ea135497
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm
@@ -0,0 +1,12 @@
+/obj/item/organ/heart/gland/ventcrawling
+ true_name = "pliant cartilage enabler"
+ cooldown_low = 1800
+ cooldown_high = 2400
+ uses = 1
+ icon_state = "vent"
+ mind_control_uses = 4
+ mind_control_duration = 1800
+
+/obj/item/organ/heart/gland/ventcrawling/activate()
+ to_chat(owner, "You feel very stretchy.")
+ owner.ventcrawler = VENTCRAWLER_ALWAYS
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/viral.dm b/code/modules/antagonists/abductor/equipment/glands/viral.dm
new file mode 100644
index 0000000000..4d4f865a7c
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/viral.dm
@@ -0,0 +1,34 @@
+/obj/item/organ/heart/gland/viral
+ true_name = "contamination incubator"
+ cooldown_low = 1800
+ cooldown_high = 2400
+ uses = 1
+ icon_state = "viral"
+ mind_control_uses = 1
+ mind_control_duration = 1800
+
+/obj/item/organ/heart/gland/viral/activate()
+ to_chat(owner, "You feel sick.")
+ var/datum/disease/advance/A = random_virus(pick(2,6),6)
+ A.carrier = TRUE
+ owner.ForceContractDisease(A, FALSE, TRUE)
+
+/obj/item/organ/heart/gland/viral/proc/random_virus(max_symptoms, max_level)
+ if(max_symptoms > VIRUS_SYMPTOM_LIMIT)
+ max_symptoms = VIRUS_SYMPTOM_LIMIT
+ var/datum/disease/advance/A = new /datum/disease/advance()
+ var/list/datum/symptom/possible_symptoms = list()
+ for(var/symptom in subtypesof(/datum/symptom))
+ var/datum/symptom/S = symptom
+ if(initial(S.level) > max_level)
+ continue
+ if(initial(S.level) <= 0) //unobtainable symptoms
+ continue
+ possible_symptoms += S
+ for(var/i in 1 to max_symptoms)
+ var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms)
+ if(chosen_symptom)
+ var/datum/symptom/S = new chosen_symptom
+ A.symptoms += S
+ A.Refresh() //just in case someone already made and named the same disease
+ return A
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/machinery/camera.dm b/code/modules/antagonists/abductor/machinery/camera.dm
index 00e48cb1c7..9e0a2b46b1 100644
--- a/code/modules/antagonists/abductor/machinery/camera.dm
+++ b/code/modules/antagonists/abductor/machinery/camera.dm
@@ -17,9 +17,9 @@
/obj/machinery/computer/camera_advanced/abductor/CreateEye()
..()
- eyeobj.visible_icon = 1
- eyeobj.icon = 'icons/obj/abductor.dmi'
- eyeobj.icon_state = "camera_target"
+ eyeobj.visible_icon = TRUE
+ eyeobj.icon = 'icons/mob/cameramob.dmi'
+ eyeobj.icon_state = "generic_camera"
/obj/machinery/computer/camera_advanced/abductor/GrantActions(mob/living/carbon/user)
..()
diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm
index bcf02bda01..47294bc766 100644
--- a/code/modules/antagonists/abductor/machinery/console.dm
+++ b/code/modules/antagonists/abductor/machinery/console.dm
@@ -43,12 +43,15 @@
dat += "Collected Samples : [points]
"
dat += "Gear Credits: [credits]
"
dat += "Transfer data in exchange for supplies:
"
- dat += "Advanced Baton
"
- dat += "Agent Helmet
"
- dat += "Agent Vest
"
- dat += "Radio Silencer
"
- dat += "Science Tool
"
- dat += "Mental Interface Device
"
+ dat += "Advanced Baton (2 Credits)
"
+ dat += "Mental Interface Device (2 Credits)
"
+ dat += "Reagent Synthesizer (2 Credits)
"
+ dat += "Shrink Ray Blaster (2 Credits)
"
+ dat += "Agent Helmet (1 Credit)
"
+ dat += "Agent Vest (1 Credit)
"
+ dat += "Radio Silencer (1 Credit)
"
+ dat += "Science Tool (1 Credit)
"
+ dat += "Superlingual Matrix (1 Credit)
"
else
dat += "NO EXPERIMENT MACHINE DETECTED
"
@@ -101,7 +104,7 @@
else if(href_list["dispense"])
switch(href_list["dispense"])
if("baton")
- Dispense(/obj/item/abductor_baton,cost=2)
+ Dispense(/obj/item/abductor/baton,cost=2)
if("helmet")
Dispense(/obj/item/clothing/head/helmet/abductor)
if("silencer")
@@ -112,6 +115,12 @@
Dispense(/obj/item/clothing/suit/armor/abductor/vest)
if("mind_device")
Dispense(/obj/item/abductor/mind_device,cost=2)
+ if("chem_dispenser")
+ Dispense(/obj/item/abductor_machine_beacon/chem_dispenser,cost=2)
+ if("tongue")
+ Dispense(/obj/item/organ/tongue/abductor)
+ if("shrink_ray")
+ Dispense(/obj/item/gun/energy/shrink_ray,cost=2)
updateUsrDialog()
/obj/machinery/abductor/console/proc/TeleporterRetrieve()
@@ -136,9 +145,9 @@
var/entry_name
if(remote)
- entry_name = show_radial_menu(usr, camera.eyeobj, disguises2)
+ entry_name = show_radial_menu(usr, camera.eyeobj, disguises2, tooltips = TRUE)
else
- entry_name = show_radial_menu(usr, src, disguises2)
+ entry_name = show_radial_menu(usr, src, disguises2, require_near = TRUE, tooltips = TRUE)
var/datum/icon_snapshot/chosen = disguises[entry_name]
if(chosen && vest && (remote || in_range(usr,src)))
@@ -236,4 +245,4 @@
new item(drop_location)
else
- say("Insufficent data!")
+ say("Insufficent data!")
\ No newline at end of file
diff --git a/code/modules/antagonists/blob/blob.dm b/code/modules/antagonists/blob/blob.dm
index 964bc99311..3d6db983dc 100644
--- a/code/modules/antagonists/blob/blob.dm
+++ b/code/modules/antagonists/blob/blob.dm
@@ -30,7 +30,6 @@
var/datum/objective/blob_takeover/main = new
main.owner = owner
objectives += main
- owner.objectives |= objectives
/datum/antagonist/blob/apply_innate_effects(mob/living/mob_override)
if(!isovermind(owner.current))
diff --git a/code/modules/antagonists/blob/blob/overmind.dm b/code/modules/antagonists/blob/blob/overmind.dm
index d32e38c194..f094fa83db 100644
--- a/code/modules/antagonists/blob/blob/overmind.dm
+++ b/code/modules/antagonists/blob/blob/overmind.dm
@@ -9,7 +9,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
name = "Blob Overmind"
real_name = "Blob Overmind"
desc = "The overmind. It controls the blob."
- icon = 'icons/mob/blob.dmi'
+ icon = 'icons/mob/cameramob.dmi'
icon_state = "marker"
mouse_opacity = MOUSE_OPACITY_ICON
move_on_shuttle = 1
@@ -170,9 +170,9 @@ GLOBAL_LIST_EMPTY(blob_nodes)
add_points(0)
/mob/camera/blob/examine(mob/user)
- ..()
+ . = ..()
if(blob_reagent_datum)
- to_chat(user, "Its chemical is [blob_reagent_datum.name].")
+ . += "Its chemical is [blob_reagent_datum.name]."
/mob/camera/blob/update_health_hud()
if(blob_core)
diff --git a/code/modules/antagonists/blob/blob/theblob.dm b/code/modules/antagonists/blob/blob/theblob.dm
index dc7aa821d6..953b876b35 100644
--- a/code/modules/antagonists/blob/blob/theblob.dm
+++ b/code/modules/antagonists/blob/blob/theblob.dm
@@ -243,18 +243,21 @@
else
return ..()
-/obj/structure/blob/proc/chemeffectreport(mob/user)
+/obj/structure/blob/proc/chemeffectreport()
+ RETURN_TYPE(/list)
+ . = list()
if(overmind)
- to_chat(user, "Material: [overmind.blob_reagent_datum.name].")
- to_chat(user, "Material Effects: [overmind.blob_reagent_datum.analyzerdescdamage]")
- to_chat(user, "Material Properties: [overmind.blob_reagent_datum.analyzerdesceffect]
")
+ . += "Material: [overmind.blob_reagent_datum.name]."
+ . += "Material Effects: [overmind.blob_reagent_datum.analyzerdescdamage]"
+ . += "Material Properties: [overmind.blob_reagent_datum.analyzerdesceffect]
"
else
- to_chat(user, "No Material Detected!
")
+ . += "No Material Detected!
"
-/obj/structure/blob/proc/typereport(mob/user)
- to_chat(user, "Blob Type: [uppertext(initial(name))]")
- to_chat(user, "Health: [obj_integrity]/[max_integrity]")
- to_chat(user, "Effects: [scannerreport()]")
+/obj/structure/blob/proc/typereport()
+ RETURN_TYPE(/list)
+ . = list("Blob Type: [uppertext(initial(name))]")
+ . += "Health: [obj_integrity]/[max_integrity]"
+ . += "Effects: [scannerreport()]"
/obj/structure/blob/attack_animal(mob/living/simple_animal/M)
if(ROLE_BLOB in M.faction) //sorry, but you can't kill the blob as a blobbernaut
@@ -310,20 +313,20 @@
return B
/obj/structure/blob/examine(mob/user)
- ..()
+ . = ..()
var/datum/atom_hud/hud_to_check = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
if(user.research_scanner || hud_to_check.hudusers[user])
- to_chat(user, "Your HUD displays an extensive report...
")
+ . += "Your HUD displays an extensive report...
"
if(overmind)
- to_chat(user, "Progress to Critical Mass: [overmind.blobs_legit.len]/[overmind.blobwincount].")
+ . += "Progress to Critical Mass: [overmind.blobs_legit.len]/[overmind.blobwincount]."
else
- to_chat(user, "Core neutralized. Critical mass no longer attainable.")
- chemeffectreport(user)
- typereport(user)
+ . += "Core neutralized. Critical mass no longer attainable."
+ . += chemeffectreport()
+ . += typereport()
else
if(isobserver(user) && overmind)
- to_chat(user, "Progress to Critical Mass: [overmind.blobs_legit.len]/[overmind.blobwincount].")
- to_chat(user, "It seems to be made of [get_chem_name()].")
+ . += "Progress to Critical Mass: [overmind.blobs_legit.len]/[overmind.blobwincount]."
+ . += "It seems to be made of [get_chem_name()]."
/obj/structure/blob/proc/scannerreport()
return "A generic blob. Looks like someone forgot to override this proc, adminhelp this."
diff --git a/code/modules/antagonists/blood_contract/blood_contract.dm b/code/modules/antagonists/blood_contract/blood_contract.dm
new file mode 100644
index 0000000000..4e7238647e
--- /dev/null
+++ b/code/modules/antagonists/blood_contract/blood_contract.dm
@@ -0,0 +1,33 @@
+
+/datum/antagonist/blood_contract
+ name = "Blood Contract Target"
+ show_in_roundend = FALSE
+ show_in_antagpanel = FALSE
+
+/datum/antagonist/blood_contract/on_gain()
+ . = ..()
+ give_objective()
+ start_the_hunt()
+
+/datum/antagonist/blood_contract/proc/give_objective()
+ var/datum/objective/survive/survive = new
+ survive.owner = owner
+ objectives += survive
+
+/datum/antagonist/blood_contract/greet()
+ . = ..()
+ to_chat(owner, "You've been marked for death! Don't let the demons get you! KILL THEM ALL!")
+
+/datum/antagonist/blood_contract/proc/start_the_hunt()
+ var/mob/living/carbon/human/H = owner.current
+ if(!istype(H))
+ return
+ H.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY)
+ var/obj/effect/mine/pickup/bloodbath/B = new(H)
+ INVOKE_ASYNC(B, /obj/effect/mine/pickup/bloodbath/.proc/mineEffect, H) //could use moving out from the mine
+
+ for(var/mob/living/carbon/human/P in GLOB.player_list)
+ if(P == H)
+ continue
+ to_chat(P, "You have an overwhelming desire to kill [H]. [H.p_theyve(TRUE)] been marked red! Whoever [H.p_they()] [H.p_were()], friend or foe, go kill [H.p_them()]!")
+ P.put_in_hands(new /obj/item/kitchen/knife/butcher(P), TRUE)
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_flaws.dm b/code/modules/antagonists/bloodsucker/bloodsucker_flaws.dm
new file mode 100644
index 0000000000..77169efd61
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_flaws.dm
@@ -0,0 +1,84 @@
+
+// Getting Flaws:
+//
+// Killing crew
+//
+// Gaining ranks
+
+
+
+// * COMPULSION * Things you must do
+//
+// SELECTIVE: -Gender/BloodType/Job sustains you, but others give you less.
+//
+
+
+
+
+// * WEAKNESSES * Things that may harm you
+//
+// LIGHTS: -Bright light nullifies the Examine benefits of Masquerade.
+// -Bright lights disable your healing (including in Torpor)
+//
+// STAKES: -Stakes kill you immediately.
+//
+// PAINFUL: -Your feed victims scream, despite being unconscious.
+//
+// FIRE: -You only need your max health (not x2) in fire damage to die.
+//
+// CORPSE: -Your Masquerade turns off when unconscious or crit.
+//
+// FERAL: -
+//
+// CRAVEN
+
+
+
+
+
+
+
+
+
+
+
+
+
+ // BANES //
+
+// These are basically small weaknesses that affect your character in certain circumstances.
+// As a rule, they should be specific as to when they happen, or have only some certain
+// drawback.
+
+// (core ideas)
+// SENSITIVE: You are slightly blinded by bright lights.
+// DARKFRIEND: Your automatic healing is at a crawl when in bright light.
+// TRADITIONAL: Every five minutes spent outside a coffin lowers your rate of automatic healing.
+// CONSUMED: Every five minutes spent outside a coffin increases the rate at which your blood ticks down.
+// GOURMAND: Animals and blood bags offer you no nourishment when feeding.
+// DEATHMASK: You no longer fake having a heartbeat, and always show up as pale when examined.
+// BESTIAL: When your blood is low, you will twitch involuntarily.
+
+// (alternate ideas)
+// STERILE: There is a high chance that turning corpses to Bloodsuckers will fail, and further attempts on them by you are impossible.
+// FERAL: You're a threat to Vampire-kind: New Bloodsuckers may have an Objective to destroy you.
+// UNHOLY: The Chapel, the Bible, and Holy Water set you on fire.
+// PARANOID: Only your own claimed coffin counts for healing and banes.
+
+
+// ON LEVEL-UP:
+// Burn Damage increases
+// Regen Rate increases
+// Max Punch Damage increase
+// Reset Level Timer
+// Select Bane
+
+
+// How to Burn Vamps:
+// C.adjustFireLoss(20)
+// C.adjust_fire_stacks(6)
+// C.IgniteMob()
+
+
+/datum/antagonist/bloodsucker/proc/AssignRandomBane()
+ return
\ No newline at end of file
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm
new file mode 100644
index 0000000000..bf4ae4b6b5
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm
@@ -0,0 +1,148 @@
+// INTEGRATION: Adding Procs and Datums to existing "classes"
+/mob/living/proc/AmBloodsucker(falseIfInDisguise=FALSE)
+ // No Datum
+ if(!mind || !mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ return FALSE
+ return TRUE
+
+
+/mob/living/proc/HaveBloodsuckerBodyparts(var/displaymessage="") // displaymessage can be something such as "rising from death" for Torpid Sleep. givewarningto is the person receiving messages.
+ if(!getorganslot(ORGAN_SLOT_HEART))
+ if(displaymessage != "")
+ to_chat(src, "Without a heart, you are incapable of [displaymessage].")
+ return FALSE
+ if(!get_bodypart(BODY_ZONE_HEAD))
+ if(displaymessage != "")
+ to_chat(src, "Without a head, you are incapable of [displaymessage].")
+ return FALSE
+ if(!getorgan(/obj/item/organ/brain)) // NOTE: This is mostly just here so we can do one scan for all needed parts when creating a vamp. You probably won't be trying to use powers w/out a brain.
+ if(displaymessage != "")
+ to_chat(src, "Without a brain, you are incapable of [displaymessage].")
+ return FALSE
+ return TRUE
+
+
+
+// GET DAMAGE
+
+
+// Do NOT count the damage on prosthetics for this.
+/mob/living/proc/getBruteLoss_nonProsthetic()
+ return getBruteLoss()
+
+/mob/living/proc/getFireLoss_nonProsthetic()
+ return getFireLoss()
+
+/mob/living/carbon/getBruteLoss_nonProsthetic()
+ var/amount = 0
+ for(var/obj/item/bodypart/BP in bodyparts)
+ if(BP.status < 2)
+ amount += BP.brute_dam
+ return amount
+
+/mob/living/carbon/getFireLoss_nonProsthetic()
+ var/amount = 0
+ for(var/obj/item/bodypart/BP in bodyparts)
+ if(BP.status < 2)
+ amount += BP.burn_dam
+ return amount
+
+/mob/living/carbon
+// EXAMINING
+/mob/living/carbon/human/proc/ReturnVampExamine(var/mob/viewer)
+ if(!mind || !viewer.mind)
+ return ""
+ // Target must be a Vamp
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(!bloodsuckerdatum)
+ return ""
+ // Viewer is Target's Vassal?
+ if(viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL) in bloodsuckerdatum.vassals)
+ var/returnString = "\[This is your Master!\]"
+ var/returnIcon = "[icon2html('icons/misc/language.dmi', world, "bloodsucker")]"
+ returnString += "\n"
+ return returnIcon + returnString
+ // Viewer not a Vamp AND not the target's vassal?
+ if(!viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) && !(viewer in bloodsuckerdatum.vassals))
+ return ""
+ // Default String
+ var/returnString = "\[[bloodsuckerdatum.ReturnFullName(1)]\]"
+ var/returnIcon = "[icon2html('icons/misc/language.dmi', world, "bloodsucker")]"
+
+ // In Disguise (Veil)?
+ //if (name_override != null)
+ // returnString += " ([real_name] in disguise!) "
+
+ //returnString += "\n" Don't need spacers. Using . += "" in examine.dm does this on its own.
+ return returnIcon + returnString
+
+
+/mob/living/carbon/human/proc/ReturnVassalExamine(var/mob/viewer)
+ if(!mind || !viewer.mind)
+ return ""
+ // Am I not even a Vassal? Then I am not marked.
+ var/datum/antagonist/vassal/vassaldatum = mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ if(!vassaldatum)
+ return ""
+ // Only Vassals and Bloodsuckers can recognize marks.
+ if(!viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) && !viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL))
+ return ""
+
+ // Default String
+ var/returnString = "\["
+ var/returnIcon = ""
+ // Am I Viewer's Vassal?
+ if(vassaldatum.master.owner == viewer.mind)
+ returnString += "This [dna.species.name] bears YOUR mark!"
+ returnIcon = "[icon2html('icons/misc/mark_icons.dmi', world, "vassal")]"
+ // Am I someone ELSE'S Vassal?
+ else if(viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ returnString += "This [dna.species.name] bears the mark of [vassaldatum.master.ReturnFullName(vassaldatum.master.owner.current,1)]"
+ returnIcon = "[icon2html('icons/misc/mark_icons.dmi', world, "vassal_grey")]"
+ // Are you serving the same master as I am?
+ else if(viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL) in vassaldatum.master.vassals)
+ returnString += "[p_they(TRUE)] bears the mark of your Master"
+ returnIcon = "[icon2html('icons/misc/mark_icons.dmi', world, "vassal")]"
+ // You serve a different Master than I do.
+ else
+ returnString += "[p_they(TRUE)] bears the mark of another Bloodsucker"
+ returnIcon = "[icon2html('icons/misc/mark_icons.dmi', world, "vassal_grey")]"
+
+ returnString += "\]" // \n" Don't need spacers. Using . += "" in examine.dm does this on its own.
+ return returnIcon + returnString
+
+
+// Am I "pale" when examined? Bloodsuckers can trick this.
+/mob/living/carbon/proc/ShowAsPaleExamine()
+
+ // Normal Creatures:
+ if(!mind || !mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ return blood_volume < (BLOOD_VOLUME_SAFE * blood_ratio)
+
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(bloodsuckerdatum.poweron_masquerade)
+ return FALSE
+
+ // If a Bloodsucker is malnourished, AND if his temperature matches his surroundings (aka he hasn't fed recently and looks COLD)...
+ return blood_volume < (BLOOD_VOLUME_OKAY * blood_ratio) // && !(bodytemperature <= get_temperature() + 2)
+
+/mob/living/carbon/human/ShowAsPaleExamine()
+ // Check for albino, as per human/examine.dm's check.
+ if(skin_tone == "albino")
+ return TRUE
+
+ return ..() // Return vamp check
+
+/mob/living/carbon/proc/scan_blood_volume()
+ // Vamps don't show up normally to scanners unless Masquerade power is on ----> scanner.dm
+ if(mind)
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if (istype(bloodsuckerdatum) && bloodsuckerdatum.poweron_masquerade)
+ return BLOOD_VOLUME_NORMAL
+ return blood_volume
+
+/mob/living/proc/IsFrenzied()
+ return FALSE
+
+/mob/living/proc/StartFrenzy(inTime = 120)
+ set waitfor = FALSE
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
new file mode 100644
index 0000000000..9174692b49
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
@@ -0,0 +1,361 @@
+
+
+// TO PLUG INTO LIFE:
+
+// Cancel BLOOD life
+// Cancel METABOLISM life (or find a way to control what gets digested)
+// Create COLDBLOODED trait (thermal homeostasis)
+
+// EXAMINE
+//
+// Show as dead when...
+
+/datum/antagonist/bloodsucker/proc/LifeTick()// Should probably run from life.dm, same as handle_changeling, but will be an utter pain to move
+ set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side.
+ var/notice_healing = FALSE
+ while(owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src
+ if(owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA)) // Deduct Blood
+ AddBloodVolume(-0.1) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now)
+ if(HandleHealing(1)) // Heal
+ if(notice_healing == FALSE && owner.current.blood_volume > 0)
+ to_chat(owner, "The power of your blood begins knitting your wounds...")
+ notice_healing = TRUE
+ else if(notice_healing == TRUE)
+ notice_healing = FALSE // Apply Low Blood Effects
+ HandleStarving() // Death
+ HandleDeath() // Standard Update
+ update_hud()// Daytime Sleep in Coffin
+ if (SSticker.mode.is_daylight() && !HAS_TRAIT_FROM(owner.current, TRAIT_DEATHCOMA, "bloodsucker"))
+ if(istype(owner.current.loc, /obj/structure/closet/crate/coffin))
+ Torpor_Begin()
+ // Wait before next pass
+ sleep(10)
+ FreeAllVassals() // Free my Vassals! (if I haven't yet)
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// BLOOD
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/antagonist/bloodsucker/proc/AddBloodVolume(value)
+ owner.current.blood_volume = CLAMP(owner.current.blood_volume + value, 0, maxBloodVolume)
+ update_hud()
+
+/datum/antagonist/bloodsucker/proc/HandleFeeding(mob/living/carbon/target, mult=1)
+ // mult: SILENT feed is 1/3 the amount
+ var/blood_taken = min(feedAmount, target.blood_volume) * mult // Starts at 15 (now 8 since we doubled the Feed time)
+ target.blood_volume -= blood_taken
+ // Simple Animals lose a LOT of blood, and take damage. This is to keep cats, cows, and so forth from giving you insane amounts of blood.
+ if(!ishuman(target))
+ target.blood_volume -= (blood_taken / max(target.mob_size, 0.1)) * 3.5 // max() to prevent divide-by-zero
+ target.apply_damage_type(blood_taken / 3.5) // Don't do too much damage, or else they die and provide no blood nourishment.
+ if(target.blood_volume <= 0)
+ target.blood_volume = 0
+ target.death(0)
+ ///////////
+ // Shift Body Temp (toward Target's temp, by volume taken)
+ owner.current.bodytemperature = ((owner.current.blood_volume * owner.current.bodytemperature) + (blood_taken * target.bodytemperature)) / (owner.current.blood_volume + blood_taken)
+ // our volume * temp, + their volume * temp, / total volume
+ ///////////
+ // Reduce Value Quantity
+ if(target.stat == DEAD) // Penalty for Dead Blood
+ blood_taken /= 3
+ if(!ishuman(target)) // Penalty for Non-Human Blood
+ blood_taken /= 2
+ //if (!iscarbon(target)) // Penalty for Animals (they're junk food)
+ // Apply to Volume
+ AddBloodVolume(blood_taken)
+ // Reagents (NOT Blood!)
+ if(target.reagents && target.reagents.total_volume)
+ target.reagents.reaction(owner.current, INGEST, 1) // Run Reaction: what happens when what they have mixes with what I have?
+ target.reagents.trans_to(owner.current, 1) // Run transfer of 1 unit of reagent from them to me.
+ // Blood Gulp Sound
+ owner.current.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// HEALING
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/antagonist/bloodsucker/proc/HandleHealing(mult = 1)
+ // NOTE: Mult of 0 is just a TEST to see if we are injured and need to go into Torpor!
+ //It is called from your coffin on close (by you only)
+ if(poweron_masquerade == TRUE || owner.current.AmStaked())
+ return FALSE
+ owner.current.adjustStaminaLoss(-2 + (regenRate * -10) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more.
+ owner.current.adjustCloneLoss(-1 * (regenRate * 4) * mult, 0)
+ owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0)
+ // No Bleeding
+ if(ishuman(owner.current)) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete.
+ var/mob/living/carbon/human/H = owner.current
+ H.bleed_rate = 0
+ if(iscarbon(owner.current)) // Damage Heal: Do I have damage to ANY bodypart?
+ var/mob/living/carbon/C = owner.current
+ var/costMult = 1 // Coffin makes it cheaper
+ var/fireheal = 0 // BURN: Heal in Coffin while Fakedeath, or when damage above maxhealth (you can never fully heal fire)
+ var/amInCoffinWhileTorpor = istype(C.loc, /obj/structure/closet/crate/coffin) && (mult == 0 || HAS_TRAIT(C, TRAIT_DEATHCOMA)) // Check for mult 0 OR death coma. (mult 0 means we're testing from coffin)
+ if(amInCoffinWhileTorpor)
+ mult *= 5 // Increase multiplier if we're sleeping in a coffin.
+ fireheal = min(C.getFireLoss_nonProsthetic(), regenRate) // NOTE: Burn damage ONLY heals in torpor.
+ costMult = 0.25
+ C.ExtinguishMob()
+ CureDisabilities() // Extinguish Fire
+ C.remove_all_embedded_objects() // Remove Embedded!
+ owner.current.regenerate_organs() // Heal Organs (will respawn original eyes etc. but we replace right away, next)
+ CheckVampOrgans() // Heart, Eyes
+ else
+ if(owner.current.blood_volume <= 0) // No Blood? Lower Mult
+ mult = 0.25
+ // Crit from burn? Lower damage to maximum allowed.
+ //if (C.getFireLoss() > owner.current.getMaxHealth())
+ // fireheal = regenRate / 2
+ // BRUTE: Always Heal
+ var/bruteheal = min(C.getBruteLoss_nonProsthetic(), regenRate)
+ var/toxinheal = min(C.getToxLoss(), regenRate)
+ // Heal if Damaged
+ if(bruteheal + fireheal + toxinheal > 0) // Just a check? Don't heal/spend, and return.
+ if(mult == 0)
+ return TRUE
+ // We have damage. Let's heal (one time)
+ C.adjustBruteLoss(-bruteheal * mult, forced = TRUE)// Heal BRUTE / BURN in random portions throughout the body.
+ C.adjustFireLoss(-fireheal * mult, forced = TRUE)
+ C.adjustToxLoss(-toxinheal * mult * 2, forced = TRUE) //Toxin healing because vamps arent immune
+ //C.heal_overall_damage(bruteheal * mult, fireheal * mult) // REMOVED: We need to FORCE this, because otherwise, vamps won't heal EVER. Swapped to above.
+ AddBloodVolume((bruteheal * -0.5 + fireheal * -1) / mult * costMult) // Costs blood to heal
+ return TRUE // Healed! Done for this tick.
+ if(amInCoffinWhileTorpor) // Limbs? (And I have no other healing)
+ var/list/missing = owner.current.get_missing_limbs() // Heal Missing
+ if (missing.len) // Cycle through ALL limbs and regen them!
+ for (var/targetLimbZone in missing) // 1) Find ONE Limb and regenerate it.
+ owner.current.regenerate_limb(targetLimbZone, 0) // regenerate_limbs() <--- If you want to EXCLUDE certain parts, do it like this ----> regenerate_limbs(0, list("head"))
+ var/obj/item/bodypart/L = owner.current.get_bodypart( targetLimbZone ) // 2) Limb returns Damaged
+ AddBloodVolume(50 * costMult) // Costs blood to heal
+ L.brute_dam = 60
+ to_chat(owner.current, "Your flesh knits as it regrows [L]!")
+ playsound(owner.current, 'sound/magic/demon_consume.ogg', 50, 1)
+ // DONE! After regenerating ANY number of limbs, we stop here.
+ return TRUE
+ /*else // REMOVED: For now, let's just leave prosthetics on. Maybe you WANT to be a robovamp.
+ // Remove Prosthetic/False Limb
+ for(var/obj/item/bodypart/BP in C.bodyparts)
+ message_admins("T1: [BP] ")
+ if (istype(BP) && BP.status == 2)
+ message_admins("T2: [BP] ")
+ BP.drop_limb()
+ return TRUE */
+ // NOTE: Limbs have a "status", like their hosts "stat". 2 is dead (aka Prosthetic). 1 seems to be idle/alive.*/
+ return FALSE
+
+/datum/antagonist/bloodsucker/proc/CureDisabilities()
+ var/mob/living/carbon/C = owner.current
+ C.cure_blind(list(EYE_DAMAGE))//()
+ C.cure_nearsighted(EYE_DAMAGE)
+ C.set_blindness(0) // Added 9/2/19
+ C.set_blurriness(0) // Added 9/2/19
+ C.update_tint() // Added 9/2/19
+ C.update_sight() // Added 9/2/19
+ for(var/O in C.internal_organs) //owner.current.adjust_eye_damage(-100) // This was removed by TG
+ var/obj/item/organ/organ = O
+ organ.setOrganDamage(0)
+ owner.current.cure_husk()
+
+// I am thirsty for blud!
+/datum/antagonist/bloodsucker/proc/HandleStarving()
+
+ // High: Faster Healing
+ // Med: Pale
+ // Low: Twitch
+ // V.Low: Blur Vision
+ // EMPTY: Frenzy!
+ // BLOOD_VOLUME_GOOD: [336] Pale (handled in bloodsucker_integration.dm
+ // BLOOD_VOLUME_BAD: [224] Jitter
+ if(owner.current.blood_volume < BLOOD_VOLUME_BAD && !prob(0.5))
+ owner.current.Jitter(3)
+ // BLOOD_VOLUME_SURVIVE: [122] Blur Vision
+ if(owner.current.blood_volume < BLOOD_VOLUME_BAD / 2)
+ owner.current.blur_eyes(8 - 8 * (owner.current.blood_volume / BLOOD_VOLUME_BAD))
+ // Nutrition
+ owner.current.nutrition = min(owner.current.blood_volume, NUTRITION_LEVEL_FED) // <-- 350 //NUTRITION_LEVEL_FULL
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// DEATH
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/antagonist/bloodsucker/proc/HandleDeath()
+ // FINAL DEATH
+ // Fire Damage? (above double health)
+ if (owner.current.getFireLoss_nonProsthetic() >= owner.current.getMaxHealth() * 2)
+ FinalDeath()
+ return
+ // Staked while "Temp Death" or Asleep
+ if (owner.current.StakeCanKillMe() && owner.current.AmStaked())
+ FinalDeath()
+ return
+ // Not "Alive"?
+ if (!owner.current || !isliving(owner.current) || isbrain(owner.current) || !get_turf(owner.current))
+ FinalDeath()
+ return
+ // Missing Brain or Heart?
+ if (!owner.current.HaveBloodsuckerBodyparts())
+ FinalDeath()
+ return
+ // Disable Powers: Masquerade * NOTE * This should happen as a FLAW!
+ //if (stat >= UNCONSCIOUS)
+ // for (var/datum/action/bloodsucker/masquerade/P in powers)
+ // P.Deactivate()
+ // TEMP DEATH
+ var/total_brute = owner.current.getBruteLoss_nonProsthetic()
+ var/total_burn = owner.current.getFireLoss_nonProsthetic()
+ var/total_toxloss = owner.current.getToxLoss() //This is neater than just putting it in total_damage
+ var/total_damage = total_brute + total_burn + total_toxloss
+ // Died? Convert to Torpor (fake death)
+ if (owner.current.stat >= DEAD)
+ Torpor_Begin()
+ to_chat(owner, "Your immortal body will not yet relinquish your soul to the abyss. You enter Torpor.")
+ if (poweron_masquerade == TRUE)
+ to_chat(owner, "Your wounds will not heal until you disable the Masquerade power.")
+ // End Torpor:
+ else // No damage, OR toxin healed AND brute healed and NOT in coffin (since you cannot heal burn)
+ if (total_damage <= 0 || total_toxloss <= 0 && total_brute <= 0 && !istype(owner.current.loc, /obj/structure/closet/crate/coffin))
+ // Not Daytime, Not in Torpor
+ if (!SSticker.mode.is_daylight() && HAS_TRAIT_FROM(owner.current, TRAIT_DEATHCOMA, "bloodsucker"))
+ Torpor_End()
+ // Fake Unconscious
+ if (poweron_masquerade == TRUE && total_damage >= owner.current.getMaxHealth() - HEALTH_THRESHOLD_FULLCRIT)
+ owner.current.Unconscious(20,1)
+
+ //HEALTH_THRESHOLD_CRIT 0
+ //HEALTH_THRESHOLD_FULLCRIT -30
+ //HEALTH_THRESHOLD_DEAD -100
+
+/datum/antagonist/bloodsucker/proc/Torpor_Begin(amInCoffin=FALSE)
+ owner.current.stat = UNCONSCIOUS
+ owner.current.fakedeath("bloodsucker") // Come after UNCONSCIOUS or else it fails
+ ADD_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") // Without this, you'll just keep dying while you recover.
+ ADD_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever.
+ ADD_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever.
+ // Visuals
+ owner.current.update_sight()
+ owner.current.reload_fullscreen()
+ // Disable ALL Powers
+ for (var/datum/action/bloodsucker/power in powers)
+ if (power.active && !power.can_use_in_torpor)
+ power.DeactivatePower()
+
+
+/datum/antagonist/bloodsucker/proc/Torpor_End()
+ owner.current.stat = SOFT_CRIT
+ owner.current.cure_fakedeath("bloodsucker") // Come after SOFT_CRIT or else it fails
+ REMOVE_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker")
+ REMOVE_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker")
+ REMOVE_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker")
+ to_chat(owner, "You have recovered from Torpor.")
+
+
+/datum/antagonist/proc/AmFinalDeath()
+ // Standard Antags can be dead OR final death
+ return owner && (owner.current && owner.current.stat >= DEAD || owner.AmFinalDeath())
+
+/datum/antagonist/bloodsucker/AmFinalDeath()
+ return owner && owner.AmFinalDeath()
+/datum/antagonist/changeling/AmFinalDeath()
+ return owner && owner.AmFinalDeath()
+
+/datum/mind/proc/AmFinalDeath()
+ return !current || QDELETED(current) || !isliving(current) || isbrain(current) || !get_turf(current) // NOTE: "isliving()" is not the same as STAT == CONSCIOUS. This is to make sure you're not a BORG (aka silicon)
+
+/datum/antagonist/bloodsucker/proc/FinalDeath()
+ if(!iscarbon(owner.current)) //Check for non carbons.
+ owner.current.gib()
+ return
+ playsound(get_turf(owner.current), 'sound/effects/tendril_destroyed.ogg', 60, 1)
+ owner.current.drop_all_held_items()
+ owner.current.unequip_everything()
+ var/mob/living/carbon/C = owner.current
+ C.remove_all_embedded_objects()
+ // Make me UN-CLONEABLE
+ owner.current.hellbound = TRUE // This was done during creation, but let's do it again one more time...to make SURE this guy stays dead, but they dont stay dead because brains can be cloned!
+ // Free my Vassals!
+ FreeAllVassals()
+ // Elders get Dusted
+ if (vamplevel >= 4) // (vamptitle)
+ owner.current.visible_message("[owner.current]'s skin crackles and dries, their skin and bones withering to dust. A hollow cry whips from what is now a sandy pile of remains.", \
+ "Your soul escapes your withering body as the abyss welcomes you to your Final Death.", \
+ "You hear a dry, crackling sound.")
+ owner.current.dust()
+ // Fledglings get Gibbed
+ else
+ owner.current.visible_message("[owner.current]'s skin bursts forth in a spray of gore and detritus. A horrible cry echoes from what is now a wet pile of decaying meat.", \
+ "Your soul escapes your withering body as the abyss welcomes you to your Final Death.", \
+ "You hear a wet, bursting sound.")
+ owner.current.gib(TRUE, FALSE, FALSE)//Brain cloning is wierd and allows hellbounds. Lets destroy the brain for safety.
+ playsound(owner.current.loc, 'sound/effects/tendril_destroyed.ogg', 40, 1)
+
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// HUMAN FOOD
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/mob/proc/CheckBloodsuckerEatFood(var/food_nutrition)
+ if (!isliving(src))
+ return
+ var/mob/living/L = src
+ if (!L.AmBloodsucker())
+ return
+ // We're a vamp? Try to eat food...
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ bloodsuckerdatum.handle_eat_human_food(food_nutrition)
+
+
+/datum/antagonist/bloodsucker/proc/handle_eat_human_food(var/food_nutrition) // Called from snacks.dm and drinks.dm
+ set waitfor = FALSE
+ if (!owner.current || !iscarbon(owner.current))
+ return
+ var/mob/living/carbon/C = owner.current
+ // Remove Nutrition, Give Bad Food
+ C.nutrition -= food_nutrition
+ foodInGut += food_nutrition
+ // Already ate some bad clams? Then we can back out, because we're already sick from it.
+ if (foodInGut != food_nutrition)
+ return
+ // Haven't eaten, but I'm in a Human Disguise.
+ else if (poweron_masquerade)
+ to_chat(C, "Your stomach turns, but your \"human disguise\" keeps the food down...for now.")
+ // Keep looping until we purge. If we have activated our Human Disguise, we ignore the food. But it'll come up eventually...
+ var/sickphase = 0
+ while (foodInGut)
+ sleep(50)
+ C.adjust_disgust(10 * sickphase)
+ // Wait an interval...
+ sleep(50 + 50 * sickphase) // At intervals of 100, 150, and 200. (10 seconds, 15 seconds, and 20 seconds)
+ // Died? Cancel
+ if(C.stat == DEAD)
+ return
+ // Put up disguise? Then hold off the vomit.
+ if(poweron_masquerade)
+ if(sickphase > 0)
+ to_chat(C, "Your stomach settles temporarily. You regain your composure...for now.")
+ sickphase = 0
+ continue
+ switch(sickphase)
+ if (1)
+ to_chat(C, "You feel unwell. You can taste ash on your tongue.")
+ C.Stun(10)
+ if (2)
+ to_chat(C, "Your stomach turns. Whatever you ate tastes of grave dirt and brimstone.")
+ C.Dizzy(15)
+ C.Stun(13)
+ if (3)
+ to_chat(C, "You purge the food of the living from your viscera! You've never felt worse.")
+ C.vomit(foodInGut * 4, foodInGut * 2, 0) // (var/lost_nutrition = 10, var/blood = 0, var/stun = 1, var/distance = 0, var/message = 1, var/toxic = 0)
+ C.blood_volume = max(0, C.blood_volume - foodInGut * 2)
+ C.Stun(30)
+ //C.Dizzy(50)
+ foodInGut = 0
+ sickphase ++
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm
new file mode 100644
index 0000000000..63e1470576
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm
@@ -0,0 +1,351 @@
+
+
+// Hide a random object somewhere on the station:
+// var/turf/targetturf = get_random_station_turf()
+// var/turf/targetturf = get_safe_random_station_turf()
+
+
+
+
+/datum/objective/bloodsucker
+ martyr_compatible = TRUE
+
+// GENERATE!
+/datum/objective/bloodsucker/proc/generate_objective()
+ update_explanation_text()
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// // PROCS // //
+
+
+/datum/objective/bloodsucker/proc/return_possible_targets()
+ var/list/possible_targets = list()
+
+ // Look at all crew members, and for/loop through.
+ for(var/datum/mind/possible_target in get_crewmember_minds())
+ // Check One: Default Valid User
+ if(possible_target != owner && ishuman(possible_target.current) && possible_target.current.stat != DEAD)// && is_unique_objective(possible_target))
+ // Check Two: Am Bloodsucker? OR in Bloodsucker list?
+ if (possible_target.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) || (possible_target in SSticker.mode.bloodsuckers))
+ continue
+ else
+ possible_targets += possible_target
+
+ return possible_targets
+
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/objective/bloodsucker/lair
+
+// EXPLANATION
+/datum/objective/bloodsucker/lair/update_explanation_text()
+ explanation_text = "Create a lair by claiming a coffin, and protect it until the end of the shift"// Make sure to keep it safe!"
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/lair/check_completion()
+ var/datum/antagonist/bloodsucker/antagdatum = owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if (antagdatum && antagdatum.coffin && antagdatum.lair)
+ return TRUE
+ return FALSE
+
+ // Space_Station_13_areas.dm <--- all the areas
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Vassal becomes a Head, or part of a department
+/datum/objective/bloodsucker/protege
+
+ // LOOKUP: /datum/crewmonitor/proc/update_data(z) for .assignment to see how to get a person's PDA.
+ var/list/roles = list(
+ "Captain",
+ "Head of Personnel",
+ "Research Director",
+ "Chief Engineer",
+ "Chief Medical Officer",
+ "Quartermaster"
+ )
+ var/list/departs = list(
+ "Research Director",
+ "Chief Engineer",
+ "Chief Medical Officer",
+ "Quartermaster"
+ )
+
+
+ var/target_role // Equals "HEAD" when it's not a department role.
+ var/department_string
+
+// GENERATE!
+/datum/objective/bloodsucker/protege/generate_objective()
+ target_role = rand(0,2) == 0 ? "HEAD" : pick(departs)
+
+ // Heads?
+ if (target_role == "HEAD")
+ target_amount = rand(1, round(SSticker.mode.num_players() / 20))
+ target_amount = CLAMP(target_amount,1,3)
+ // Department?
+ else
+ switch(target_role)
+ if("Research Director")
+ department_string = "Science"
+ if("Chief Engineer")
+ department_string = "Engineering"
+ if("Chief Medical Officer")
+ department_string = "Medical"
+ if("Quartermaster")
+ department_string = "Cargo"
+ target_amount = rand(round(SSticker.mode.num_players() / 20), round(SSticker.mode.num_players() / 10))
+ target_amount = CLAMP(target_amount, 2, 4)
+ ..()
+
+// EXPLANATION
+/datum/objective/bloodsucker/protege/update_explanation_text()
+ if (target_role == "HEAD")
+ if (target_amount == 1)
+ explanation_text = "Guarantee a Vassal ends up as a Department Head or in a Leadership role."
+ else
+ explanation_text = "Guarantee [target_amount] Vassals end up as different Leadership or Department Heads."
+ else
+ explanation_text = "Have [target_amount] Vassal[target_amount==1?"":"s"] in the [department_string] department."
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/protege/check_completion()
+
+ var/datum/antagonist/bloodsucker/antagdatum = owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if (!antagdatum || antagdatum.vassals.len == 0)
+ return FALSE
+
+ // Get list of all jobs that are qualified (for HEAD, this is already done)
+ var/list/valid_jobs
+ if (target_role == "HEAD")
+ valid_jobs = roles
+ else
+ valid_jobs = list()
+ var/list/alljobs = subtypesof(/datum/job) // This is just a list of TYPES, not the actual variables!
+ for(var/T in alljobs)
+ var/datum/job/J = SSjob.GetJobType(T) //
+ if (!istype(J))
+ continue
+ // Found a job whose Dept Head matches either list of heads, or this job IS the head
+ if ((target_role in J.department_head) || target_role == J.title)
+ valid_jobs += J.title
+
+
+ // Check Vassals, and see if they match
+ var/objcount = 0
+ var/list/counted_roles = list() // So you can't have more than one Captain count.
+ for(var/datum/antagonist/vassal/V in antagdatum.vassals)
+ if (!V || !V.owner) // Must exist somewhere, and as a vassal.
+ continue
+
+ var/thisRole = "none"
+
+ // Mind Assigned
+ if ((V.owner.assigned_role in valid_jobs) && !(V.owner.assigned_role in counted_roles))
+ //to_chat(owner, "PROTEGE OBJECTIVE: (MIND ROLE)")
+ thisRole = V.owner.assigned_role
+ // Mob Assigned
+ else if ((V.owner.current.job in valid_jobs) && !(V.owner.current.job in counted_roles))
+ //to_chat(owner, "PROTEGE OBJECTIVE: (MOB JOB)")
+ thisRole = V.owner.current.job
+ // PDA Assigned
+ else if (V.owner.current && ishuman(V.owner.current))
+ var/mob/living/carbon/human/H = V.owner.current
+ var/obj/item/card/id/I = H.wear_id ? H.wear_id.GetID() : null
+ if (I && (I.assignment in valid_jobs) && !(I.assignment in counted_roles))
+ //to_chat(owner, "PROTEGE OBJECTIVE: (GET ID)")
+ thisRole = I.assignment
+
+ // NO MATCH
+ if (thisRole == "none")
+ continue
+
+ // SUCCESS!
+ objcount ++
+ if (target_role == "HEAD")
+ counted_roles += thisRole // Add to list so we don't count it again (but only if it's a Head)
+
+ // NOTE!!!!!!!!!!!
+
+ // Look for jobs value on mobs! This is assigned at start, but COULD be assigned from HoP?
+ //
+ // ALSO - Search through all jobs (look for prefs earlier that look for all jobs, and search through all jobs to see if their head matches the head listed, or it IS the head)
+ //
+ // ALSO - registered_account in _vending.dm for banks, and assigning new ones.
+
+ //to_chat(antagdatum.owner, "PROTEGE OBJECTIVE: Final Count: [objcount] of [antagdatum.vassals.len] vassals")
+ return objcount >= target_amount
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Eat blood from a lot of people
+/datum/objective/bloodsucker/gourmand
+
+// HOW: Track each feed (if human). Count victory.
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Convert a crewmate
+/datum/objective/bloodsucker/embrace
+
+// HOW: Find crewmate. Check if person is a bloodsucker
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Defile a facility with blood
+/datum/objective/bloodsucker/desecrate
+
+ // Space_Station_13_areas.dm <--- all the areas
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Destroy the Solar Arrays
+/datum/objective/bloodsucker/solars
+
+// Space_Station_13_areas.dm <--- all the areas
+/datum/objective/bloodsucker/solars/update_explanation_text()
+ explanation_text = "Prevent all solar arrays on the station from functioning."
+
+/datum/objective/bloodsucker/solars/check_completion()
+ // Sort through all /obj/machinery/power/solar_control in the station ONLY, and check that they are functioning.
+ // Make sure that lastgen is 0 or connected_panels.len is 0. Doesnt matter if it's tracking.
+ for (var/obj/machinery/power/solar_control/SC in SSsun.solars)
+ // Check On Station:
+ var/turf/T = get_turf(SC)
+ if(!T || !is_station_level(T.z)) // <------ Taken from NukeOp
+ //message_admins("DEBUG A: [SC] not on station!")
+ continue // Not on station! We don't care about this.
+ if (SC && SC.lastgen > 0 && SC.connected_panels.len > 0 && SC.connected_tracker)
+ return FALSE
+ return TRUE
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Steal hearts. You just really wanna have some hearts.
+/datum/objective/bloodsucker/heartthief
+ // NOTE: Look up /steal in objective.dm for inspiration.
+
+// GENERATE!
+/datum/objective/bloodsucker/heartthief/generate_objective()
+ target_amount = rand(2,3)
+
+ update_explanation_text()
+ //dangerrating += target_amount * 2
+
+// EXPLANATION
+/datum/objective/bloodsucker/heartthief/update_explanation_text()
+ explanation_text = "Steal and keep [target_amount] heart[target_amount == 1 ? "" : "s"]." // TO DO: Limit them to Human Only!
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/heartthief/check_completion()
+ // -Must have a body.
+ if (!owner.current)
+ return FALSE
+ // Taken from /steal in objective.dm
+ var/list/all_items = owner.current.GetAllContents() // Includes items inside other items.
+ var/itemcount = FALSE
+ for(var/obj/I in all_items) //Check for items
+ if(I == /obj/item/organ/heart)
+ itemcount ++
+ if (itemcount >= target_amount) // Got the right amount?
+ return TRUE
+
+ return FALSE
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/objective/bloodsucker/survive
+ martyr_compatible = FALSE
+
+
+// EXPLANATION
+/datum/objective/bloodsucker/survive/update_explanation_text()
+ explanation_text = "Survive the entire shift without succumbing to Final Death."
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/survive/check_completion()
+ // -Must have a body.
+ if (!owner.current || !isliving(owner.current))
+ return FALSE
+ // Dead, without a head or heart? Cya
+ return owner.current.stat != DEAD// || owner.current.HaveBloodsuckerBodyparts()
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/objective/bloodsucker/vamphunter
+
+// GENERATE!
+/datum/objective/bloodsucker/vamphunter/generate_objective()
+ update_explanation_text()
+
+// EXPLANATION
+/datum/objective/bloodsucker/vamphunter/update_explanation_text()
+ explanation_text = "Destroy all Bloodsuckers on [station_name()]."
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/vamphunter/check_completion()
+ for (var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if (M && M.current && M.current.stat != DEAD && get_turf(M.current))
+ return FALSE
+ return TRUE
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/objective/bloodsucker/monsterhunter
+
+// GENERATE!
+/datum/objective/bloodsucker/monsterhunter/generate_objective()
+ update_explanation_text()
+
+// EXPLANATION
+/datum/objective/bloodsucker/monsterhunter/update_explanation_text()
+ explanation_text = "Destroy all monsters on [station_name()]."
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/monsterhunter/check_completion()
+ var/list/datum/mind/monsters = list()
+ monsters += SSticker.mode.bloodsuckers
+ monsters += SSticker.mode.devils
+ monsters += SSticker.mode.cult
+ monsters += SSticker.mode.wizards
+ monsters += SSticker.mode.apprentices
+ //monsters += SSticker.mode.servants_of_ratvar
+ //monsters += SSticker.mode.changelings disabled anyways
+
+ for (var/datum/mind/M in monsters)
+ if (M && M != owner && M.current && M.current.stat != DEAD && get_turf(M.current))
+ return FALSE
+ return TRUE
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/objective/bloodsucker/vassal
+
+// GENERATE!
+/datum/objective/bloodsucker/vassal/generate_objective()
+ update_explanation_text()
+
+// EXPLANATION
+/datum/objective/bloodsucker/vassal/update_explanation_text()
+ explanation_text = "Guarantee the success of your Master's mission!"
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/vassal/check_completion()
+ var/datum/antagonist/vassal/antag_datum = owner.has_antag_datum(ANTAG_DATUM_VASSAL)
+ return antag_datum.master && antag_datum.master.owner && antag_datum.master.owner.current && antag_datum.master.owner.current.stat != DEAD
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm
new file mode 100644
index 0000000000..dffdeaf7fc
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm
@@ -0,0 +1,284 @@
+/datum/action/bloodsucker
+ name = "Vampiric Gift"
+ desc = "A vampiric gift."
+ button_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the BACKGROUND icon
+ background_icon_state = "vamp_power_off" //And this is the state for the background icon
+ var/background_icon_state_on = "vamp_power_on" // FULP: Our "ON" icon alternative.
+ var/background_icon_state_off = "vamp_power_off" // FULP: Our "OFF" icon alternative.
+ icon_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the ACTION icon
+ button_icon_state = "power_feed" //And this is the state for the action icon
+ buttontooltipstyle = "cult"
+
+ // Action-Related
+ //var/amPassive = FALSE // REMOVED: Just made it its own kind. // Am I just "on" at all times? (aka NO ICON)
+ var/amTargetted = FALSE // Am I asked to choose a target when enabled? (Shows as toggled ON when armed)
+ var/amToggle = FALSE // Can I be actively turned on and off?
+ var/amSingleUse = FALSE // Am I removed after a single use?
+ var/active = FALSE
+ var/cooldown = 20 // 10 ticks, 1 second.
+ var/cooldownUntil = 0 // From action.dm: next_use_time = world.time + cooldown_time
+ // Power-Related
+ var/level_current = 0 // Can increase to yield new abilities. Each power goes up in strength each Rank.
+ //var/level_max = 1 //
+ var/bloodcost = 10
+ var/needs_button = TRUE // Taken from Changeling - for passive abilities that dont need a button
+ var/bloodsucker_can_buy = FALSE // Must be a bloodsucker to use this power.
+ var/warn_constant_cost = FALSE // Some powers charge you for staying on. Masquerade, Cloak, Veil, etc.
+ var/can_use_in_torpor = FALSE // Most powers don't function if you're in torpor.
+ var/must_be_capacitated = FALSE // Some powers require you to be standing and ready.
+ var/can_be_immobilized = FALSE // Brawn can be used when incapacitated/laying if it's because you're being immobilized. NOTE: If must_be_capacitated is FALSE, this is irrelevant.
+ var/can_be_staked = FALSE // Only Feed can happen with a stake in you.
+ var/cooldown_static = FALSE // Feed, Masquerade, and One-Shot powers don't improve their cooldown.
+ //var/not_bloodsucker = FALSE // This goes to Vassals or Hunters, but NOT bloodsuckers.
+
+/datum/action/bloodsucker/New()
+ if (bloodcost > 0)
+ desc += "
COST: [bloodcost] Blood" // Modify description to add cost.
+ if (warn_constant_cost)
+ desc += "
Your over-time blood consumption increases while [name] is active."
+ if (amSingleUse)
+ desc += "
Useable once per night."
+ ..()
+
+// NOTES
+//
+// click.dm <--- Where we can take over mouse clicks
+// spells.dm /add_ranged_ability() <--- How we take over the mouse click to use a power on a target.
+
+/datum/action/bloodsucker/Trigger()
+ // Active? DEACTIVATE AND END!
+ if (active && CheckCanDeactivate(TRUE))
+ DeactivatePower()
+ return
+ if (!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE))
+ return
+ PayCost()
+ if (amToggle)
+ active = !active
+ UpdateButtonIcon()
+ if (!amToggle || !active)
+ StartCooldown() // Must come AFTER UpdateButton(), otherwise icon will revert.
+ ActivatePower() // NOTE: ActivatePower() freezes this power in place until it ends.
+ if (active) // Did we not manually disable? Handle it here.
+ DeactivatePower()
+ if (amSingleUse)
+ RemoveAfterUse()
+
+/datum/action/bloodsucker/proc/CheckCanPayCost(display_error)
+ if(!owner || !owner.mind)
+ return FALSE
+ // Cooldown?
+ if (cooldownUntil > world.time)
+ if (display_error)
+ to_chat(owner, "[src] is unavailable. Wait [(cooldownUntil - world.time) / 10] seconds.")
+ return FALSE
+ // Have enough blood?
+ var/mob/living/L = owner
+ if (L.blood_volume < bloodcost)
+ if (display_error)
+ to_chat(owner, "You need at least [bloodcost] blood to activate [name]")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/proc/CheckCanUse(display_error) // These checks can be scanned every frame while a ranged power is on.
+ if(!owner || !owner.mind)
+ return FALSE
+ // Torpor?
+ if(!can_use_in_torpor && HAS_TRAIT(owner, TRAIT_DEATHCOMA))
+ if(display_error)
+ to_chat(owner, "Not while you're in Torpor.")
+ return FALSE
+ // Stake?
+ if(!can_be_staked && owner.AmStaked())
+ if(display_error)
+ to_chat(owner, "You have a stake in your chest! Your powers are useless.")
+ return FALSE
+ // Incap?
+ if(must_be_capacitated)
+ var/mob/living/L = owner
+ if (L.incapacitated(TRUE, TRUE) || L.resting && !can_be_immobilized)
+ if(display_error)
+ to_chat(owner, "Not while you're incapacitated!")
+ return FALSE
+ // Constant Cost (out of blood)
+ if(warn_constant_cost)
+ var/mob/living/L = owner
+ if(L.blood_volume <= 0)
+ if(display_error)
+ to_chat(owner, "You don't have the blood to upkeep [src].")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/proc/StartCooldown()
+ set waitfor = FALSE
+ // Alpha Out
+ button.color = rgb(128,0,0,128)
+ button.alpha = 100
+ // Calculate Cooldown (by power's level)
+ var/this_cooldown = (cooldown_static || amSingleUse) ? cooldown : max(cooldown / 2, cooldown - (cooldown / 16 * (level_current-1)))
+ // NOTE: With this formula, you'll hit half cooldown at level 8 for that power.
+
+ // Wait for cooldown
+ cooldownUntil = world.time + this_cooldown
+ spawn(this_cooldown)
+ // Alpha In
+ button.color = rgb(255,255,255,255)
+ button.alpha = 255
+
+/datum/action/bloodsucker/proc/CheckCanDeactivate(display_error)
+ return TRUE
+
+/datum/action/bloodsucker/UpdateButtonIcon(force = FALSE)
+ background_icon_state = active? background_icon_state_on : background_icon_state_off
+ ..()//UpdateButtonIcon()
+
+
+/datum/action/bloodsucker/proc/PayCost()
+ // owner for actions is the mob, not mind.
+ var/mob/living/L = owner
+ L.blood_volume -= bloodcost
+
+
+/datum/action/bloodsucker/proc/ActivatePower()
+
+
+/datum/action/bloodsucker/proc/DeactivatePower(mob/living/user = owner, mob/living/target)
+ active = FALSE
+ UpdateButtonIcon()
+ StartCooldown()
+
+/datum/action/bloodsucker/proc/ContinueActive(mob/living/user, mob/living/target) // Used by loops to make sure this power can stay active.
+ return active && user && (!warn_constant_cost || user.blood_volume > 0)
+
+/datum/action/bloodsucker/proc/RemoveAfterUse()
+ // Un-Learn Me! (GO HOME
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if (istype(bloodsuckerdatum))
+ bloodsuckerdatum.powers -= src
+ Remove(owner)
+
+/datum/action/bloodsucker/proc/Upgrade()
+ level_current ++
+
+/////////////////////////////////// PASSIVE POWERS ///////////////////////////////////
+
+// New Type: Passive (Always on, no button)
+/datum/action/bloodsucker/passive
+
+/datum/action/bloodsucker/passive/New()
+ // REMOVED: DO NOTHBING!
+ ..()
+ // Don't Display Button! (it doesn't do anything anyhow)
+ button.screen_loc = DEFAULT_BLOODSPELLS
+ button.moved = DEFAULT_BLOODSPELLS
+ button.ordered = FALSE
+/datum/action/bloodsucker/passive/Destroy()
+ if(owner)
+ Remove(owner)
+ target = null
+
+/////////////////////////////////// TARGETTED POWERS ///////////////////////////////////
+
+/datum/action/bloodsucker/targeted
+ // NOTE: All Targeted spells are Toggles! We just don't bother checking here.
+ var/target_range = 99
+ var/message_Trigger = "Select a target."
+ var/obj/effect/proc_holder/bloodsucker/bs_proc_holder
+ var/power_activates_immediately = TRUE // Most powers happen the moment you click. Some, like Mesmerize, require time and shouldn't cost you if they fail.
+
+ var/power_in_use = FALSE // Is this power LOCKED due to being used?
+
+/datum/action/bloodsucker/targeted/New(Target)
+ desc += "
\[Targeted Power\]" // Modify description to add notice that this is aimed.
+ ..()
+ // Create Proc Holder for intercepting clicks
+ bs_proc_holder = new ()
+ bs_proc_holder.linked_power = src
+
+// Click power: Begin Aim
+/datum/action/bloodsucker/targeted/Trigger()
+ if(active && CheckCanDeactivate(TRUE))
+ DeactivateRangedAbility()
+ DeactivatePower()
+ return
+ if(!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE))
+ return
+ active = !active
+ UpdateButtonIcon()
+ // Create & Link Targeting Proc
+ var/mob/living/L = owner
+ if(L.ranged_ability)
+ L.ranged_ability.remove_ranged_ability()
+ bs_proc_holder.add_ranged_ability(L)
+
+ if(message_Trigger != "")
+ to_chat(owner, "[message_Trigger]")
+
+/datum/action/bloodsucker/targeted/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ if(!owner.client) // <--- We don't allow non client usage so that using powers like mesmerize will FAIL if you try to use them as ghost. Why? because ranged_abvility in spell.dm
+ return FALSE // doesn't let you remove powers if you're not there. So, let's just cancel the power entirely.
+ return TRUE
+
+/datum/action/bloodsucker/targeted/DeactivatePower(mob/living/user = owner, mob/living/target)
+ // Don't run ..(), we don't want to engage the cooldown until we USE this power!
+ active = FALSE
+ UpdateButtonIcon()
+
+/datum/action/bloodsucker/targeted/proc/DeactivateRangedAbility()
+ // Only Turned off when CLICK is disabled...aka, when you successfully clicked (or
+ bs_proc_holder.remove_ranged_ability()
+
+// Check if target is VALID (wall, turf, or character?)
+/datum/action/bloodsucker/targeted/proc/CheckValidTarget(atom/A)
+ return FALSE // FALSE targets nothing.
+
+// Check if valid target meets conditions
+/datum/action/bloodsucker/targeted/proc/CheckCanTarget(atom/A, display_error)
+ // Out of Range
+ if(!(A in view(target_range, owner)))
+ if(display_error && target_range > 1) // Only warn for range if it's greater than 1. Brawn doesn't need to announce itself.
+ to_chat(owner, "Your target is out of range.")
+ return FALSE
+ return istype(A)
+
+// Click Target
+/datum/action/bloodsucker/targeted/proc/ClickWithPower(atom/A)
+ // CANCEL RANGED TARGET check
+ if(power_in_use || !CheckValidTarget(A))
+ return FALSE
+ // Valid? (return true means DON'T cancel power!)
+ if(!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE) || !CheckCanTarget(A, TRUE))
+ return TRUE
+ // Skip this part so we can return TRUE right away.
+ if(power_activates_immediately)
+ PowerActivatedSuccessfully() // Mesmerize pays only after success.
+ power_in_use = TRUE // Lock us into this ability until it successfully fires off. Otherwise, we pay the blood even if we fail.
+ FireTargetedPower(A) // We use this instead of ActivatePower(), which has no input
+ power_in_use = FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/proc/FireTargetedPower(atom/A)
+ // Like ActivatePower, but specific to Targeted (and takes an atom input). We don't use ActivatePower for targeted.
+
+/datum/action/bloodsucker/targeted/proc/PowerActivatedSuccessfully()
+ // The power went off! We now pay the cost of the power.
+ PayCost()
+ DeactivateRangedAbility()
+ DeactivatePower()
+ StartCooldown() // Do AFTER UpdateIcon() inside of DeactivatePower. Otherwise icon just gets wiped.
+
+/datum/action/bloodsucker/targeted/ContinueActive(mob/living/user, mob/living/target) // Used by loops to make sure this power can stay active.
+ return ..()
+// Target Proc Holder
+/obj/effect/proc_holder/bloodsucker
+ var/datum/action/bloodsucker/targeted/linked_power
+
+/obj/effect/proc_holder/bloodsucker/remove_ranged_ability(msg)
+ ..()
+ linked_power.DeactivatePower()
+
+/obj/effect/proc_holder/bloodsucker/InterceptClickOn(mob/living/caller, params, atom/A)
+ return linked_power.ClickWithPower(A)
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
new file mode 100644
index 0000000000..bb6e2a69f9
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
@@ -0,0 +1,195 @@
+#define TIME_BLOODSUCKER_NIGHT 900 // 15 minutes
+#define TIME_BLOODSUCKER_DAY_WARN 90 // 1.5 minutes
+#define TIME_BLOODSUCKER_DAY_FINAL_WARN 25 // 25 sec
+#define TIME_BLOODSUCKER_DAY 60 // 1.5 minutes // 10 is a second, 600 is a minute.
+#define TIME_BLOODSUCKER_BURN_INTERVAL 40 // 4 sec
+
+
+// Over Time, tick down toward a "Solar Flare" of UV buffeting the station. This period is harmful to vamps.
+/obj/effect/sunlight
+ //var/amDay = FALSE
+ var/cancel_me = FALSE
+ var/amDay = FALSE
+ var/time_til_cycle = 0
+
+/obj/effect/sunlight/Initialize()
+ countdown()
+ hud_tick()
+
+/obj/effect/sunlight/proc/countdown()
+ set waitfor = FALSE
+
+ while(!cancel_me)
+
+ time_til_cycle = TIME_BLOODSUCKER_NIGHT
+
+ // Part 1: Night (all is well)
+ while(time_til_cycle > TIME_BLOODSUCKER_DAY_WARN)
+ sleep(10)
+ if(cancel_me)
+ return
+ //sleep(TIME_BLOODSUCKER_NIGHT - TIME_BLOODSUCKER_DAY_WARN)
+ warn_daylight(1,"Solar Flares will bombard the station with dangerous UV in [TIME_BLOODSUCKER_DAY_WARN / 60] minutes. Prepare to seek cover in a coffin or closet.") // time2text <-- use Help On
+ give_home_power() // Give VANISHING ACT power to all vamps with a lair!
+
+ // Part 2: Night Ending
+ while(time_til_cycle > TIME_BLOODSUCKER_DAY_FINAL_WARN)
+ sleep(10)
+ if(cancel_me)
+ return
+ //sleep(TIME_BLOODSUCKER_DAY_WARN - TIME_BLOODSUCKER_DAY_FINAL_WARN)
+ message_admins("BLOODSUCKER NOTICE: Daylight beginning in [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds.)")
+ warn_daylight(2,"Solar Flares are about to bombard the station! You have [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds to find cover!",\
+ "In [TIME_BLOODSUCKER_DAY_FINAL_WARN / 10], your master will be at risk of a Solar Flare. Make sure they find cover!")
+
+ // (FINAL LIL WARNING)
+ while(time_til_cycle > 5)
+ sleep(10)
+ if (cancel_me)
+ return
+ //sleep(TIME_BLOODSUCKER_DAY_FINAL_WARN - 50)
+ warn_daylight(3,"Seek cover, for Sol rises!")
+
+ // Part 3: Night Ending
+ while (time_til_cycle > 0)
+ sleep(10)
+ if (cancel_me)
+ return
+ //sleep(50)
+ warn_daylight(4,"Solar flares bombard the station with deadly UV light!
Stay in cover for the next [TIME_BLOODSUCKER_DAY / 60] minutes or risk Final Death!",\
+ "Solar flares bombard the station with UV light!")
+
+ // Part 4: Day
+ amDay = TRUE
+ message_admins("BLOODSUCKER NOTICE: Daylight Beginning (Lasts for [TIME_BLOODSUCKER_DAY / 60] minutes.)")
+ time_til_cycle = TIME_BLOODSUCKER_DAY
+ sleep(10) // One second grace period.
+ //var/daylight_time = TIME_BLOODSUCKER_DAY
+ var/issued_XP = FALSE
+ while(time_til_cycle > 0)
+ punish_vamps()
+ sleep(TIME_BLOODSUCKER_BURN_INTERVAL)
+ if (cancel_me)
+ return
+ //daylight_time -= TIME_BLOODSUCKER_BURN_INTERVAL
+ // Issue Level Up!
+ if(!issued_XP && time_til_cycle <= 15)
+ issued_XP = TRUE
+ vamps_rank_up()
+
+ warn_daylight(5,"The solar flare has ended, and the daylight danger has passed...for now.",\
+ "The solar flare has ended, and the daylight danger has passed...for now.")
+ amDay = FALSE
+ day_end() // Remove VANISHING ACT power from all vamps who have it! Clear Warnings (sunlight, locker protection)
+ message_admins("BLOODSUCKER NOTICE: Daylight Ended. Resetting to Night (Lasts for [TIME_BLOODSUCKER_NIGHT / 60] minutes.)")
+
+
+/obj/effect/sunlight/proc/hud_tick()
+ set waitfor = FALSE
+ while(!cancel_me)
+ // Update all Bloodsucker sunlight huds
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if(!istype(M) || !istype(M.current))
+ continue
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(istype(bloodsuckerdatum))
+ bloodsuckerdatum.update_sunlight(max(0, time_til_cycle), amDay) // This pings all HUDs
+ sleep(10)
+ time_til_cycle --
+
+/obj/effect/sunlight/proc/warn_daylight(danger_level=0, vampwarn = "", vassalwarn = "")
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if(!istype(M))
+ continue
+ to_chat(M,vampwarn)
+ if(M.current)
+ if(danger_level == 1)
+ M.current.playsound_local(null, 'sound/chatter/griffin_3.ogg', 50 + danger_level, 1)
+ else if(danger_level == 2)
+ M.current.playsound_local(null, 'sound/chatter/griffin_5.ogg', 50 + danger_level, 1)
+ else if(danger_level == 3)
+ M.current.playsound_local(null, 'sound/effects/alert.ogg', 75, 1)
+ else if(danger_level == 4)
+ M.current.playsound_local(null, 'sound/ambience/ambimystery.ogg', 100, 1)
+ else if(danger_level == 5)
+ M.current.playsound_local(null, 'sound/spookoween/ghosty_wind.ogg', 90, 1)
+
+ if(vassalwarn != "")
+ for(var/datum/mind/M in SSticker.mode.vassals)
+ if(!istype(M))
+ continue
+ to_chat(M,vassalwarn)
+
+
+/obj/effect/sunlight/proc/punish_vamps()
+ // Cycle through all vamp antags and check if they're inside a closet.
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if(!istype(M) || !istype(M.current))
+ continue
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(!istype(bloodsuckerdatum))
+ continue
+ // Closets offer SOME protection
+ if(istype(M.current.loc, /obj/structure))
+ // Coffins offer the BEST protection
+ if(istype(M.current.loc, /obj/structure/closet/crate/coffin))
+ SEND_SIGNAL(M.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/coffinsleep)
+ continue
+ else
+ if(!bloodsuckerdatum.warn_sun_locker)
+ to_chat(M, "Your skin sizzles. The [M.current.loc] doesn't protect well against UV bombardment.")
+ bloodsuckerdatum.warn_sun_locker = TRUE
+ M.current.adjustFireLoss(0.5 + bloodsuckerdatum.vamplevel / 2) // M.current.fireloss += 0.5 + bloodsuckerdatum.vamplevel / 2 // Do DIRECT damage. Being spaced was causing this to not occur. setFireLoss(bloodsuckerdatum.vamplevel)
+ M.current.updatehealth()
+ SEND_SIGNAL(M.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/daylight_1)
+ // Out in the Open? Buh Bye
+ else
+ if(!bloodsuckerdatum.warn_sun_burn)
+ if(bloodsuckerdatum.vamplevel > 0)
+ to_chat(M, "The solar flare sets your skin ablaze!")
+ else
+ to_chat(M, "The solar flare scalds your neophyte skin!")
+ bloodsuckerdatum.warn_sun_burn = TRUE
+ if(M.current.fire_stacks <= 0)
+ M.current.fire_stacks = 0
+ if(bloodsuckerdatum.vamplevel > 0)
+ M.current.adjust_fire_stacks(0.2 + bloodsuckerdatum.vamplevel / 10)
+ M.current.IgniteMob()
+ M.current.adjustFireLoss(2 + bloodsuckerdatum.vamplevel) // M.current.fireloss += 2 + bloodsuckerdatum.vamplevel // Do DIRECT damage. Being spaced was causing this to not occur. //setFireLoss(2 + bloodsuckerdatum.vamplevel)
+ M.current.updatehealth()
+ SEND_SIGNAL(M.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/daylight_2)
+
+/obj/effect/sunlight/proc/day_end()
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if(!istype(M) || !istype(M.current))
+ continue
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(!istype(bloodsuckerdatum))
+ continue
+ // Reset Warnings
+ bloodsuckerdatum.warn_sun_locker = FALSE
+ bloodsuckerdatum.warn_sun_burn = FALSE
+ // Remove Dawn Powers
+ for(var/datum/action/bloodsucker/P in bloodsuckerdatum.powers)
+ if(istype(P, /datum/action/bloodsucker/gohome))
+ bloodsuckerdatum.powers -= P
+ P.Remove(M.current)
+
+/obj/effect/sunlight/proc/vamps_rank_up()
+ set waitfor = FALSE
+ // Cycle through all vamp antags and check if they're inside a closet.
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if(!istype(M) || !istype(M.current))
+ continue
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(istype(bloodsuckerdatum))
+ bloodsuckerdatum.RankUp() // Rank up! Must still be in a coffin to level!
+
+/obj/effect/sunlight/proc/give_home_power()
+ // It's late...! Give the "Vanishing Act" gohome power to bloodsuckers.
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if(!istype(M) || !istype(M.current))
+ continue
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(istype(bloodsuckerdatum) && bloodsuckerdatum.lair && !(locate(/datum/action/bloodsucker/gohome) in bloodsuckerdatum.powers))
+ bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/gohome)
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_ui.dm b/code/modules/antagonists/bloodsucker/bloodsucker_ui.dm
new file mode 100644
index 0000000000..b922af6066
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_ui.dm
@@ -0,0 +1,116 @@
+
+
+// For all things visual, such as leveling up
+
+
+// Look up: _vending.dm proc/ui_interact()
+// Malf_Modules.dm proc/use()
+
+/*
+/datum/antagonist/bloodsucker/proc/LevelUpMenu()
+ var/list/dat = list()
+
+ dat += "You have become more ancient.
Direct the path of your blood
"
+ dat += "
"
+
+ // Step One: Decide powers you CAN buy.
+ for(var/pickedpower in typesof(/datum/action/bloodsucker))
+ var/obj/effect/proc_holder/spell/bloodsucker/power = pickedpower
+ // NAME
+ dat += "[power.name]"
+ // COST
+ dat += "[power.name] Vend | "
+ dat == "
"
+
+ var/datum/browser/popup = new(owner.current, "bloodsuckerrank", "Bloodsucker Rank Up")
+ popup.set_content(dat.Join())
+ popup.open()
+
+/datum/antagonist/bloodsucker/Topic(href, href_list)
+ if(..())
+ return
+*/
+
+
+// From browser.dm: /datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null)
+
+
+/*
+ var/list/dat = list()
+ dat += "Select use of processing time: (currently #[processing_time] left.)
"
+ dat += "
"
+ dat += "Install Module:
"
+ dat += "The number afterwards is the amount of processing time it consumes.
"
+ for(var/datum/AI_Module/large/module in possible_modules)
+ dat += "[module.module_name]\[?\] ([module.cost])
"
+ for(var/datum/AI_Module/small/module in possible_modules)
+ dat += "[module.module_name]\[?\] ([module.cost])
"
+ dat += "
"
+ if(temp)
+ dat += "[temp]"
+ var/datum/browser/popup = new(user, "modpicker", "Malf Module Menu")
+ popup.set_content(dat.Join())
+ popup.open()
+*/
+
+/*
+ var/dat = ""
+ var/datum/bank_account/account
+ var/mob/living/carbon/human/H
+ var/obj/item/card/id/C
+ if(ishuman(user))
+ H = user
+ C = H.get_idcard(TRUE)
+
+ if(!C)
+ dat += "No ID Card detected!
"
+ else if (!C.registered_account)
+ dat += "No account on registered ID card!
"
+ if(onstation && C && C.registered_account)
+ account = C.registered_account
+ dat += "Select an item
"
+ dat += ""
+ if(!product_records.len)
+ dat += "
No product loaded!"
+ else
+ var/list/display_records = product_records + coin_records
+ if(extended_inventory)
+ display_records = product_records + coin_records + hidden_records
+ dat += "
"
+ for (var/datum/data/vending_product/R in display_records)
+ var/price_listed = "$[default_price]"
+ var/is_hidden = hidden_records.Find(R)
+ if(is_hidden && !extended_inventory)
+ continue
+ if(R.custom_price)
+ price_listed = "$[R.custom_price]"
+ if(!onstation || account && account.account_job && account.account_job.paycheck_department == payment_department)
+ price_listed = "FREE"
+ if(coin_records.Find(R) || is_hidden)
+ price_listed = "$[R.custom_premium_price ? R.custom_premium_price : extra_price]"
+ dat += "]) | "
+ dat += "[sanitize(R.name)] ([price_listed]) | "
+ if(R.amount > 0 && ((C && C.registered_account && onstation) || (!onstation && isliving(user))))
+ dat += "[R.amount] Vend | "
+ else
+ dat += "Not Available | "
+ dat += "
"
+ dat += "
"
+ dat += "
"
+ if(onstation && C && C.registered_account)
+ dat += "Balance: $[account.account_balance]"
+ if(istype(src, /obj/machinery/vending/snack))
+ dat += "Chef's Food Selection
"
+ dat += ""
+ for (var/O in dish_quants)
+ if(dish_quants[O] > 0)
+ var/N = dish_quants[O]
+ dat += "
Dispense "
+ dat += "
[capitalize(O)] ($[default_price]): [N]"
+ dat += "
"
+
+ var/datum/browser/popup = new(user, "vending", (name))
+ popup.set_content(dat)
+ popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
+ popup.open()
+*/
\ No newline at end of file
diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
new file mode 100644
index 0000000000..febf53c324
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
@@ -0,0 +1,765 @@
+/datum/team/vampireclan
+ name = "Clan" // Teravanni,
+
+/datum/antagonist/bloodsucker
+ name = "Bloodsucker"
+ roundend_category = "bloodsuckers"
+ antagpanel_category = "Bloodsucker"
+ job_rank = ROLE_BLOODSUCKER
+
+ // NAME
+ var/vampname // My Dracula name
+ var/vamptitle // My Dracula title
+ var/vampreputation // My "Surname" or description of my deeds
+ // CLAN
+ var/datum/team/vampireclan/clan
+ var/list/datum/antagonist/vassal/vassals = list()// Vassals under my control. Periodically remove the dead ones.
+ var/datum/mind/creator // Who made me? For both Vassals AND Bloodsuckers (though Master Vamps won't have one)
+ // POWERS
+ var/list/datum/action/powers = list()// Purchased powers
+ var/poweron_feed = FALSE // Am I feeding?
+ var/poweron_masquerade = FALSE
+ // STATS
+ var/vamplevel = 0
+ var/vamplevel_unspent = 1
+ var/regenRate = 0.3 // How many points of Brute do I heal per tick?
+ var/feedAmount = 15 // Amount of blood drawn from a target per tick.
+ var/maxBloodVolume = 600 // Maximum blood a Vamp can hold via feeding. // BLOOD_VOLUME_NORMAL 550 // BLOOD_VOLUME_SAFE 475 //BLOOD_VOLUME_OKAY 336 //BLOOD_VOLUME_BAD 224 // BLOOD_VOLUME_SURVIVE 122
+ // OBJECTIVES
+ var/list/datum/objective/objectives_given = list() // For removal if needed.
+ var/area/lair
+ var/obj/structure/closet/crate/coffin
+ // TRACKING
+ var/foodInGut = 0 // How much food to throw up later. You shouldn't have eaten that.
+ var/warn_sun_locker = FALSE // So we only get the locker burn message once per day.
+ var/warn_sun_burn = FALSE // So we only get the sun burn message once per day.
+ var/had_toxlover = FALSE
+ // LISTS
+ var/static/list/defaultTraits = list (TRAIT_STABLEHEART, TRAIT_NOBREATH, TRAIT_SLEEPIMMUNE, TRAIT_NOCRITDAMAGE, TRAIT_RESISTCOLD, TRAIT_RADIMMUNE, TRAIT_VIRUSIMMUNE, TRAIT_NIGHT_VISION, \
+ TRAIT_NOSOFTCRIT, TRAIT_NOHARDCRIT, TRAIT_AGEUSIA, TRAIT_COLDBLOODED, TRAIT_NONATURALHEAL, TRAIT_NOMARROW, TRAIT_NOPULSE, TRAIT_NOCLONE)
+ // NOTES: TRAIT_AGEUSIA <-- Doesn't like flavors.
+ // REMOVED: TRAIT_NODEATH
+ // TO ADD:
+ //var/static/list/defaultOrgans = list (/obj/item/organ/heart/vampheart,/obj/item/organ/heart/vampeyes)
+
+/datum/antagonist/bloodsucker/on_gain()
+ SSticker.mode.bloodsuckers |= owner // Add if not already in here (and you might be, if you were picked at round start)
+ SSticker.mode.check_start_sunlight()// Start Sunlight? (if first Vamp)
+ SelectFirstName()// Name & Title
+ SelectTitle(am_fledgling=TRUE) // If I have a creator, then set as Fledgling.
+ SelectReputation(am_fledgling=TRUE)
+ AssignStarterPowersAndStats()// Give Powers & Stats
+ forge_bloodsucker_objectives()// Objectives & Team
+ update_bloodsucker_icons_added(owner.current, "bloodsucker") // Add Antag HUD
+ LifeTick() // Run Life Function
+ . = ..()
+
+
+/datum/antagonist/bloodsucker/on_removal()
+ SSticker.mode.bloodsuckers -= owner
+ SSticker.mode.check_cancel_sunlight()// End Sunlight? (if last Vamp)
+ ClearAllPowersAndStats()// Clear Powers & Stats
+ clear_bloodsucker_objectives() // Objectives
+ update_bloodsucker_icons_removed(owner.current)// Clear Antag HUD
+ . = ..()
+
+
+
+/datum/antagonist/bloodsucker/greet()
+ var/fullname = ReturnFullName(TRUE)
+ to_chat(owner, "You are [fullname], a bloodsucking vampire!
")
+ owner.announce_objectives()
+ to_chat(owner, "* You regenerate your health slowly, you're weak to fire, and you depend on blood to survive. Allow your stolen blood to run too low, and you will find yourself at \
+ risk of being discovered!
")
+ //to_chat(owner, "As an immortal, your power is linked to your age. The older you grow, the more abilities you will have access to.")
+ var/vamp_greet
+ vamp_greet += "* Other Bloodsuckers are not necessarily your friends, but your survival may depend on cooperation. Betray them at your own discretion and peril.
"
+ vamp_greet += "* Use \",b\" to speak your ancient Bloodsucker language.
"
+ vamp_greet += "Bloodsucker Tip: Rest in a Coffin to claim it, and that area, as your lair.
"
+ vamp_greet += "Bloodsucker Tip: Fear the daylight! Solar flares will bombard the station periodically, and only your coffin can guarantee your safety.
"
+ vamp_greet += "Bloodsucker Tip: You wont loose blood if you are unconcious or sleeping. Use this to your advantage to conserve blood.
"
+ to_chat(owner, vamp_greet)
+
+ owner.current.playsound_local(null, 'sound/bloodsucker/BloodsuckerAlert.ogg', 100, FALSE, pressure_affected = FALSE)
+ antag_memory += "Although you were born a mortal, in un-death you earned the name [fullname].
"
+
+
+/datum/antagonist/bloodsucker/farewell()
+ owner.current.visible_message("[owner.current]'s skin flushes with color, their eyes growing glossier. They look...alive.",\
+ "With a snap, your curse has ended. You are no longer a Bloodsucker. You live once more!")
+ // Refill with Blood
+ owner.current.blood_volume = max(owner.current.blood_volume,BLOOD_VOLUME_SAFE)
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+/datum/antagonist/bloodsucker/proc/SelectFirstName()
+ // Names (EVERYONE gets one))
+ if (owner.current.gender == MALE)
+ vampname = pick("Desmond","Rudolph","Dracul","Vlad","Pyotr","Gregor","Cristian","Christoff","Marcu","Andrei","Constantin","Gheorghe","Grigore","Ilie","Iacob","Luca","Mihail","Pavel","Vasile","Octavian","Sorin", \
+ "Sveyn","Aurel","Alexe","Iustin","Theodor","Dimitrie","Octav","Damien","Magnus","Caine","Abel", // Romanian/Ancient
+ "Lucius","Gaius","Otho","Balbinus","Arcadius","Romanos","Alexios","Vitellius", // Latin
+ "Melanthus","Teuthras","Orchamus","Amyntor","Axion", // Greek
+ "Thoth","Thutmose","Osorkon,","Nofret","Minmotu","Khafra", // Egyptian
+ "Dio")
+
+ else
+ vampname = pick("Islana","Tyrra","Greganna","Pytra","Hilda","Andra","Crina","Viorela","Viorica","Anemona","Camelia","Narcisa","Sorina","Alessia","Sophia","Gladda","Arcana","Morgan","Lasarra","Ioana","Elena", \
+ "Alina","Rodica","Teodora","Denisa","Mihaela","Svetla","Stefania","Diyana","Kelssa","Lilith", // Romanian/Ancient
+ "Alexia","Athanasia","Callista","Karena","Nephele","Scylla","Ursa", // Latin
+ "Alcestis","Damaris","Elisavet","Khthonia","Teodora", // Greek
+ "Nefret","Ankhesenpep") // Egyptian
+
+/datum/antagonist/bloodsucker/proc/SelectTitle(am_fledgling = 0, forced = FALSE)
+ // Already have Title
+ if (!forced && vamptitle != null)
+ return
+ // Titles [Master]
+ if (!am_fledgling)
+ if (owner.current.gender == MALE)
+ vamptitle = pick ("Count","Baron","Viscount","Prince","Duke","Tzar","Dreadlord","Lord","Master")
+ else
+ vamptitle = pick ("Countess","Baroness","Viscountess","Princess","Duchess","Tzarina","Dreadlady","Lady","Mistress")
+ to_chat(owner, "You have earned a title! You are now known as [ReturnFullName(TRUE)]!")
+ // Titles [Fledgling]
+ else
+ vamptitle = null
+
+/datum/antagonist/bloodsucker/proc/SelectReputation(am_fledgling = 0, forced=FALSE)
+ // Already have Reputation
+ if (!forced && vampreputation != null)
+ return
+ // Reputations [Master]
+ if (!am_fledgling)
+ vampreputation = pick("Butcher","Blood Fiend","Crimson","Red","Black","Terror","Nightman","Feared","Ravenous","Fiend","Malevolent","Wicked","Ancient","Plaguebringer","Sinister","Forgotten","Wretched","Baleful", \
+ "Inqisitor","Harvester","Reviled","Robust","Betrayer","Destructor","Damned","Accursed","Terrible","Vicious","Profane","Vile","Depraved","Foul","Slayer","Manslayer","Sovereign","Slaughterer", \
+ "Forsaken","Mad","Dragon","Savage","Villainous","Nefarious","Inquisitor","Marauder","Horrible","Immortal","Undying","Overlord","Corrupt","Hellspawn","Tyrant","Sanguineous")
+ if (owner.current.gender == MALE)
+ if (prob(10)) // Gender override
+ vampreputation = pick("King of the Damned", "Blood King", "Emperor of Blades", "Sinlord", "God-King")
+ else
+ if (prob(10)) // Gender override
+ vampreputation = pick("Queen of the Damned", "Blood Queen", "Empress of Blades", "Sinlady", "God-Queen")
+
+ to_chat(owner, "You have earned a reputation! You are now known as [ReturnFullName(TRUE)]!")
+
+ // Reputations [Fledgling]
+ else
+ vampreputation = pick ("Crude","Callow","Unlearned","Neophyte","Novice","Unseasoned","Fledgling","Young","Neonate","Scrapling","Untested","Unproven","Unknown","Newly Risen","Born","Scavenger","Unknowing",\
+ "Unspoiled","Disgraced","Defrocked","Shamed","Meek","Timid","Broken")//,"Fresh")
+
+
+/datum/antagonist/bloodsucker/proc/AmFledgling()
+ return !vamptitle
+
+/datum/antagonist/bloodsucker/proc/ReturnFullName(var/include_rep=0)
+
+ var/fullname
+ // Name First
+ fullname = (vampname ? vampname : owner.current.name)
+ // Title
+ if(vamptitle)
+ fullname = vamptitle + " " + fullname
+ // Rep
+ if(include_rep && vampreputation)
+ fullname = fullname + " the " + vampreputation
+
+ return fullname
+
+
+/datum/antagonist/bloodsucker/proc/BuyPower(datum/action/bloodsucker/power)//(obj/effect/proc_holder/spell/power)
+ powers += power
+ power.Grant(owner.current)// owner.AddSpell(power)
+
+/datum/antagonist/bloodsucker/proc/AssignStarterPowersAndStats()
+ // Blood/Rank Counter
+ add_hud()
+ update_hud(TRUE) // Set blood value, current rank
+ // Powers
+ BuyPower(new /datum/action/bloodsucker/feed)
+ BuyPower(new /datum/action/bloodsucker/masquerade)
+ BuyPower(new /datum/action/bloodsucker/veil)
+ // Traits
+ for (var/T in defaultTraits)
+ ADD_TRAIT(owner.current, T, "bloodsucker")
+ if(HAS_TRAIT(owner.current, TRAIT_TOXINLOVER)) //No slime bonuses here, no thank you
+ had_toxlover = TRUE
+ REMOVE_TRAIT(owner.current, TRAIT_TOXINLOVER, "species")
+ // Traits: Species
+ if(ishuman(owner.current))
+ var/mob/living/carbon/human/H = owner.current
+ var/datum/species/S = H.dna.species
+ S.species_traits |= DRINKSBLOOD
+ // Clear Addictions
+ owner.current.reagents.addiction_list = list() // Start over from scratch. Lucky you! At least you're not addicted to blood anymore (if you were)
+ // Stats
+ if(ishuman(owner.current))
+ var/mob/living/carbon/human/H = owner.current
+ var/datum/species/S = H.dna.species
+ // Make Changes
+ S.brutemod *= 0.5 // <-------------------- Start small, but burn mod increases based on rank!
+ S.coldmod = 0
+ S.stunmod *= 0.25
+ S.siemens_coeff *= 0.75 //base electrocution coefficient 1
+ //S.heatmod += 0.5 // Heat shouldn't affect. Only Fire.
+ //S.punchstunthreshold = 8 //damage at which punches from this race will stun 9
+ S.punchdamagelow += 1 //lowest possible punch damage 0
+ S.punchdamagehigh += 1 //highest possible punch damage 9
+ // Clown
+ if(istype(H) && owner.assigned_role == "Clown")
+ H.dna.remove_mutation(CLOWNMUT)
+ to_chat(H, "As a vampiric clown, you are no longer a danger to yourself. Your nature is subdued.")
+ // Physiology
+ CheckVampOrgans() // Heart, Eyes
+ // Language
+ owner.current.grant_language(/datum/language/vampiric)
+ // Soul
+ //owner.current.hellbound = TRUE Causes wierd stuff
+ owner.hasSoul = FALSE // If false, renders the character unable to sell their soul.
+ owner.isholy = FALSE // is this person a chaplain or admin role allowed to use bibles
+ // Disabilities
+ CureDisabilities()
+
+/datum/antagonist/bloodsucker/proc/ClearAllPowersAndStats()
+ // Blood/Rank Counter
+ remove_hud()
+ // Powers
+ while(powers.len)
+ var/datum/action/bloodsucker/power = pick(powers)
+ powers -= power
+ power.Remove(owner.current)
+ // owner.RemoveSpell(power)
+ // Traits
+ for(var/T in defaultTraits)
+ REMOVE_TRAIT(owner.current, T, "bloodsucker")
+ if(had_toxlover == TRUE)
+ ADD_TRAIT(owner.current, TRAIT_TOXINLOVER, "species")
+
+ // Traits: Species
+ if(ishuman(owner.current))
+ var/mob/living/carbon/human/H = owner.current
+ H.set_species(H.dna.species.type)
+ // Stats
+ if(ishuman(owner.current))
+ var/mob/living/carbon/human/H = owner.current
+ H.set_species(H.dna.species.type)
+ // Clown
+ if(istype(H) && owner.assigned_role == "Clown")
+ H.dna.add_mutation(CLOWNMUT)
+ // NOTE: Use initial() to return things to default!
+ // Physiology
+ owner.current.regenerate_organs()
+ // Update Health
+ owner.current.setMaxHealth(100)
+ // Language
+ owner.current.remove_language(/datum/language/vampiric)
+ // Soul
+ if (owner.soulOwner == owner) // Return soul, if *I* own it.
+ owner.hasSoul = TRUE
+//owner.current.hellbound = FALSE
+
+datum/antagonist/bloodsucker/proc/RankUp()
+ set waitfor = FALSE
+ if(!owner || !owner.current)
+ return
+ vamplevel_unspent ++
+ // Spend Rank Immediately?
+ if(istype(owner.current.loc, /obj/structure/closet/crate/coffin))
+ SpendRank()
+ else
+ to_chat(owner, "You have grown more ancient! Sleep in a coffin that you have claimed to thicken your blood and become more powerful.")
+ if(vamplevel_unspent >= 2)
+ to_chat(owner, "Bloodsucker Tip: If you cannot find or steal a coffin to use, they can be built from wooden planks.
")
+
+datum/antagonist/bloodsucker/proc/LevelUpPowers()
+ for(var/datum/action/bloodsucker/power in powers)
+ power.level_current ++
+
+datum/antagonist/bloodsucker/proc/SpendRank()
+ set waitfor = FALSE
+ if (vamplevel_unspent <= 0 || !owner || !owner.current || !owner.current.client)
+ return
+ /////////
+ // Powers
+ //TODO: Make this into a radial
+ // Purchase Power Prompt
+ var/list/options = list() // Taken from gasmask.dm, for Clown Masks.
+ for(var/pickedpower in typesof(/datum/action/bloodsucker))
+ var/datum/action/bloodsucker/power = pickedpower
+ // If I don't own it, and I'm allowed to buy it.
+ if(!(locate(power) in powers) && initial(power.bloodsucker_can_buy))
+ options[initial(power.name)] = power // TESTING: After working with TGUI, it seems you can use initial() to view the variables inside a path?
+ options["\[ Not Now \]"] = null
+ // Abort?
+ if(options.len > 1)
+ var/choice = input(owner.current, "You have the opportunity to grow more ancient. Select a power to advance your Rank.", "Your Blood Thickens...") in options
+ // Cheat-Safety: Can't keep opening/closing coffin to spam levels
+ if(vamplevel_unspent <= 0) // Already spent all your points, and tried opening/closing your coffin, pal.
+ return
+ if(!istype(owner.current.loc, /obj/structure/closet/crate/coffin))
+ to_chat(owner.current, "Return to your coffin to advance your Rank.")
+ return
+ if(!choice || !options[choice] || (locate(options[choice]) in powers)) // ADDED: Check to see if you already have this power, due to window stacking.
+ to_chat(owner.current, "You prevent your blood from thickening just yet, but you may try again later.")
+ return
+ // Buy New Powers
+ var/datum/action/bloodsucker/P = options[choice]
+ BuyPower(new P)
+ to_chat(owner.current, "You have learned [initial(P.name)]!")
+ else
+ to_chat(owner.current, "You grow more ancient by the night!")
+ /////////
+ // Advance Powers (including new)
+ LevelUpPowers()
+ ////////
+ // Advance Stats
+ if(ishuman(owner.current))
+ var/mob/living/carbon/human/H = owner.current
+ var/datum/species/S = H.dna.species
+ S.burnmod *= 0.025 // Slightly more burn damage
+ S.stunmod *= 0.95 // Slightly less stun time.
+ S.punchdamagelow += 0.5
+ S.punchdamagehigh += 0.5 // NOTE: This affects the hitting power of Brawn.
+ // More Health
+ owner.current.setMaxHealth(owner.current.maxHealth + 5)
+ // Vamp Stats
+ regenRate += 0.05 // Points of brute healed (starts at 0.3)
+ feedAmount += 2 // Increase how quickly I munch down vics (15)
+ maxBloodVolume += 50 // Increase my max blood (600)
+ /////////
+ vamplevel ++
+ vamplevel_unspent --
+
+ // Assign True Reputation
+ if(vamplevel == 4)
+ SelectReputation(am_fledgling = FALSE, forced = TRUE)
+ to_chat(owner.current, "You are now a rank [vamplevel] Bloodsucker. Your strength, resistence, health, feed rate, regen rate, and maximum blood have all increased!")
+ to_chat(owner.current, "Your existing powers have all ranked up as well!")
+ update_hud(TRUE)
+ owner.current.playsound_local(null, 'sound/effects/pope_entry.ogg', 25, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+//This handles the application of antag huds/special abilities
+/datum/antagonist/bloodsucker/apply_innate_effects(mob/living/mob_override)
+ return
+
+//This handles the removal of antag huds/special abilities
+/datum/antagonist/bloodsucker/remove_innate_effects(mob/living/mob_override)
+ return
+
+//Assign default team and creates one for one of a kind team antagonists
+/datum/antagonist/bloodsucker/create_team(datum/team/team)
+ return
+
+// Create Objectives
+/datum/antagonist/bloodsucker/proc/forge_bloodsucker_objectives() // Fledgling vampires can have different objectives.
+
+ // TEAM
+ //clan = new /datum/team/vampireclan(owner)
+
+
+ // Lair Objective: Create a Lair
+ var/datum/objective/bloodsucker/lair/lair_objective = new
+ lair_objective.owner = owner
+ lair_objective.generate_objective()
+ add_objective(lair_objective)
+
+ // Protege Objective
+ var/datum/objective/bloodsucker/protege/protege_objective = new
+ protege_objective.owner = owner
+ protege_objective.generate_objective()
+ add_objective(protege_objective)
+
+ if (rand(0,1) == 0)
+ // Heart Thief Objective
+ var/datum/objective/bloodsucker/heartthief/heartthief_objective = new
+ heartthief_objective.owner = owner
+ heartthief_objective.generate_objective()
+ add_objective(heartthief_objective)
+
+ else
+ // Solars Objective
+ var/datum/objective/bloodsucker/solars/solars_objective = new
+ solars_objective.owner = owner
+ solars_objective.generate_objective()
+ add_objective(solars_objective)
+
+ // Survive Objective
+ var/datum/objective/bloodsucker/survive/survive_objective = new
+ survive_objective.owner = owner
+ survive_objective.generate_objective()
+ add_objective(survive_objective)
+
+
+/datum/antagonist/bloodsucker/proc/add_objective(var/datum/objective/O)
+ objectives += O
+ objectives_given += O
+
+/datum/antagonist/bloodsucker/proc/clear_bloodsucker_objectives()
+
+ var/datum/team/team = get_team()
+ if(team)
+ team.remove_member(owner)
+
+ for(var/O in objectives_given)
+ objectives -= O
+ qdel(O)
+ objectives_given = list() // Traitors had this, so I added it. Not sure why.
+
+
+/datum/antagonist/bloodsucker/get_team()
+ return clan
+
+//Name shown on antag list
+/datum/antagonist/bloodsucker/antag_listing_name()
+ return ..() + "([ReturnFullName(TRUE)])"
+
+//Whatever interesting things happened to the antag admins should know about
+//Include additional information about antag in this part
+/datum/antagonist/bloodsucker/antag_listing_status()
+ if (owner && owner.AmFinalDeath())
+ return "Final Death"
+ return ..()
+
+
+
+//Individual roundend report
+/datum/antagonist/bloodsucker/roundend_report()
+ // Get the default Objectives
+ var/list/report = list()
+
+ // Vamp Name
+ report += "
"
+
+ // Default Report
+ report += ..()
+
+ // Now list their vassals
+ if (vassals.len > 0)
+ report += ""
+ for (var/datum/antagonist/vassal/V in vassals)
+ if (V.owner)
+ var/jobname = V.owner.assigned_role ? "the [V.owner.assigned_role]" : ""
+ report += "[V.owner.name] [jobname]"
+
+ return report.Join("
")
+
+//Displayed at the start of roundend_category section, default to roundend_category header
+/datum/antagonist/bloodsucker/roundend_report_header()
+ return "
"
+
+
+
+
+
+// 2019 Breakdown of Bloodsuckers:
+
+// G A M E P L A Y
+//
+// Bloodsuckers should be inherrently powerful: they never stay dead, and they can hide in plain sight
+// better than any other antagonist aboard the station.
+//
+// However, only elder Bloodsuckers are the powerful creatures of legend. Ranking up as a Bloodsucker
+// should impart slight strength and health benefits, as well as powers that can grow over time. But
+// their weaknesses should grow as well, and not just to fire.
+
+
+// A B I L I T I E S
+//
+// * Bloodsuckers can FEIGN LIFE + DEATH.
+// Feigning LIFE:
+// - Warms up the body
+// - Creates a heartbeat
+// - Fake blood amount (550)
+// Feign DEATH: Not yet done
+// - When lying down or sitting, you appear "dead and lifeless"
+
+// * Bloodsuckers REGENERATE
+// - Brute damage heals rather rapidly. Burn damage heals slowly.
+// - Healing is reduced when hungry or starved.
+// - Burn does not heal when starved. A starved vampire remains "dead" until burns can heal.
+// - Bodyparts and organs regrow in Torpor (except for the Heart and Brain).
+//
+// * Bloodsuckers are IMMORTAL
+// - Brute damage cannot destroy them (and it caps very low, so they don't stack too much)
+// - Burn damage can only kill them at very high amounts.
+// - Removing the head kills the vamp forever.
+// - Removing the heart kills the vamp until replaced.
+//
+// * Bloodsuckers are DEAD
+// - They do not breathe.
+// - Cold affects them less.
+// - They are immune to disease (but can spread it)
+// - Food is useless and cause sickness.
+// - Nothing can heal the vamp other than his own blood.
+//
+// * Bloodsuckers are PREDATORS
+// - They detect life/heartbeats nearby.
+// - They know other predators instantly (Vamps, Werewolves, and alien types) regardless of disguise.
+//
+//
+//
+// * Bloodsuckers enter Torpor when DEAD or RESTING in coffin
+// - Torpid vampires regenerate their health. Coffins negate cost and speed up the process.
+// ** To rest in a coffin, either SLEEP or CLOSE THE LID while you're in it. You will be given a prompt to sleep until healed. Healing in a coffin costs NO blood!
+//
+
+
+
+// O B J E C T I V E S
+//
+//
+//
+//
+// 1) GROOM AN HEIR: Find a person with appropriate traits (hair, blood type, gender) to be turned as a Vampire. Before they rise, they must be properly trained. Raise them to great power after their change.
+//
+// 2) BIBLIOPHILE: Research objects of interest, study items looking for clues of ancient secrets, and hunt down the clues to a Vampiric artifact of horrible power.
+//
+// 3) CRYPT LORD: Build a terrifying sepulcher to your evil, with servants to lavish upon you in undeath. The trappings of a true crypt lord come at grave cost.
+//
+// 4) GOURMOND: Oh, to taste all the delicacies the station has to offer! DRINK ## BLOOD FROM VICTIMS WHO LIVE, EAT ## ORGANS FROM VICTIMS WHO LIVE
+
+
+// Vassals
+//
+// - Loyal to (and In Love With) Master
+// - Master can speak to, summon, or punish his Vassals, even while asleep or torpid.
+// - Master may have as many Vassals as Rank
+// - Vassals see their Master's speech emboldened!
+
+
+
+
+
+
+
+
+// Dev Notes
+//
+// HEALING: Maybe Vamps metabolize specially? Like, they slowly drip their own blood into their system?
+// - Give Vamps their own metabolization proc, perhaps?
+// ** shadowpeople.dm has rules for healing.
+//
+// KILLING: It's almost impossible to track who someone has directly killed. But an Admin could be given
+// an easy way to whip a Bloodsucker for cruel behavior, as a RP mechanic but not a punishment.
+// **
+//
+// HUNGER: Just keep adjusting mob's nutrition to Blood Hunger level. No need to cancel nutrition from eating.
+// ** mob.dm /set_nutrition()
+// ** snacks.dm / attack() <-- Stop food from doing anything?
+
+// ORGANS: Liver
+// ** life.dm /handle_liver()
+//
+// CORPSE: Most of these effects likely go away when using "Masquerade" to appear alive.
+// ** status_procs.dm /adjust_bodytemperature()
+// ** traits.dm /TRAIT_NOBREATH /TRAIT_SLEEPIMMUNE /TRAIT_RESISTCOLD /TRAIT_RADIMMUNE /TRAIT_VIRUSIMMUNE
+// * MASQUERADE ON/OFF: /TRAIT_FAKEDEATH (M)
+// * /TRAIT_NIGHT_VISION
+// * /TRAIT_DEATHCOMA <-- This basically makes you immobile. When using status_procs /fakedeath(), make sure to remove Coma unless we're in Torpor!
+// * /TRAIT_NODEATH <--- ???
+// ** species /NOZOMBIE
+// * ADD: TRAIT_COLDBLOODED <-- add to carbon/life.dm /natural_bodytemperature_stabilization()
+//
+// MASQUERADE Appear as human!
+// ** examine.dm /examine() <-- Change "blood_volume < BLOOD_VOLUME_SAFE" to a new examine
+//
+// NOSFERATU ** human.add_trait(TRAIT_DISFIGURED, "insert_vamp_datum_here") <-- Makes you UNKNOWN unless your ID says otherwise.
+// STEALTH ** human_helpers.dm /get_visible_name() ** shadowpeople.dm has rules for Light.
+//
+// FRENZY ** living.dm /update_mobility() (USED TO be update_canmove)
+//
+// PREDATOR See other Vamps!
+// * examine.dm /examine()
+//
+// WEAKNESSES: -Poor mood in Chapel or near Chaplain. -Stamina damage from Bible
+
+
+
+ //message_admins("DEBUG3: attempt_cast() [name] / [user_C.handcuffed] ")
+
+
+// TODO:
+//
+// Death (fire, heart, brain, head)
+// Disable Life: BLOOD
+// Body Temp
+// Spend blood over time (more if imitating life) (none if sleeping in coffin)
+// Auto-Heal (brute to 0, fire to 99) (toxin/o2 always 0)
+//
+// Hud Icons
+// UI Blood Counter
+// Examine Name (+Masquerade, only "Dead and lifeless" if not standing?)
+//
+//
+// Turn vamps
+// Create vassals
+//
+
+
+// FIX LIST
+//
+
+
+/////////////////////////////////////
+
+ // HUD! //
+
+/datum/antagonist/bloodsucker/proc/update_bloodsucker_icons_added(datum/mind/m)
+ var/datum/atom_hud/antag/vamphud = GLOB.huds[ANTAG_HUD_BLOODSUCKER]
+ vamphud.join_hud(owner.current)
+ set_antag_hud(owner.current, "bloodsucker") // "bloodsucker"
+ owner.current.hud_list[ANTAG_HUD].icon = image('icons/mob/hud.dmi', owner.current, "bloodsucker") //Check prepare_huds in mob.dm to see why.
+
+/datum/antagonist/bloodsucker/proc/update_bloodsucker_icons_removed(datum/mind/m)
+ var/datum/atom_hud/antag/vamphud = GLOB.huds[ANTAG_HUD_BLOODSUCKER]
+ vamphud.leave_hud(owner.current)
+ set_antag_hud(owner.current, null)
+
+/datum/atom_hud/antag/bloodsucker // from hud.dm in /datums/ Also see data_huds.dm + antag_hud.dm
+
+/datum/atom_hud/antag/bloodsucker/add_to_single_hud(mob/M, atom/A)
+ if (!check_valid_hud_user(M,A)) // FULP: This checks if the Mob is a Vassal, and if the Atom is his master OR on his team.
+ return
+ ..()
+
+/datum/atom_hud/antag/bloodsucker/proc/check_valid_hud_user(mob/M, atom/A) // Remember: A is being added to M's hud. Because M's hud is a /antag/vassal hud, this means M is the vassal here.
+ // Ghost Admins always see Bloodsuckers/Vassals
+ if (isobserver(M))
+ return TRUE
+ // GOAL: Vassals see their Master and his other Vassals.
+ // GOAL: Vassals can BE seen by their Bloodsucker and his other Vassals.
+ // GOAL: Bloodsuckers can see each other.
+ if (!M || !A || !ismob(A) || !M.mind)// || !A.mind)
+ return FALSE
+ var/mob/A_mob = A
+ if (!A_mob.mind)
+ return FALSE
+ // Find Datums: Bloodsucker
+ var/datum/antagonist/bloodsucker/atom_B = A_mob.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ var/datum/antagonist/bloodsucker/mob_B = M.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ // Check 1) Are we both Bloodsuckers?
+ if (atom_B && mob_B)
+ return TRUE
+ // Find Datums: Vassal
+ var/datum/antagonist/vassal/atom_V = A_mob.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ var/datum/antagonist/vassal/mob_V = M.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ // Check 2) If they are a BLOODSUCKER, then are they my Master?
+ if (mob_V && atom_B == mob_V.master)
+ return TRUE // SUCCESS!
+ // Check 3) If I am a BLOODSUCKER, then are they my Vassal?
+ if (mob_B && atom_V && (atom_V in mob_B.vassals))
+ return TRUE // SUCCESS!
+ // Check 4) If we are both VASSAL, then do we have the same master?
+ if (atom_V && mob_V && atom_V.master == mob_V.master)
+ return TRUE // SUCCESS!
+ return FALSE
+
+
+
+ /////////////////////////////////////
+
+
+ // BLOOD COUNTER & RANK MARKER ! //
+
+#define ui_sunlight_display "WEST:6,CENTER-0:0" // 6 pixels to the right, zero tiles & 5 pixels DOWN.
+#define ui_blood_display "WEST:6,CENTER-1:0" // 1 tile down
+#define ui_vamprank_display "WEST:6,CENTER-2:-5" // 2 tiles down
+
+/datum/hud
+ var/obj/screen/bloodsucker/blood_counter/blood_display
+ var/obj/screen/bloodsucker/rank_counter/vamprank_display
+ var/obj/screen/bloodsucker/sunlight_counter/sunlight_display
+
+/datum/antagonist/bloodsucker/proc/add_hud()
+ return
+
+/datum/antagonist/bloodsucker/proc/remove_hud()
+ // No Hud? Get out.
+ if (!owner.current.hud_used)
+ return
+ owner.current.hud_used.blood_display.invisibility = INVISIBILITY_ABSTRACT
+ owner.current.hud_used.vamprank_display.invisibility = INVISIBILITY_ABSTRACT
+ owner.current.hud_used.sunlight_display.invisibility = INVISIBILITY_ABSTRACT
+
+/datum/antagonist/bloodsucker/proc/update_hud(updateRank=FALSE)
+ // No Hud? Get out.
+ if(!owner.current.hud_used)
+ return
+ // Update Blood Counter
+ if (owner.current.hud_used.blood_display)
+ var/valuecolor = "#FF6666"
+ if(owner.current.blood_volume > BLOOD_VOLUME_SAFE)
+ valuecolor = "#FFDDDD"
+ else if(owner.current.blood_volume > BLOOD_VOLUME_BAD)
+ valuecolor = "#FFAAAA"
+ owner.current.hud_used.blood_display.update_counter(owner.current.blood_volume, valuecolor)
+
+ // Update Rank Counter
+ if(owner.current.hud_used.vamprank_display)
+ var/valuecolor = vamplevel_unspent ? "#FFFF00" : "#FF0000"
+ owner.current.hud_used.vamprank_display.update_counter(vamplevel, valuecolor)
+ if(updateRank) // Only change icon on special request.
+ owner.current.hud_used.vamprank_display.icon_state = (vamplevel_unspent > 0) ? "rank_up" : "rank"
+
+
+/obj/screen/bloodsucker
+ invisibility = INVISIBILITY_ABSTRACT
+
+/obj/screen/bloodsucker/proc/clear()
+ invisibility = INVISIBILITY_ABSTRACT
+
+/obj/screen/bloodsucker/proc/update_counter(value, valuecolor)
+ invisibility = 0 // Make Visible
+
+/obj/screen/bloodsucker/blood_counter // NOTE: Look up /obj/screen/devil/soul_counter in _onclick / hud / human.dm
+ icon = 'icons/mob/actions/bloodsucker.dmi'//'icons/mob/screen_gen.dmi'
+ name = "Blood Consumed"
+ icon_state = "blood_display"//"power_display"
+ screen_loc = ui_blood_display
+
+/obj/screen/bloodsucker/blood_counter/update_counter(value, valuecolor)
+ ..()
+ maptext = "[round(value,1)]
"
+
+/obj/screen/bloodsucker/rank_counter
+ name = "Bloodsucker Rank"
+ icon = 'icons/mob/actions/bloodsucker.dmi'
+ icon_state = "rank"
+ screen_loc = ui_vamprank_display
+
+/obj/screen/bloodsucker/rank_counter/update_counter(value, valuecolor)
+ ..()
+ maptext = "[round(value,1)]
"
+
+/obj/screen/bloodsucker/sunlight_counter
+ icon = 'icons/mob/actions/bloodsucker.dmi'
+ name = "Solar Flare Timer"
+ icon_state = "sunlight_night"
+ screen_loc = ui_sunlight_display
+
+/datum/antagonist/bloodsucker/proc/update_sunlight(value, amDay = FALSE)
+ // No Hud? Get out.
+ if (!owner.current.hud_used)
+ return
+ // Update Sun Time
+ if (owner.current.hud_used.sunlight_display)
+ var/valuecolor = "#BBBBFF"
+ if (amDay)
+ valuecolor = "#FF5555"
+ else if(value <= 25)
+ valuecolor = "#FFCCCC"
+ else if(value < 10)
+ valuecolor = "#FF5555"
+ var/value_string = (value >= 60) ? "[round(value / 60, 1)] m" : "[round(value,1)] s"
+ owner.current.hud_used.sunlight_display.update_counter( value_string, valuecolor )
+ owner.current.hud_used.sunlight_display.icon_state = "sunlight_" + (amDay ? "day":"night")
+
+
+/obj/screen/bloodsucker/sunlight_counter/update_counter(value, valuecolor)
+ ..()
+ maptext = "[value]
"
diff --git a/code/modules/antagonists/bloodsucker/datum_hunter.dm b/code/modules/antagonists/bloodsucker/datum_hunter.dm
new file mode 100644
index 0000000000..2d680d0e09
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/datum_hunter.dm
@@ -0,0 +1,295 @@
+/*
+#define HUNTER_SCAN_MIN_DISTANCE 8
+#define HUNTER_SCAN_MAX_DISTANCE 35
+#define HUNTER_SCAN_PING_TIME 20 //5s update time.
+
+
+/datum/antagonist/vamphunter
+ name = "Hunter"
+ roundend_category = "hunters"
+ antagpanel_category = "Monster Hunter"
+ job_rank = ROLE_MONSTERHUNTER
+ var/list/datum/action/powers = list()// Purchased powers
+ var/list/datum/objective/objectives_given = list() // For removal if needed.
+ var/datum/martial_art/my_kungfu // Hunters know a lil kung fu.
+ var/bad_dude = FALSE // Every first hunter spawned is a SHIT LORD.
+
+
+/datum/antagonist/vamphunter/on_gain()
+
+ SSticker.mode.vamphunters |= owner // Add if not already in here (and you might be, if you were picked at round start)
+
+ // Hunter Pinpointer
+ //owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition)
+
+ // Give Hunter Power
+ var/datum/action/P = new /datum/action/bloodsucker/trackvamp
+ P.Grant(owner.current)
+
+ // Give Hunter Martial Arts
+ //if (rand(1,3) == 1)
+ // var/datum/martial_art/pick_type = pick (/datum/martial_art/cqc, /datum/martial_art/krav_maga, /datum/martial_art/cqc, /datum/martial_art/krav_maga, /datum/martial_art/wrestling) // /datum/martial_art/boxing <--- doesn't include grabbing, so don't use!
+ // my_kungfu = new pick_type //pick (/datum/martial_art/boxing, /datum/martial_art/cqc) // ick_type
+ // my_kungfu.teach(owner.current, 0)
+
+ // Give Hunter Objective
+ var/datum/objective/bloodsucker/monsterhunter/monsterhunter_objective = new
+ monsterhunter_objective.owner = owner
+ monsterhunter_objective.generate_objective()
+ objectives += monsterhunter_objective
+ objectives_given += monsterhunter_objective
+ // Badguy Hunter? (Give him BADGUY objectives)
+ if (bad_dude)
+ // Stolen DIRECTLY from datum_traitor.dm
+ if(prob(15) && !(locate(/datum/objective/download) in objectives) && !(owner.assigned_role in list("Research Director", "Scientist", "Roboticist")))
+ var/datum/objective/download/download_objective = new
+ download_objective.owner = owner
+ download_objective.gen_amount_goal()
+ objectives += download_objective
+ objectives_given += download_objective
+ else
+ var/datum/objective/steal/steal_objective = new
+ steal_objective.owner = owner
+ steal_objective.find_target()
+ objectives += steal_objective
+ objectives_given += steal_objective
+
+
+ . = ..()
+
+/datum/antagonist/vamphunter/on_removal()
+
+ SSticker.mode.vamphunters -= owner // Add if not already in here (and you might be, if you were picked at round start)
+
+ // Master Pinpointer
+ //owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition)
+
+ // Take Hunter Power
+ if (owner.current)
+ for (var/datum/action/bloodsucker/P in owner.current.actions)
+ P.Remove(owner.current)
+
+ // Take Hunter Martial Arts
+ //my_kungfu.remove(owner.current)
+
+ // Remove Hunter Objectives
+ for(var/O in objectives_given)
+ objectives -= O
+ qdel(O)
+ objectives_given = list()
+
+ . = ..()
+
+/datum/antagonist/vamphunter/greet()
+ var/vamp_hunter_greet = "You are a fearless Monster Hunter!"
+ vamp_hunter_greet += "You know there's one or more filthy creature onboard the station, though their identities elude you."
+ vamp_hunter_greet += "It's your job to root them out, destroy their nests, and save the crew."
+ vamp_hunter_greet += "Use WHATEVER MEANS NECESSARY to find these creatures...no matter who gets hurt or what you have to destroy to do it."
+ vamp_hunter_greet += "There are greater stakes at hand than the safety of the station!"
+ vamp_hunter_greet += "However, security may detain you if they discover your mission..."
+ antag_memory += "You remember your training:
"
+ antag_memory += " -Bloodsuckers are weak to fire, or a stake to the heart. Removing their head or heart will also destroy them permanently.
"
+ antag_memory += " -Wooden stakes can be made from planks, and hardened by a welding tool. Your recipes list has ways of making them even stronger.
"
+ antag_memory += " -Changelings return to life unless their body is destroyed. Not even decapitation can stop them for long.
"
+ antag_memory += " -Cultists are weak to the Chaplain's holy water.
"
+ antag_memory += " -Wizards are notoriously hard to outmatch. Rob or steal whatever weapons you need to destroy them, and shoot before asking questions.
"
+ if (my_kungfu != null)
+ vamp_hunter_greet += "Hunter Tip: Use your [my_kungfu.name] techniques to give you an advantage over the enemy.
"
+ antag_memory += "You remember your training: You are skilled in the [my_kungfu.name] style of combat.
"
+ to_chat(owner, vamp_hunter_greet)
+
+/datum/antagonist/vamphunter/farewell()
+ to_chat(owner, "Your hunt has ended: you are no longer a monster hunter!")
+
+
+// TAKEN FROM: /datum/action/changeling/pheromone_receptors // pheromone_receptors.dm for a version of tracking that Changelings have!
+
+
+/datum/status_effect/agent_pinpointer/hunter_edition
+ alert_type = /obj/screen/alert/status_effect/agent_pinpointer/hunter_edition
+ minimum_range = HUNTER_SCAN_MIN_DISTANCE
+ tick_interval = HUNTER_SCAN_PING_TIME
+ duration = 160 // Lasts 10s
+ range_fuzz_factor = 5//PINPOINTER_EXTRA_RANDOM_RANGE
+
+/obj/screen/alert/status_effect/agent_pinpointer/hunter_edition
+ name = "Monster Tracking"
+ desc = "You always know where the hellspawn are."
+
+
+/datum/status_effect/agent_pinpointer/hunter_edition/on_creation(mob/living/new_owner, ...)
+ ..()
+
+ // Pick target
+ var/turf/my_loc = get_turf(owner)
+ var/list/mob/living/carbon/vamps = list()
+
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if (!M.current || M.current == owner || !get_turf(M.current) || !get_turf(new_owner))
+ continue
+ var/datum/antagonist/bloodsucker/antag_datum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(!istype(antag_datum))
+ continue
+ var/their_loc = get_turf(M.current)
+ var/distance = get_dist_euclidian(my_loc, their_loc)
+ if (distance < HUNTER_SCAN_MAX_DISTANCE)
+ vamps[M.current] = (HUNTER_SCAN_MAX_DISTANCE ** 2) - (distance ** 2)
+ // Found one!
+ if(vamps.len)
+ scan_target = pickweight(vamps) //Point at a 'random' vamp, biasing heavily towards closer ones.
+ to_chat(owner, "You detect signs of monsters to the [dir2text(get_dir(my_loc,get_turf(scan_target)))]!")
+ // Will yield a "?"
+ else
+ to_chat(owner, "There are no monsters nearby.")
+ // Force Point-To Immediately
+ point_to_target()
+
+/datum/status_effect/agent_pinpointer/hunter_edition/scan_for_target()
+ // Lose target? Done. Otherwise, scan for target's current position.
+ if (!scan_target && owner)
+ owner.remove_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition)
+
+ // NOTE: Do NOT run ..(), or else we'll remove our target.
+
+
+/datum/status_effect/agent_pinpointer/hunter_edition/Destroy()
+ if (scan_target)
+ to_chat(owner, "You've lost the trail.")
+ ..()
+*/
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/*
+
+
+/datum/action/bloodsucker/trackvamp/
+ name = "Track Monster"//"Cellular Emporium"
+ desc = "Take a moment to look for clues of any nearby monsters.
These creatures are slippery, and often look like the crew."
+ button_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the BACKGROUND icon
+ background_icon_state = "vamp_power_off" //And this is the state for the background icon
+ icon_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the ACTION icon
+ button_icon_state = "power_hunter" //And this is the state for the action icon
+ amToggle = FALSE // Action-Related
+ cooldown = 300 // 10 ticks, 1 second.
+ bloodcost = 0
+
+/datum/action/bloodsucker/trackvamp/ActivatePower()
+
+ var/mob/living/user = owner
+ to_chat(user, "You look around, scanning your environment and discerning signs of any filthy, wretched affronts to the natural order.")
+
+ if (!do_mob(user,owner,80))
+ return
+ // Add Power
+ // REMOVED //user.apply_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition)
+ // We don't track direction anymore!
+ // Return text indicating direction
+ display_proximity()
+ // NOTE: DON'T DEACTIVATE!
+ //DeactivatePower()
+
+/datum/action/bloodsucker/trackvamp/proc/display_proximity()
+ // Pick target
+ var/turf/my_loc = get_turf(owner)
+ //var/list/mob/living/carbon/vamps = list()
+ var/best_dist = 9999
+ var/mob/living/best_vamp
+
+ // Track ALL MONSTERS in Game Mode
+ var/list/datum/mind/monsters = list()
+ monsters += SSticker.mode.bloodsuckers
+ monsters += SSticker.mode.devils
+ //monsters += SSticker.mode.cult
+ monsters += SSticker.mode.wizards
+ monsters += SSticker.mode.apprentices
+ monsters += SSticker.mode.servants_of_ratvar
+ //monsters += SSticker.mode.changelings Disabled anyways
+ //
+ for(var/datum/mind/M in monsters)
+ if (!M.current || M.current == owner)// || !get_turf(M.current) || !get_turf(owner))
+ continue
+ for(var/a in M.antag_datums)
+ var/datum/antagonist/antag_datum = a // var/datum/antagonist/antag_datum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(!istype(antag_datum) || antag_datum.AmFinalDeath())
+ continue
+ var/their_loc = get_turf(M.current)
+ var/distance = get_dist_euclidian(my_loc, their_loc)
+ // Found One: Closer than previous/max distance
+ if (distance < best_dist && distance <= HUNTER_SCAN_MAX_DISTANCE)
+ best_dist = distance
+ best_vamp = M.current
+ break // Stop searching through my antag datums and go to the next guy
+
+ // Found one!
+ if(best_vamp)
+ var/distString = best_dist <= HUNTER_SCAN_MAX_DISTANCE / 2 ? "somewhere closeby!" : "somewhere in the distance."
+ //to_chat(owner, "You detect signs of Bloodsuckers to the [dir2text(get_dir(my_loc,get_turf(targetVamp)))]!")
+ to_chat(owner, "You detect signs of monsters [distString]")
+
+ // Will yield a "?"
+ else
+ to_chat(owner, "There are no monsters nearby.")
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// From martial.dm
+
+/*
+/datum/martial_art/hunter
+ name = "Hunter-Fu"
+ id = "MARTIALART_HUNTER" //ID, used by mind/has_martialart
+ //streak = ""
+ //max_streak_length = 6
+ //current_target
+ //datum/martial_art/base // The permanent style. This will be null unless the martial art is temporary
+ //deflection_chance = 0 //Chance to deflect projectiles
+ //reroute_deflection = FALSE //Delete the bullet, or actually deflect it in some direction?
+ //block_chance = 0 //Chance to block melee attacks using items while on throw mode.
+ //restraining = 0 //used in cqc's disarm_act to check if the disarmed is being restrained and so whether they should be put in a chokehold or not
+ //help_verb
+ //no_guns = FALSE
+ //allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts
+
+/datum/martial_art/hunter/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ return FALSE
+
+/datum/martial_art/hunter/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ return FALSE
+
+/datum/martial_art/hunter/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ return FALSE
+
+/datum/martial_art/hunter/can_use(mob/living/carbon/human/H)
+ return TRUE
+
+
+/datum/martial_art/hunter/add_to_streak(element,mob/living/carbon/human/D)
+ if(D != current_target)
+ current_target = D
+ streak = ""
+ restraining = 0
+ streak = streak+element
+ if(length(streak) > max_streak_length)
+ streak = copytext(streak,2)
+ return
+
+
+/datum/martial_art/hunter/basic_hit(mob/living/carbon/human/A,mob/living/carbon/human/D)
+
+ var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh)
+*/
+*/
diff --git a/code/modules/antagonists/bloodsucker/datum_vassal.dm b/code/modules/antagonists/bloodsucker/datum_vassal.dm
new file mode 100644
index 0000000000..71ee0bcc1d
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/datum_vassal.dm
@@ -0,0 +1,151 @@
+#define VASSAL_SCAN_MIN_DISTANCE 5
+#define VASSAL_SCAN_MAX_DISTANCE 500
+#define VASSAL_SCAN_PING_TIME 20 //2s update time.
+
+
+/datum/antagonist/bloodsucker/proc/attempt_turn_vassal(mob/living/carbon/C)
+ C.silent = 0
+ return SSticker.mode.make_vassal(C,owner)
+
+/datum/antagonist/bloodsucker/proc/FreeAllVassals()
+ for (var/datum/antagonist/vassal/V in vassals)
+ SSticker.mode.remove_vassal(V.owner)
+
+/datum/antagonist/vassal
+ name = "Vassal"//WARNING: DO NOT SELECT" // "Vassal"
+ roundend_category = "vassals"
+ antagpanel_category = "Bloodsucker"
+ job_rank = ROLE_BLOODSUCKER
+ var/datum/antagonist/bloodsucker/master // Who made me?
+ var/list/datum/action/powers = list()// Purchased powers
+ var/list/datum/objective/objectives_given = list() // For removal if needed.
+
+/datum/antagonist/vassal/can_be_owned(datum/mind/new_owner)
+ // If we weren't created by a bloodsucker, then we cannot be a vassal (assigned from antag panel)
+ if (!master)
+ return FALSE
+ return ..()
+
+/datum/antagonist/vassal/on_gain()
+ SSticker.mode.vassals |= owner // Add if not already in here (and you might be, if you were picked at round start)
+ // Mindslave Add
+ if(master)
+ var/datum/antagonist/bloodsucker/B = master.owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(B)
+ B.vassals |= src
+ owner.enslave_mind_to_creator(master.owner.current)
+ // Master Pinpointer
+ owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition)
+ // Powers
+ var/datum/action/bloodsucker/vassal/recuperate/new_Recuperate = new ()
+ new_Recuperate.Grant(owner.current)
+ powers += new_Recuperate
+ // Give Vassal Objective
+ var/datum/objective/bloodsucker/vassal/vassal_objective = new
+ vassal_objective.owner = owner
+ vassal_objective.generate_objective()
+ objectives += vassal_objective
+ objectives_given += vassal_objective
+ give_thrall_eyes()
+ owner.current.grant_language(/datum/language/vampiric)
+ // Add Antag HUD
+ update_vassal_icons_added(owner.current, "vassal")
+ . = ..()
+
+/datum/antagonist/vassal/proc/give_thrall_eyes()
+ var/obj/item/organ/eyes/vassal/E = new
+ E.Insert(owner.current)
+
+/obj/item/organ/eyes/vassal/
+ lighting_alpha = 180 // LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE <--- This is too low a value at 128. We need to SEE what the darkness is so we can hide in it.
+ see_in_dark = 12
+ flash_protect = -1 //These eyes are weaker to flashes, but let you see in the dark
+
+/datum/antagonist/vassal/proc/remove_thrall_eyes()
+ var/obj/item/organ/eyes/E = new
+ E.Insert(owner.current)
+
+/datum/antagonist/vassal/on_removal()
+ SSticker.mode.vassals -= owner // Add if not already in here (and you might be, if you were picked at round start)
+ // Mindslave Remove
+ if (master && master.owner)
+ master.vassals -= src
+ if (owner.enslaved_to == master.owner.current)
+ owner.enslaved_to = null
+ // Master Pinpointer
+ owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition)
+ // Powers
+ while(powers.len)
+ var/datum/action/power = pick(powers)
+ powers -= power
+ power.Remove(owner.current)
+ // Remove Hunter Objectives
+ for(var/O in objectives_given)
+ objectives -= O
+ qdel(O)
+ objectives_given = list()
+ remove_thrall_eyes()
+ owner.current.remove_language(/datum/language/vampiric)
+ // Clear Antag HUD
+ update_vassal_icons_removed(owner.current)
+
+ . = ..()
+
+/datum/antagonist/vassal/greet()
+ to_chat(owner, "You are now the mortal servant of [master.owner.current], a bloodsucking vampire!")
+ to_chat(owner, "The power of [master.owner.current.p_their()] immortal blood compells you to obey [master.owner.current.p_them()] in all things, even offering your own life to prolong theirs.
\
+ You are not required to obey any other Bloodsucker, for only [master.owner.current] is your master. The laws of Nanotransen do not apply to you now; only your vampiric master's word must be obeyed.")
+ // Effects...
+ owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE)
+ //owner.store_memory("You became the mortal servant of [master.owner.current], a bloodsucking vampire!")
+ antag_memory += "You became the mortal servant of [master.owner.current], a bloodsucking vampire!
"
+ // And to your new Master...
+ to_chat(master.owner, "[owner.current] has become addicted to your immortal blood. [owner.current.p_they(TRUE)] [owner.current.p_are()] now your undying servant!")
+ master.owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE)
+
+/datum/antagonist/vassal/farewell()
+ owner.current.visible_message("[owner.current]'s eyes dart feverishly from side to side, and then stop. [owner.current.p_they(TRUE)] seem[owner.current.p_s()] calm, \
+ like [owner.current.p_they()] [owner.current.p_have()] regained some lost part of [owner.current.p_them()]self.",\
+ "With a snap, you are no longer enslaved to [master.owner]! You breathe in heavily, having regained your free will.")
+ owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE)
+ // And to your former Master...
+ //if (master && master.owner)
+ // to_chat(master.owner, "You feel the bond with your vassal [owner.current] has somehow been broken!")
+
+/datum/status_effect/agent_pinpointer/vassal_edition
+ id = "agent_pinpointer"
+ alert_type = /obj/screen/alert/status_effect/agent_pinpointer/vassal_edition
+ minimum_range = VASSAL_SCAN_MIN_DISTANCE
+ tick_interval = VASSAL_SCAN_PING_TIME
+ duration = -1 // runs out fast
+ range_fuzz_factor = 0
+
+/obj/screen/alert/status_effect/agent_pinpointer/vassal_edition
+ name = "Blood Bond"
+ desc = "You always know where your master is."
+ //icon = 'icons/obj/device.dmi'
+ //icon_state = "pinon"
+
+/datum/status_effect/agent_pinpointer/vassal_edition/on_creation(mob/living/new_owner, ...)
+ ..()
+
+ var/datum/antagonist/vassal/antag_datum = new_owner.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ scan_target = antag_datum?.master?.owner?.current
+
+/datum/status_effect/agent_pinpointer/vassal_edition/scan_for_target()
+ // DO NOTHING. We already have our target, and don't wanna do anything from agent_pinpointer
+
+/datum/antagonist/vassal/proc/update_vassal_icons_added(mob/living/vassal, icontype="vassal")
+ var/datum/atom_hud/antag/bloodsucker/hud = GLOB.huds[ANTAG_HUD_BLOODSUCKER]
+ hud.join_hud(vassal)
+ set_antag_hud(vassal, icontype) // Located in icons/mob/hud.dmi
+ owner.current.hud_list[ANTAG_HUD].icon = image('icons/mob/hud.dmi', owner.current, "bloodsucker")
+
+/datum/antagonist/vassal/proc/update_vassal_icons_removed(mob/living/vassal)
+ var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_BLOODSUCKER]
+ hud.leave_hud(vassal)
+ set_antag_hud(vassal, null)
+
+//Displayed at the start of roundend_category section, default to roundend_category header
+/*/datum/antagonist/vassal/roundend_report_header()
+ return "
"*/
diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm
new file mode 100644
index 0000000000..5a905857c5
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm
@@ -0,0 +1,70 @@
+
+
+/datum/antagonist/bloodsucker/proc/CheckVampOrgans()
+ // Do I have any parts that need replacing?
+ var/obj/item/organ/O
+ // Heart
+ O = owner.current.getorganslot(ORGAN_SLOT_HEART)
+ if(!istype(O, /obj/item/organ/heart/vampheart))
+ qdel(O)
+ var/obj/item/organ/heart/vampheart/H = new
+ H.Insert(owner.current)
+ H.Stop() // Now...stop beating!
+ // Eyes
+ O = owner.current.getorganslot(ORGAN_SLOT_EYES)
+ if(!istype(O, /obj/item/organ/eyes/vassal/bloodsucker))
+ qdel(O)
+ var/obj/item/organ/eyes/vassal/bloodsucker/E = new
+ E.Insert(owner.current)
+
+/datum/antagonist/bloodsucker/proc/RemoveVampOrgans()
+ // Heart
+ var/obj/item/organ/heart/H = new
+ H.Insert(owner.current)
+ // Eyes
+ var/obj/item/organ/eyes/E = new
+ E.Insert(owner.current)
+// HEART: OVERWRITE //
+// HEART //
+/obj/item/organ/heart/vampheart
+ beating = 0
+ var/fakingit = 0
+
+/obj/item/organ/heart/vampheart/prepare_eat()
+ ..()
+ // Do cool stuff for eating vamp heart?
+
+/obj/item/organ/heart/vampheart/Restart()
+ beating = 0 // DONT run ..(). We don't want to start beating again.
+ return 0
+
+/obj/item/organ/heart/vampheart/Stop()
+ fakingit = 0
+ return ..()
+
+/obj/item/organ/heart/vampheart/proc/FakeStart()
+ fakingit = 1 // We're pretending to beat, to fool people.
+
+/obj/item/organ/heart/vampheart/HeartStrengthMessage()
+ if(fakingit)
+ return "a healthy"
+ return "no" // Bloodsuckers don't have a heartbeat at all when stopped (default is "an unstable")
+// EYES //
+
+/obj/item/organ/eyes/vassal/bloodsucker
+ flash_protect = 2 //Eye healing isnt working properly
+ sight_flags = SEE_MOBS // Taken from augmented_eyesight.dm
+
+/*
+// LIVER //
+/obj/item/organ/liver/vampliver
+ // Livers run on_life(), which calls reagents.metabolize() in holder.dm, which calls on_mob_life.dm in the cheam (medicine_reagents.dm)
+ // Holder also calls reagents.reaction_mob for the moment it happens
+
+/obj/item/organ/liver/vampliver/on_life()
+ var/mob/living/carbon/C = owner
+
+ if(!istype(C))
+ return
+
+*/
diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm
new file mode 100644
index 0000000000..9db4cae1ff
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm
@@ -0,0 +1,176 @@
+
+
+// organ_internal.dm -- /obj/item/organ
+
+
+
+// Do I have a stake in my heart?
+/mob/living/AmStaked()
+ var/obj/item/bodypart/BP = get_bodypart("chest")
+ if (!BP)
+ return FALSE
+ for(var/obj/item/I in BP.embedded_objects)
+ if (istype(I,/obj/item/stake/))
+ return TRUE
+ return FALSE
+/mob/proc/AmStaked()
+ return FALSE
+
+
+/mob/living/proc/StakeCanKillMe()
+ return IsSleeping() || stat >= UNCONSCIOUS || blood_volume <= 0 || HAS_TRAIT(src, TRAIT_DEATHCOMA) // NOTE: You can't go to sleep in a coffin with a stake in you.
+
+
+///obj/item/weapon/melee/stake
+/obj/item/stake/
+ name = "wooden stake"
+ desc = "A simple wooden stake carved to a sharp point."
+ icon = 'icons/obj/items_and_weapons.dmi'
+ icon_state = "wood" // Inventory Icon
+ item_state = "wood" // In-hand Icon
+ lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' // File for in-hand icon
+ righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
+ attack_verb = list("staked")
+ slot_flags = ITEM_SLOT_BELT
+ w_class = WEIGHT_CLASS_SMALL
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ force = 6
+ throwforce = 10
+ embedding = list("embed_chance" = 25, "embedded_fall_chance" = 0.5) // UPDATE 2/10/18 embedding_behavior.dm is how this is handled
+ //embed_chance = 25 // Look up "is_pointed" to see where we set stakes able to do this.
+ //embedded_fall_chance = 0.5 // Chance it will fall out.
+ obj_integrity = 30
+ max_integrity = 30
+ //embedded_fall_pain_multiplier
+ var/staketime = 120 // Time it takes to embed the stake into someone's chest.
+
+/obj/item/stake/basic
+ name = "wooden stake"
+ // This exists so Hardened/Silver Stake can't have a welding torch used on them.
+
+/obj/item/stake/basic/attackby(obj/item/W, mob/user, params)
+ if(istype(W, /obj/item/weldingtool))
+ //if (amWelded)
+ // to_chat(user, "This stake has already been treated with fire.")
+ // return
+ //amWelded = TRUE
+ // Weld it
+ var/obj/item/weldingtool/WT = W
+ if(WT.use(0))//remove_fuel(0,user))
+ user.visible_message("[user.name] scorched the pointy end of [src] with the welding tool.", \
+ "You scorch the pointy end of [src] with the welding tool.", \
+ "You hear welding.")
+ // 8 Second Timer
+ if(!do_mob(user, src, 80))
+ return
+ // Create the Stake
+ qdel(src)
+ var/obj/item/stake/hardened/new_item = new(usr.loc)
+ user.put_in_hands(new_item)
+ else
+ return ..()
+
+/obj/item/stake/afterattack(atom/target, mob/user, proximity)
+ //to_chat(world, "DEBUG: Staking ")
+ // Invalid Target, or not targetting chest with HARM intent?
+ if(!iscarbon(target) || check_zone(user.zone_selected) != "chest" || user.a_intent != INTENT_HARM)
+ return
+ var/mob/living/carbon/C = target
+ // Needs to be Down/Slipped in some way to Stake.
+ if(!C.can_be_staked() || target == user)
+ to_chat(user, "You cant stake [target] when they are moving moving about! They have to be laying down!")
+ return
+ // Oops! Can't.
+ if(HAS_TRAIT(C, TRAIT_PIERCEIMMUNE))
+ to_chat(user, "[target]'s chest resists the stake. It won't go in.")
+ return
+ // Make Attempt...
+ to_chat(user, "You put all your weight into embedding the stake into [target]'s chest...")
+ playsound(user, 'sound/magic/Demon_consume.ogg', 50, 1)
+ if(!do_mob(user, C, staketime, 0, 1, extra_checks=CALLBACK(C, /mob/living/carbon/proc/can_be_staked))) // user / target / time / uninterruptable / show progress bar / extra checks
+ return
+ // Drop & Embed Stake
+ user.visible_message("[user.name] drives the [src] into [target]'s chest!", \
+ "You drive the [src] into [target]'s chest!")
+ playsound(get_turf(target), 'sound/effects/splat.ogg', 40, 1)
+ user.dropItemToGround(src, TRUE) //user.drop_item() // "drop item" doesn't seem to exist anymore. New proc is user.dropItemToGround() but it doesn't seem like it's needed now?
+ var/obj/item/bodypart/B = C.get_bodypart("chest") // This was all taken from hitby() in human_defense.dm
+ B.embedded_objects |= src
+ add_mob_blood(target)//Place blood on the stake
+ loc = C // Put INSIDE the character
+ B.receive_damage(w_class * embedding.embedded_impact_pain_multiplier)
+ if(C.mind)
+ var/datum/antagonist/bloodsucker/bloodsucker = C.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(bloodsucker)
+ // If DEAD or TORPID...kill vamp!
+ if(C.StakeCanKillMe()) // NOTE: This is the ONLY time a staked Torpid vamp dies.
+ bloodsucker.FinalDeath()
+ return
+ else
+ to_chat(target, "You have been staked! Your powers are useless, your death forever, while it remains in place.")
+ to_chat(user, "You missed [C.p_their(TRUE)]'s heart! It would be easier if [C.p_they(TRUE)] weren't struggling so much.")
+
+// Can this target be staked? If someone stands up before this is complete, it fails. Best used on someone stationary.
+/mob/living/carbon/proc/can_be_staked()
+ //return resting || IsKnockdown() || IsUnconscious() || (stat && (stat != SOFT_CRIT || pulledby)) || (has_trait(TRAIT_FAKEDEATH)) || resting || IsStun() || IsFrozen() || (pulledby && pulledby.grab_state >= GRAB_NECK)
+ return (src.resting || src.lying)
+ // ABOVE: Taken from update_mobility() in living.dm
+
+/obj/item/stake/hardened
+ // Created by welding and acid-treating a simple stake.
+ name = "hardened stake"
+ desc = "A hardened wooden stake carved to a sharp point and scorched at the end."
+ icon_state = "hardened" // Inventory Icon
+ force = 8
+ throwforce = 12
+ armour_penetration = 10
+ embedding = list("embed_chance" = 50, "embedded_fall_chance" = 0) // UPDATE 2/10/18 embedding_behavior.dm is how this is handled
+ obj_integrity = 120
+ max_integrity = 120
+
+ staketime = 80
+
+/obj/item/stake/hardened/silver
+ name = "silver stake"
+ desc = "Polished and sharp at the end. For when some mofo is always trying to iceskate uphill."
+ icon_state = "silver" // Inventory Icon
+ item_state = "silver" // In-hand Icon
+ siemens_coefficient = 1 //flags = CONDUCT // var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit)
+ force = 9
+ armour_penetration = 25
+ embedding = list("embed_chance" = 65) // UPDATE 2/10/18 embedding_behavior.dm is how this is handled
+ obj_integrity = 300
+ max_integrity = 300
+
+ staketime = 60
+
+// Convert back to Silver
+/obj/item/stake/hardened/silver/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/weldingtool))
+ var/obj/item/weldingtool/WT = I
+ if(WT.use(0))//remove_fuel(0, user))
+ var/obj/item/stack/sheet/mineral/silver/newsheet = new (user.loc)
+ for(var/obj/item/stack/sheet/mineral/silver/S in user.loc)
+ if(S == newsheet)
+ continue
+ if(S.amount >= S.max_amount)
+ continue
+ S.attackby(newsheet, user)
+ to_chat(user, "You melt down the stake and add it to the stack. It now contains [newsheet.amount] sheet\s.")
+ qdel(src)
+ else
+ return ..()
+
+
+// Look up recipes.dm OR pneumaticCannon.dm
+/datum/crafting_recipe/silver_stake
+ name = "Silver Stake"
+ result = /obj/item/stake/hardened/silver
+ tools = list(/obj/item/weldingtool)
+ reqs = list(/obj/item/stack/sheet/mineral/silver = 1,
+ /obj/item/stake/hardened = 1)
+ ///obj/item/stack/packageWrap = 8,
+ ///obj/item/pipe = 2)
+ time = 80
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm
new file mode 100644
index 0000000000..946c472f11
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm
@@ -0,0 +1,242 @@
+
+
+// TRAIT_DEATHCOMA - Activate this when you're in your coffin to simulate sleep/death.
+
+
+// Coffins...
+// -heal all wounds, and quickly.
+// -restore limbs & organs
+//
+
+// Without Coffins...
+// -
+// -limbs stay lost
+
+
+
+// To put to sleep: use owner.current.fakedeath("bloodsucker") but change name to "bloodsucker_coffin" so you continue to stay fakedeath despite healing in the main thread!
+
+
+/datum/antagonist/bloodsucker/proc/ClaimCoffin(obj/structure/closet/crate/claimed) // NOTE: This can be any "closet" that you are resting AND inside of.
+ // ALREADY CLAIMED
+ if(claimed.resident)
+ if(claimed.resident == owner.current)
+ to_chat(owner, "This is your [src].")
+ else
+ to_chat(owner, "This [src] has already been claimed by another.")
+ return FALSE
+ // Bloodsucker Learns new Recipes!
+ owner.teach_crafting_recipe(/datum/crafting_recipe/bloodsucker/vassalrack)
+ owner.teach_crafting_recipe(/datum/crafting_recipe/bloodsucker/candelabrum)
+ // This is my Lair
+ coffin = claimed
+ lair = get_area(claimed)
+ // DONE
+ to_chat(owner, "You have claimed the [claimed] as your place of immortal rest! Your lair is now [lair].")
+ to_chat(owner, "You have learned new construction recipes to improve your lair.")
+ to_chat(owner, "Bloodsucker Tip: Find new lair recipes in the misc tab of the Crafting Menu at the bottom of the screen, including the Persuasion Rack for converting crew into Vassals.
")
+ RunLair() // Start
+ return TRUE
+
+// crate.dm
+/obj/structure/closet/crate
+ var/mob/living/resident // This lets bloodsuckers claim any "closet" as a Coffin, so long as they could get into it and close it. This locks it in place, too.
+
+/obj/structure/closet/crate/coffin
+ var/pryLidTimer = 250
+ can_weld_shut = FALSE
+ breakout_time = 200
+
+
+/obj/structure/closet/crate/coffin/blackcoffin
+ name = "black coffin"
+ desc = "For those departed who are not so dear."
+ icon_state = "coffin"
+ icon = 'icons/obj/vamp_obj.dmi'
+ can_weld_shut = FALSE
+ resistance_flags = 0 // Start off with no bonuses.
+ open_sound = 'sound/bloodsucker/coffin_open.ogg'
+ close_sound = 'sound/bloodsucker/coffin_close.ogg'
+ breakout_time = 600
+ pryLidTimer = 400
+ resistance_flags = NONE
+
+/obj/structure/closet/crate/coffin/meatcoffin
+ name = "meat coffin"
+ desc = "When you're ready to meat your maker, the steaks can never be too high."
+ icon_state = "meatcoffin"
+ icon = 'icons/obj/vamp_obj.dmi'
+ can_weld_shut = FALSE
+ resistance_flags = 0 // Start off with no bonuses.
+ open_sound = 'sound/effects/footstep/slime1.ogg'
+ close_sound = 'sound/effects/footstep/slime1.ogg'
+ breakout_time = 200
+ pryLidTimer = 200
+ resistance_flags = NONE
+ material_drop = /obj/item/reagent_containers/food/snacks/meat/slab
+ material_drop_amount = 3
+
+/obj/structure/closet/crate/coffin/metalcoffin
+ name = "metal coffin"
+ desc = "A big metal sardine can inside of another big metal sardine can, in space."
+ icon_state = "metalcoffin"
+ icon = 'icons/obj/vamp_obj.dmi'
+ can_weld_shut = FALSE
+ resistance_flags = FIRE_PROOF | LAVA_PROOF
+ open_sound = 'sound/effects/pressureplate.ogg'
+ close_sound = 'sound/effects/pressureplate.ogg'
+ breakout_time = 300
+ pryLidTimer = 200
+ resistance_flags = NONE
+ material_drop = /obj/item/stack/sheet/metal
+ material_drop_amount = 5
+
+//////////////////////////////////////////////
+
+/obj/structure/closet/crate/proc/ClaimCoffin(mob/living/claimant) // NOTE: This can be any "closet" that you are resting AND inside of.
+ // Bloodsucker Claim
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = claimant.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(bloodsuckerdatum)
+ // Vamp Successfuly Claims Me?
+ if(bloodsuckerdatum.ClaimCoffin(src))
+ resident = claimant
+ anchored = 1 // No moving this
+
+/obj/structure/closet/crate/coffin/Destroy()
+ UnclaimCoffin()
+ return ..()
+
+/obj/structure/closet/crate/proc/UnclaimCoffin()
+ if (resident)
+ // Vamp Un-Claim
+ if (resident.mind)
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = resident.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if (bloodsuckerdatum && bloodsuckerdatum.coffin == src)
+ bloodsuckerdatum.coffin = null
+ bloodsuckerdatum.lair = null
+ to_chat(resident, "You sense that the link with your coffin, your sacred place of rest, has been brokem! You will need to seek another.")
+ resident = null // Remove resident. Because this object isnt removed from the game immediately (GC?) we need to give them a way to see they don't have a home anymore.
+
+/obj/structure/closet/crate/coffin/can_open(mob/living/user)
+ // You cannot lock in/out a coffin's owner. SORRY.
+ if (locked)
+ if(user == resident)
+ if (welded)
+ welded = FALSE
+ update_icon()
+ //to_chat(user, "You flip a secret latch and unlock [src].") // Don't bother. We know it's unlocked.
+ locked = FALSE
+ return 1
+ else
+ playsound(get_turf(src), 'sound/machines/door_locked.ogg', 20, 1)
+ to_chat(user, "[src] is locked tight from the inside.")
+ return ..()
+
+/obj/structure/closet/crate/coffin/close(mob/living/user)
+ var/turf/Turf = get_turf(src)
+ var/area/A = get_area(src)
+ if (!..())
+ return FALSE
+ // Only the User can put themself into Torpor (if you're already in it, you'll start to heal)
+ if((user in src))
+ // Bloodsucker Only
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(bloodsuckerdatum)
+ LockMe(user)
+ Turf = get_turf(user) //we may have moved. adjust as needed...
+ A = get_area(src)
+ // Claim?
+ if(!bloodsuckerdatum.coffin && !resident && (is_station_level(Turf.z) || !A.map_name == "Space"))
+ switch(alert(user,"Do you wish to claim this as your coffin? [get_area(src)] will be your lair.","Claim Lair","Yes", "No"))
+ if("Yes")
+ ClaimCoffin(user)
+ if (user.AmStaked()) // Stake? No Heal!
+ to_chat(bloodsuckerdatum.owner.current, "You are staked! Remove the offending weapon from your heart before sleeping.")
+ return
+ // Heal
+ if(bloodsuckerdatum.HandleHealing(0)) // Healing Mult 0 <--- We only want to check if healing is valid!
+ to_chat(bloodsuckerdatum.owner.current, "You enter the horrible slumber of deathless Torpor. You will heal until you are renewed.")
+ bloodsuckerdatum.Torpor_Begin()
+ // Level Up?
+ bloodsuckerdatum.SpendRank() // Auto-Fails if not appropriate
+ return TRUE
+
+/obj/structure/closet/crate/coffin/attackby(obj/item/W, mob/user, params)
+ // You cannot weld or deconstruct an owned coffin. STILL NOT SORRY.
+ if (resident != null && user != resident) // Owner can destroy their own coffin.
+ if(opened)
+ if(istype(W, cutting_tool))
+ to_chat(user, "This is a much more complex mechanical structure than you thought. You don't know where to begin cutting [src].")
+ return
+ else if(anchored && istype(W, /obj/item/wrench)) // Can't unanchor unless owner.
+ to_chat(user, "The coffin won't come unanchored from the floor.")
+ return
+
+ if(locked && istype(W, /obj/item/crowbar))
+ var/pry_time = pryLidTimer * W.toolspeed // Pry speed must be affected by the speed of the tool.
+ user.visible_message("[user] tries to pry the lid off of [src] with [W].", \
+ "You begin prying the lid off of [src] with [W]. This should take about [DisplayTimeText(pry_time)].")
+ if (!do_mob(user,src,pry_time))
+ return
+ bust_open()
+ user.visible_message("[user] snaps the door of [src] wide open.", \
+ "The door of [src] snaps open.")
+ return
+ ..()
+
+
+
+/obj/structure/closet/crate/coffin/AltClick(mob/user)
+ // Distance Check (Inside Of)
+ if (user in src) // user.Adjacent(src)
+ LockMe(user, !locked)
+
+/obj/structure/closet/crate/proc/LockMe(mob/user, inLocked = TRUE)
+ // Lock
+ if (user == resident)
+ if (!broken)
+ locked = inLocked
+ to_chat(user, "You flip a secret latch and [locked?"":"un"]lock yourself inside [src].")
+ else
+ to_chat(resident, "The secret latch to lock [src] from the inside is broken. You set it back into place...")
+ if (do_mob(resident, src, 50))//sleep(10)
+ if (broken) // Spam Safety
+ to_chat(resident, "You fix the mechanism and lock it.")
+ broken = FALSE
+ locked = TRUE
+
+// Look up recipes.dm OR pneumaticCannon.dm
+/datum/crafting_recipe/bloodsucker/blackcoffin
+ name = "Black Coffin"
+ result = /obj/structure/closet/crate/coffin/blackcoffin
+ tools = list(/obj/item/weldingtool,
+ /obj/item/screwdriver)
+ reqs = list(/obj/item/stack/sheet/cloth = 1,
+ /obj/item/stack/sheet/mineral/wood = 5,
+ /obj/item/stack/sheet/metal = 1)
+ ///obj/item/stack/packageWrap = 8,
+ ///obj/item/pipe = 2)
+ time = 150
+ category = CAT_MISC
+ always_availible = TRUE
+
+/datum/crafting_recipe/bloodsucker/meatcoffin
+ name = "Meat Coffin"
+ result =/obj/structure/closet/crate/coffin/meatcoffin
+ tools = list(/obj/item/kitchen/knife,
+ /obj/item/kitchen/rollingpin)
+ reqs = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5,
+ /obj/item/restraints/handcuffs/cable = 1)
+ time = 150
+ category = CAT_MISC
+ always_availible = TRUE
+
+/datum/crafting_recipe/bloodsucker/metalcoffin
+ name = "Metal Coffin"
+ result =/obj/structure/closet/crate/coffin/metalcoffin
+ tools = list(/obj/item/weldingtool,
+ /obj/item/screwdriver)
+ reqs = list(/obj/item/stack/sheet/metal = 5)
+ time = 100
+ category = CAT_MISC
+ always_availible = TRUE
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
new file mode 100644
index 0000000000..f73912d0f5
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
@@ -0,0 +1,497 @@
+
+
+
+// IDEAS --
+// An object that disguises your coffin while you're in it!
+//
+// An object that lets your lair itself protect you from sunlight, like a coffin would (no healing tho)
+
+
+
+// Hide a random object somewhere on the station:
+// var/turf/targetturf = get_random_station_turf()
+// var/turf/targetturf = get_safe_random_station_turf()
+
+
+
+
+// CRYPT OBJECTS
+//
+//
+// PODIUM Stores your Relics
+//
+// ALTAR Transmute items into sacred items.
+//
+// PORTRAIT Gaze into your past to: restore mood boost?
+//
+// BOOKSHELF Discover secrets about crew and locations. Learn languages. Learn marial arts.
+//
+// BRAZER Burn rare ingredients to gleen insights.
+//
+// RUG Ornate, and creaks when stepped upon by any humanoid other than yourself and your vassals.
+//
+// X COFFIN (Handled elsewhere)
+//
+// X CANDELABRA (Handled elsewhere)
+//
+// THRONE Your mental powers work at any range on anyone inside your crypt.
+//
+// MIRROR Find any person
+//
+// BUST/STATUE Create terror, but looks just like you (maybe just in Examine?)
+
+
+// RELICS
+//
+// RITUAL DAGGER
+//
+// SKULL
+//
+// VAMPIRIC SCROLL
+//
+// SAINTS BONES
+//
+// GRIMOIRE
+
+
+// RARE INGREDIENTS
+// Ore
+// Books (Manuals)
+
+
+// NOTE: Look up AI and Sentient Disease to see how the game handles the selector logo that only one player is allowed to see. We could add hud for vamps to that?
+// ALTERNATIVELY, use the Vamp Huds on relics to mark them, but only show to relevant vamps?
+
+
+/obj/structure/bloodsucker
+ var/mob/living/owner
+
+/*
+/obj/structure/bloodsucker/bloodthrone
+ name = "wicked throne"
+ desc = "Twisted metal shards jut from the arm rests. Very uncomfortable looking. It would take a sadistic sort to sit on this jagged piece of furniture."
+
+/obj/structure/bloodsucker/bloodaltar
+ name = "bloody altar"
+ desc = "It is marble, lined with basalt, and radiates an unnerving chill that puts your skin on edge."
+
+/obj/structure/bloodsucker/bloodstatue
+ name = "bloody countenance"
+ desc = "It looks upsettingly familiar..."
+
+/obj/structure/bloodsucker/bloodportrait
+ name = "oil portrait"
+ desc = "A disturbingly familiar face stares back at you. On second thought, the reds don't seem to be painted in oil..."
+
+/obj/structure/bloodsucker/bloodbrazer
+ name = "lit brazer"
+ desc = "It burns slowly, but doesn't radiate any heat."
+
+/obj/structure/bloodsucker/bloodmirror
+ name = "faded mirror"
+ desc = "You get the sense that the foggy reflection looking back at you has an alien intelligence to it."
+*/
+
+
+/obj/structure/bloodsucker/vassalrack
+ name = "persuasion rack"
+ desc = "If this wasn't meant for torture, then someone has some fairly horrifying hobbies."
+ icon = 'icons/obj/vamp_obj.dmi'
+ icon_state = "vassalrack"
+ buckle_lying = FALSE
+ anchored = FALSE
+ density = TRUE // Start dense. Once fixed in place, go non-dense.
+ can_buckle = TRUE
+ var/useLock = FALSE // So we can't just keep dragging ppl on here.
+ var/mob/buckled
+ var/convert_progress = 3 // Resets on each new character to be added to the chair. Some effects should lower it...
+ var/disloyalty_confirm = FALSE // Command & Antags need to CONFIRM they are willing to lose their role (and will only do it if the Vassal'ing succeeds)
+ var/disloyalty_offered = FALSE // Has the popup been issued? Don't spam them.
+ var/convert_cost = 100
+
+/obj/structure/bloodsucker/vassalrack/deconstruct(disassembled = TRUE)
+ new /obj/item/stack/sheet/metal(src.loc, 4)
+ new /obj/item/stack/rods(loc, 4)
+ qdel(src)
+
+/obj/structure/bloodsucker/vassalrack/examine(mob/user)
+ . = ..()
+ if((user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) || isobserver(user))
+ . += {"This is the vassal rack, which allows you to thrall crewmembers into loyal minions in your service."}
+ . += {"You need to first secure the vassal rack by clicking on it while it is in your lair."}
+ . += {"Simply click and hold on a victim, and then drag their sprite on the vassal rack."}
+ . += {"Make sure that the victim is handcuffed, or else they can simply run away or resist, as the process is not instant."}
+ . += {"To convert the victim, simply click on the vassal rack itself. Sharp weapons work faster than other tools."}
+/* if(user.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ . += {"This is the vassal rack, which allows your master to thrall crewmembers into his minions.\n
+ Aid your master in bringing their victims here and keeping them secure.\n
+ You can secure victims to the vassal rack by click dragging the victim onto the rack while it is secured"} */
+
+/obj/structure/bloodsucker/vassalrack/MouseDrop_T(atom/movable/O, mob/user)
+ if(!O.Adjacent(src) || O == user || !isliving(O) || !isliving(user) || useLock || has_buckled_mobs() || user.incapacitated())
+ return
+ if(!anchored && user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ to_chat(user, "Until this rack is secured in place, it cannot serve its purpose.")
+ return
+ // PULL TARGET: Remember if I was pullin this guy, so we can restore this
+ var/waspulling = (O == owner.pulling)
+ var/wasgrabstate = owner.grab_state
+ // * MOVE! *
+ O.forceMove(drop_location())
+ // PULL TARGET: Restore?
+ if(waspulling)
+ owner.start_pulling(O, wasgrabstate, TRUE)
+ // NOTE: in bs_lunge.dm, we use [target.grabbedby(owner)], which simulates doing a grab action. We don't want that though...we're cutting directly back to where we were in a grab.
+ // Do Action!
+ useLock = TRUE
+ if(do_mob(user, O, 50))
+ attach_victim(O,user)
+ useLock = FALSE
+
+/obj/structure/bloodsucker/vassalrack/AltClick(mob/user)
+ if(!has_buckled_mobs() || !isliving(user) || useLock)
+ return
+ // Attempt Release (Owner vs Non Owner)
+ var/mob/living/carbon/C = pick(buckled_mobs)
+ if(C)
+ if(user == owner)
+ unbuckle_mob(C)
+ else
+ user_unbuckle_mob(C,user)
+
+/obj/structure/bloodsucker/vassalrack/proc/attach_victim(mob/living/M, mob/living/user)
+ // Standard Buckle Check
+ if(!buckle_mob(M)) // force=TRUE))
+ return
+ // Attempt Buckle
+ user.visible_message("[user] straps [M] into the rack, immobilizing them.", \
+ "You secure [M] tightly in place. They won't escape you now.")
+
+ playsound(src.loc, 'sound/effects/pop_expl.ogg', 25, 1)
+ //M.forceMove(drop_location()) <--- CANT DO! This cancels the buckle_mob() we JUST did (even if we foced the move)
+ M.setDir(2)
+ density = TRUE
+ var/matrix/m180 = matrix(M.transform)
+ m180.Turn(180)//90)//180
+ animate(M, transform = m180, time = 2)
+ M.pixel_y = -2 //M.get_standard_pixel_y_offset(120)//180)
+ update_icon()
+ // Torture Stuff
+ convert_progress = 2 // Goes down unless you start over.
+ disloyalty_confirm = FALSE // New guy gets the chance to say NO if he's special.
+ disloyalty_offered = FALSE // Prevents spamming torture window.
+
+/obj/structure/bloodsucker/vassalrack/user_unbuckle_mob(mob/living/M, mob/user)
+ // Attempt Unbuckle
+ if(!user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ if(M == user)
+ M.visible_message("[user] tries to release themself from the rack!",\
+ "You attempt to release yourself from the rack!") // For sound if not seen --> "You hear a squishy wet noise.")
+ else
+ M.visible_message("[user] tries to pull [M] rack!",\
+ "[user] attempts to release you from the rack!") // For sound if not seen --> "You hear a squishy wet noise.")
+ if(!do_mob(user, M, 100))
+ return
+ // Did the time. Now try to do it.
+ ..()
+ unbuckle_mob(M)
+
+/obj/structure/bloodsucker/vassalrack/unbuckle_mob(mob/living/buckled_mob, force = FALSE)
+ if(!..())
+ return
+ var/matrix/m180 = matrix(buckled_mob.transform)
+ m180.Turn(180)//-90)//180
+ animate(buckled_mob, transform = m180, time = 2)
+ buckled_mob.pixel_y = buckled_mob.get_standard_pixel_y_offset(180)
+ src.visible_message(text("[buckled_mob][buckled_mob.stat==DEAD?"'s corpse":""] slides off of the rack."))
+ density = FALSE
+ buckled_mob.AdjustKnockdown(30)
+ update_icon()
+ useLock = FALSE // Failsafe
+
+/obj/structure/bloodsucker/vassalrack/attackby(obj/item/W, mob/user, params)
+ if(has_buckled_mobs()) // Attack w/weapon vs guy standing there? Don't do an attack.
+ attack_hand(user)
+ return FALSE
+ return ..()
+
+/obj/structure/bloodsucker/vassalrack/attack_hand(mob/user)
+ //. = ..() // Taken from sacrificial altar in divine.dm
+ //if(.)
+ // return
+ // Go away. Torturing.
+ if(useLock)
+ return
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ // CHECK ONE: Am I claiming this? Is it in the right place?
+ if(istype(bloodsuckerdatum) && !owner)
+ if(!bloodsuckerdatum.lair)
+ to_chat(user, "You don't have a lair. Claim a coffin to make that location your lair.")
+ if(bloodsuckerdatum.lair != get_area(src))
+ to_chat(user, "You may only activate this structure in your lair: [bloodsuckerdatum.lair].")
+ return
+ switch(alert(user,"Do you wish to afix this structure here? Be aware you wont be able to unsecure it anymore","Secure [src]","Yes", "No"))
+ if("Yes")
+ owner = user
+ density = FALSE
+ anchored = TRUE
+ return //No, you cant move this ever again
+ // No One Home
+ if(!has_buckled_mobs())
+ return
+ // CHECK TWO: Am I a non-bloodsucker?
+ var/mob/living/carbon/C = pick(buckled_mobs)
+ if(!istype(bloodsuckerdatum))
+ // Try to release this guy
+ user_unbuckle_mob(C, user)
+ return
+ // Bloodsucker Owner! Let the boy go.
+ if(C.mind)
+ var/datum/antagonist/vassal/vassaldatum = C.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ if (istype(vassaldatum) && vassaldatum.master == bloodsuckerdatum || C.stat >= DEAD)
+ unbuckle_mob(C)
+ useLock = FALSE // Failsafe
+ return
+ // Just torture the boy
+ torture_victim(user, C)
+
+/obj/structure/bloodsucker/vassalrack/proc/torture_victim(mob/living/user, mob/living/target)
+ // Check Bloodmob/living/M, force = FALSE, check_loc = TRUE
+ if(user.blood_volume < convert_cost + 5)
+ to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target].")
+ return
+ // Prep...
+ useLock = TRUE
+ // Step One: Tick Down Conversion from 3 to 0
+ // Step Two: Break mindshielding/antag (on approve)
+ // Step Three: Blood Ritual
+ // Conversion Process
+ if(convert_progress > 0)
+ to_chat(user, "You prepare to initiate [target] into your service.")
+ if(!do_torture(user,target))
+ to_chat(user, "The ritual has been interrupted!")
+ else
+ convert_progress -- // Ouch. Stop. Don't.
+ // All done!
+ if(convert_progress <= 0)
+ // FAIL: Can't be Vassal
+ if(!SSticker.mode.can_make_vassal(target, user, display_warning=FALSE) && HAS_TRAIT(target, TRAIT_MINDSHIELD)) // If I'm an unconvertable Antag ONLY
+ to_chat(user, "[target] doesn't respond to your persuasion. It doesn't appear they can be converted to follow you, they either have a mindshield or their external loyalties are too difficult for you to break.\[ALT+click to release\]")
+ convert_progress ++ // Pop it back up some. Avoids wasting Blood on a lost cause.
+ // SUCCESS: All done!
+ else
+ if(RequireDisloyalty(target))
+ to_chat(user, "[target] has external loyalties! [target.p_they(TRUE)] will require more persuasion to break [target.p_them()] to your will!")
+ else
+ to_chat(user, "[target] looks ready for the Dark Communion.")
+ // Still Need More Persuasion...
+ else
+ to_chat(user, "[target] could use [convert_progress == 1?"a little":"some"] more persuasion.")
+ useLock = FALSE
+ return
+ // Check: Mindshield & Antag
+ if(!disloyalty_confirm && RequireDisloyalty(target))
+ if(!do_disloyalty(user,target))
+ to_chat(user, "The ritual has been interrupted!")
+ else if (!disloyalty_confirm)
+ to_chat(user, "[target] refuses to give into your persuasion. Perhaps a little more?")
+ else
+ to_chat(user, "[target] looks ready for the Dark Communion.")
+ useLock = FALSE
+ return
+ // Check: Blood
+ if(user.blood_volume < convert_cost)
+ to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target].")
+ useLock = FALSE
+ return
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ bloodsuckerdatum.AddBloodVolume(-convert_cost)
+ target.add_mob_blood(user)
+ user.visible_message("[user] marks a bloody smear on [target]'s forehead and puts a wrist up to [target.p_their()] mouth!", \
+ "You paint a bloody marking across [target]'s forehead, place your wrist to [target.p_their()] mouth, and subject [target.p_them()] to the Dark Communion.")
+ if(!do_mob(user, src, 50))
+ to_chat(user, "The ritual has been interrupted!")
+ useLock = FALSE
+ return
+ // Convert to Vassal!
+ if(bloodsuckerdatum && bloodsuckerdatum.attempt_turn_vassal(target))
+ //remove_loyalties(target) // In case of Mindshield, or appropriate Antag (Traitor, Internal, etc)
+ //if (!target.buckled)
+ // to_chat(user, "The ritual has been interrupted!")
+ // useLock = FALSE
+ // return
+ user.playsound_local(null, 'sound/effects/explosion_distant.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
+ target.playsound_local(null, 'sound/effects/explosion_distant.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
+ target.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
+ target.Jitter(25)
+ target.emote("laugh")
+ //remove_victim(target) // Remove on CLICK ONLY!
+ useLock = FALSE
+
+/obj/structure/bloodsucker/vassalrack/proc/do_torture(mob/living/user, mob/living/target, mult=1)
+ var/torture_time = 15 // Fifteen seconds if you aren't using anything. Shorter with weapons and such.
+ var/torture_dmg_brute = 2
+ var/torture_dmg_burn = 0
+ // Get Bodypart
+ var/target_string = ""
+ var/obj/item/bodypart/BP = null
+ if(iscarbon(target))
+ var/mob/living/carbon/C = target
+ BP = pick(C.bodyparts)
+ if(BP)
+ target_string += BP.name
+ // Get Weapon
+ var/obj/item/I = user.get_active_held_item()
+ if(!istype(I))
+ I = user.get_inactive_held_item()
+ // Create Strings
+ var/method_string = I?.attack_verb?.len ? pick(I.attack_verb) : pick("harmed","tortured","wrenched","twisted","scoured","beaten","lashed","scathed")
+ var/weapon_string = I ? I.name : pick("bare hands","hands","fingers","fists")
+ // Weapon Bonus + SFX
+ if(I)
+ torture_time -= I.force / 4
+ torture_dmg_brute += I.force / 4
+ //torture_dmg_burn += I.
+ if(I.sharpness == IS_SHARP)
+ torture_time -= 1
+ else if(I.sharpness == IS_SHARP_ACCURATE)
+ torture_time -= 2
+ if(istype(I, /obj/item/weldingtool))
+ var/obj/item/weldingtool/welder = I
+ welder.welding = TRUE
+ torture_time -= 5
+ torture_dmg_burn += 5
+ I.play_tool_sound(target)
+ torture_time = max(50, torture_time * 10) // Minimum 5 seconds.
+ // Now run process.
+ if(!do_mob(user, target, torture_time * mult))
+ return FALSE
+ // SUCCESS
+ if(I)
+ playsound(loc, I.hitsound, 30, 1, -1)
+ I.play_tool_sound(target)
+ target.visible_message("[user] has [method_string] [target]'s [target_string] with [user.p_their()] [weapon_string]!", \
+ "[user] has [method_string] your [target_string] with [user.p_their()] [weapon_string]!")
+ if(!target.is_muzzled())
+ target.emote("scream")
+ target.Jitter(5)
+ target.apply_damages(brute = torture_dmg_brute, burn = torture_dmg_burn, def_zone = (BP ? BP.body_zone : null)) // take_overall_damage(6,0)
+ return TRUE
+
+/obj/structure/bloodsucker/vassalrack/proc/do_disloyalty(mob/living/user, mob/living/target)
+
+ // OFFER YES/NO NOW!
+ spawn(10)
+ if(useLock && target && target.client) // Are we still torturing? Did we cancel? Are they still here?
+ to_chat(user, "[target] has been given the opportunity for servitude. You await their decision...")
+ var/alert_text = "You are being tortured! Do you want to give in and pledge your undying loyalty to [user]?"
+ /* if(HAS_TRAIT(target, TRAIT_MINDSHIELD))
+ alert_text += "\n\nYou will no longer be loyal to the station!"
+ if(SSticker.mode.AmValidAntag(target.mind)) */
+ alert_text += "\n\nYou will not lose your current objectives, but they come second to the will of your new master!"
+ switch(alert(target, alert_text,"THE HORRIBLE PAIN! WHEN WILL IT END?!","Yes, Master!", "NEVER!"))
+ if("Yes, Master!")
+ disloyalty_accept(target)
+ else
+ disloyalty_refuse(target)
+ if(!do_torture(user,target, 2))
+ return FALSE
+
+ // NOTE: We only remove loyalties when we're CONVERTED!
+ return TRUE
+
+/obj/structure/bloodsucker/vassalrack/proc/RequireDisloyalty(mob/living/target)
+ return SSticker.mode.AmValidAntag(target.mind) //|| HAS_TRAIT(target, TRAIT_MINDSHIELD)
+
+/obj/structure/bloodsucker/vassalrack/proc/disloyalty_accept(mob/living/target)
+ // FAILSAFE: Still on the rack?
+ if(!(locate(target) in buckled_mobs))
+ return
+ // NOTE: You can say YES after torture. It'll apply to next time.
+ disloyalty_confirm = TRUE
+ /*if(HAS_TRAIT(target, TRAIT_MINDSHIELD))
+ to_chat(target, "You give in to the will of your torturer. If they are successful, you will no longer be loyal to the station!")
+*/
+/obj/structure/bloodsucker/vassalrack/proc/disloyalty_refuse(mob/living/target)
+ // FAILSAFE: Still on the rack?
+ if(!(locate(target) in buckled_mobs))
+ return
+ // Failsafe: You already said YES.
+ if(disloyalty_confirm)
+ return
+ to_chat(target, "You refuse to give in! You will not break!")
+
+
+/obj/structure/bloodsucker/vassalrack/proc/remove_loyalties(mob/living/target)
+ // Find Mind Implant & Destroy
+ if(HAS_TRAIT(target, TRAIT_MINDSHIELD))
+ for(var/obj/item/implant/I in target.implants)
+ if(I.type == /obj/item/implant/mindshield)
+ I.removed(target,silent=TRUE)
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/obj/structure/bloodsucker/candelabrum
+ name = "candelabrum"
+ desc = "It burns slowly, but doesn't radiate any heat."
+ icon = 'icons/obj/vamp_obj.dmi'
+ icon_state = "candelabrum"
+ light_color = "#66FFFF"//LIGHT_COLOR_BLUEGREEN // lighting.dm
+ light_power = 3
+ light_range = 0 // to 2
+ density = FALSE
+ anchored = FALSE
+ var/lit = FALSE
+///obj/structure/bloodsucker/candelabrum/is_hot() // candle.dm
+ //return FALSE
+
+/obj/structure/bloodsucker/candelabrum/Destroy()
+ STOP_PROCESSING(SSobj, src)
+
+/obj/structure/bloodsucker/candelabrum/update_icon()
+ icon_state = "candelabrum[lit ? "_lit" : ""]"
+
+/obj/structure/bloodsucker/candelabrum/examine(mob/user)
+ . = ..()
+ if((user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) || isobserver(user))
+ . += {"This is a magical candle which drains at the sanity of mortals who are not under your command while it is active."}
+ . += {"You can alt click on it from any range to turn it on remotely, or simply be next to it and click on it to turn it on and off normally."}
+/* if(user.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ . += {"This is a magical candle which drains at the sanity of the fools who havent yet accepted your master, as long as it is active.\n
+ You can turn it on and off by clicking on it while you are next to it"} */
+
+/obj/structure/bloodsucker/candelabrum/attack_hand(mob/user)
+ var/datum/antagonist/bloodsucker/V = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) //I wish there was a better way to do this
+ var/datum/antagonist/vassal/T = user.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ if(istype(V) || istype(T))
+ toggle()
+
+/obj/structure/bloodsucker/candelabrum/AltClick(mob/user)
+ var/datum/antagonist/bloodsucker/V = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ // Bloodsuckers can turn their candles on from a distance. SPOOOOKY.
+ if(istype(V))
+ toggle()
+
+/obj/structure/bloodsucker/candelabrum/proc/toggle(mob/user)
+ lit = !lit
+ if(lit)
+ set_light(2, 3, "#66FFFF")
+ START_PROCESSING(SSobj, src)
+ else
+ set_light(0)
+ STOP_PROCESSING(SSobj, src)
+ update_icon()
+
+/obj/structure/bloodsucker/candelabrum/process()
+ if(lit)
+ for(var/mob/living/carbon/human/H in viewers(7, src))
+ var/datum/antagonist/vassal/T = H.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ var/datum/antagonist/bloodsucker/V = H.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(V || T) //We dont want vassals or vampires affected by this
+ return
+ H.hallucination = 20
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "vampcandle", /datum/mood_event/vampcandle)
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// OTHER THINGS TO USE: HUMAN BLOOD. /obj/effect/decal/cleanable/blood
+
+/obj/item/restraints/legcuffs/beartrap/bloodsucker
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm
new file mode 100644
index 0000000000..f68191d6d7
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm
@@ -0,0 +1,88 @@
+
+
+// Created by claiming a Coffin.
+
+
+
+// THINGS TO SPAWN:
+//
+// /obj/effect/decal/cleanable/cobweb && /obj/effect/decal/cleanable/cobweb/cobweb2
+// /obj/effect/decal/cleanable/generic
+// /obj/effect/decal/cleanable/dirt/dust <-- Pretty cool, just stains the tile itself.
+// /obj/effect/decal/cleanable/blood/old
+
+/*
+/area/
+ // All coffins assigned to this area
+ var/list/obj/structure/closet/crate/laircoffins = new list()
+
+// Called by Coffin when an area is claimed as a vamp's lair
+/area/proc/ClaimAsLair(/obj/structure/closet/crate/inClaimant)
+ set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side.
+
+ laircoffins += laircoffins
+ sleep()
+
+ // Cancel!
+ if (laircoffins.len == 0)
+ return
+ */
+
+/datum/antagonist/bloodsucker/proc/RunLair()
+ set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side.
+ while(!AmFinalDeath() && coffin && lair)
+ // WAit 2 min and Repeat
+ sleep(120)
+ // Coffin Moved SOMEHOW?
+ if(lair != get_area(coffin))
+ if(coffin)
+ coffin.UnclaimCoffin()
+ //lair = get_area(coffin)
+ break // DONE
+ var/list/turf/area_turfs = get_area_turfs(lair)
+ // Create Dirt etc.
+ var/turf/T_Dirty = pick(area_turfs)
+ if(T_Dirty && !T_Dirty.density)
+ // Default: Dirt
+ // CHECK: Cobweb already there?
+ //if (!locate(var/obj/effect/decal/cleanable/cobweb) in T_Dirty) // REMOVED! Cleanables don't stack.
+ // STEP ONE: COBWEBS
+ // CHECK: Wall to North?
+ var/turf/check_N = get_step(T_Dirty, NORTH)
+ if(istype(check_N, /turf/closed/wall))
+ // CHECK: Wall to West?
+ var/turf/check_W = get_step(T_Dirty, WEST)
+ if(istype(check_W, /turf/closed/wall))
+ new /obj/effect/decal/cleanable/cobweb (T_Dirty)
+ // CHECK: Wall to East?
+ var/turf/check_E = get_step(T_Dirty, EAST)
+ if(istype(check_E, /turf/closed/wall))
+ new /obj/effect/decal/cleanable/cobweb/cobweb2 (T_Dirty)
+ // STEP TWO: DIRT
+ new /obj/effect/decal/cleanable/dirt (T_Dirty)
+ // Find Animals in Area
+ /* if(rand(0,2) == 0)
+ var/mobCount = 0
+ var/mobMax = CLAMP(area_turfs.len / 25, 1, 4)
+ for (var/turf/T in area_turfs)
+ if(!T) continue
+ var/mob/living/simple_animal/SA = locate() in T
+ if(SA)
+ mobCount ++
+ if (mobCount >= mobMax) // Already at max
+ break
+ Spawn One
+ if(mobCount < mobMax)
+ Seek Out Location
+ while(area_turfs.len > 0)
+ var/turf/T = pick(area_turfs) // We use while&pick instead of a for/loop so it's random, rather than from the top of the list.
+ if(T && !T.density)
+ var/mob/living/simple_animal/SA = /mob/living/simple_animal/mouse // pick(/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse, /mob/living/simple_animal/hostile/retaliate/bat) //prob(300) /mob/living/simple_animal/mouse,
+ new SA (T)
+ break
+ area_turfs -= T*/
+ // NOTE: area_turfs is now cleared out!
+ if(coffin)
+ coffin.UnclaimCoffin()
+ // Done (somehow)
+ lair = null
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm
new file mode 100644
index 0000000000..49aada3611
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm
@@ -0,0 +1,174 @@
+
+
+/datum/action/bloodsucker/targeted/brawn
+ name = "Brawn"//"Cellular Emporium"
+ desc = "Snap restraints with ease, or deal terrible damage with your bare hands."
+ button_icon_state = "power_strength"
+ bloodcost = 10
+ cooldown = 130
+ target_range = 1
+ power_activates_immediately = TRUE
+ message_Trigger = ""//"Whom will you subvert to your will?"
+ must_be_capacitated = TRUE
+ can_be_immobilized = TRUE
+ bloodsucker_can_buy = TRUE
+ // Level Up
+ var/upgrade_canLocker = FALSE
+ var/upgrade_canDoor = FALSE
+
+/datum/action/bloodsucker/targeted/brawn/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ . = TRUE
+ // Break Out of Restraints! (And then cancel)
+ if(CheckBreakRestraints())
+ //PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!DEACTIVATE!
+ . = FALSE //return FALSE
+ // Throw Off Attacker! (And then cancel)
+ if(CheckEscapePuller())
+ //PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!DEACTIVATE!
+ . = FALSE //return FALSE
+ /*if(CheckBreakLocker())
+ .= FALSE */
+ // Did we successfuly use power to BREAK CUFFS and/or ESCAPE PULLER and/or escape from a locker?
+ // Then PAY COST!
+ if(. == FALSE)
+ PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!DEACTIVATE!
+
+ // NOTE: We use . = FALSE so that we can break cuffs AND throw off our attacker in one use!
+ //return TRUE
+/datum/action/bloodsucker/targeted/brawn/CheckValidTarget(atom/A)
+ return isliving(A) || istype(A, /obj/machinery/door)
+
+/datum/action/bloodsucker/targeted/brawn/CheckCanTarget(atom/A, display_error)
+ // DEFAULT CHECKS (Distance)
+ if(!..()) // Disable range notice for Brawn.
+ return FALSE
+ // Must outside Closet to target anyone!
+ if(!isturf(owner.loc))
+ return FALSE
+ // Check: Self
+ if(A == owner)
+ return FALSE
+ // Target Type: Living
+ if(isliving(A))
+ return TRUE
+ // Target Type: Door
+ else if(istype(A, /obj/machinery/door))
+ return TRUE
+ return ..() // yes, FALSE! You failed if you got here! BAD TARGET
+
+/datum/action/bloodsucker/targeted/brawn/FireTargetedPower(atom/A)
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
+ var/mob/living/carbon/target = A
+ var/mob/living/user = owner
+ // Target Type: Mob
+ if(isliving(target))
+ var/mob/living/carbon/user_C = user
+ var/hitStrength = user_C.dna.species.punchdamagehigh * 1.3 + 5
+ // Knockdown!
+ var/powerlevel = min(5, 1 + level_current)
+ if(rand(5 + powerlevel) >= 5)
+ target.visible_message("[user] lands a vicious punch, sending [target] away!", \
+ "[user] has landed a horrifying punch on you, sending you flying!!", null, COMBAT_MESSAGE_RANGE)
+ target.Knockdown(min(5, rand(10, 10 * powerlevel)) )
+ // Chance of KO
+ if(rand(6 + powerlevel) >= 6 && target.stat <= UNCONSCIOUS)
+ target.Unconscious(40)
+ // Attack!
+ playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, 1, -1)
+ user.do_attack_animation(target, ATTACK_EFFECT_SMASH)
+ var/obj/item/bodypart/affecting = target.get_bodypart(ran_zone(target.zone_selected))
+ target.apply_damage(hitStrength, BRUTE, affecting)
+ // Knockback
+ var/send_dir = get_dir(owner, target)
+ var/turf/T = get_ranged_target_turf(target, send_dir, powerlevel)
+ owner.newtonian_move(send_dir) // Bounce back in 0 G
+ target.throw_at(T, powerlevel, TRUE, owner) //new /datum/forced_movement(target, get_ranged_target_turf(target, send_dir, (hitStrength / 4)), 1, FALSE)
+ // Target Type: Door
+ else if(istype(target, /obj/machinery/door))
+ var/obj/machinery/door/D = target
+ playsound(get_turf(usr), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1)
+ to_chat(user, "You prepare to tear open [D].")
+ if(do_mob(usr,target,25))
+ if (D.Adjacent(user))
+ to_chat(user, "You tear open the [D].")
+ user.Stun(10)
+ user.do_attack_animation(D, ATTACK_EFFECT_SMASH)
+ playsound(get_turf(D), 'sound/effects/bang.ogg', 30, 1, -1)
+ D.open(2) // open(2) is like a crowbar or jaws of life.
+ // Target Type: Closet
+
+/datum/action/bloodsucker/targeted/brawn/proc/CheckBreakRestraints()
+ if(!iscarbon(owner)) // || !owner.restrained()
+ return FALSE
+ // (NOTE: Just like biodegrade.dm, we only remove one thing per use //
+ // Destroy Cuffs
+ var/mob/living/carbon/user_C = owner
+ //message_admins("DEBUG3: attempt_cast() [name] / [user_C.handcuffed] ")
+ if(user_C.handcuffed)
+ var/obj/O = user_C.get_item_by_slot(SLOT_HANDCUFFED)
+ if(istype(O))
+ //user_C.visible_message("[user_C] attempts to remove [O]!", \
+ // "You snap [O] like it's nothing!")
+ user_C.clear_cuffs(O,TRUE)
+ playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1)
+ return TRUE
+/* Doesnt work
+ // Destroy Straightjacket
+ if(ishuman(owner))
+ var/mob/living/carbon/human/user_H = owner
+ if(user_H.wear_suit && user_H.wear_suit.breakouttime)
+ var/obj/item/clothing/suit/straight_jacket/S = user_H.get_item_by_slot(ITEM_SLOT_ICLOTHING)
+ if(istype(S))
+ user_C.visible_message("[user_C] attempts to remove [S]!", \
+ "You rip through [S] like it's nothing!")
+ user_C.clear_cuffs(S,TRUE)
+ playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1)
+ return TRUE */
+ // Destroy Leg Cuffs
+ if(user_C.legcuffed)
+ var/obj/O = user_C.get_item_by_slot(SLOT_LEGCUFFED)
+ if(istype(O))
+ //user_C.visible_message("[user_C] attempts to remove [O]!", \
+ // "You snap [O] like it's nothing!")
+ user_C.clear_cuffs(O,TRUE)
+ playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1)
+ return TRUE
+ return FALSE
+
+/datum/action/bloodsucker/targeted/brawn/proc/CheckEscapePuller()
+ if(!owner.pulledby)// || owner.pulledby.grab_state <= GRAB_PASSIVE)
+ return FALSE
+ var/mob/M = owner.pulledby
+ var/pull_power = M.grab_state
+ playsound(get_turf(M), 'sound/effects/woodhit.ogg', 75, 1, -1)
+ // Knock Down (if Living)
+ if (isliving(M))
+ var/mob/living/L = M
+ L.Knockdown(pull_power * 10 + 20)
+ // Knock Back (before Knockdown, which probably cancels pull)
+ var/send_dir = get_dir(owner, M)
+ var/turf/T = get_ranged_target_turf(M, send_dir, pull_power)
+ owner.newtonian_move(send_dir) // Bounce back in 0 G
+ M.throw_at(T, pull_power, TRUE, owner, FALSE) // Throw distance based on grab state! Harder grabs punished more aggressively.
+ // /proc/log_combat(atom/user, atom/target, what_done, atom/object=null, addition=null)
+ log_combat(owner, M, "used Brawn power")
+ owner.visible_message("[owner] tears free of [M]'s grasp!", \
+ "You shrug off [M]'s grasp!")
+ owner.pulledby = null // It's already done, but JUST IN CASE.
+ return TRUE
+/* Doesnt work
+/datum/action/bloodsucker/targeted/brawn/proc/CheckBreakLocker()
+ if(!istype(owner.loc, /obj/structure/closet))
+ return FALSE
+ playsound(get_turf(owner), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1)
+ if(do_mob(owner ,target, 25))
+ var/obj/structure/closet/C = owner.loc
+ to_chat(owner, "You prepare to tear open the [C].")
+ owner.do_attack_animation(C, ATTACK_EFFECT_SMASH)
+ playsound(get_turf(C), 'sound/effects/bang.ogg', 30, 1, -1)
+ C.bust_open()
+ return TRUE
+*/
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm
new file mode 100644
index 0000000000..cea942e26d
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm
@@ -0,0 +1,57 @@
+
+
+/datum/action/bloodsucker/cloak
+ name = "Cloak of Darkness"
+ desc = "Blend into the shadows and become invisible to the untrained eye."
+ button_icon_state = "power_cloak"
+ bloodcost = 5
+ cooldown = 50
+ bloodsucker_can_buy = TRUE
+ amToggle = TRUE
+ warn_constant_cost = TRUE
+
+ var/light_min = 0.5 // If lum is above this, no good.
+
+/datum/action/bloodsucker/cloak/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ // Must be Dark
+ var/turf/T = owner.loc
+ if(istype(T) && T.get_lumcount() > light_min)
+ to_chat(owner, "This area is not dark enough to blend in")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/cloak/ActivatePower()
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ var/mob/living/user = owner
+ var/was_running = (user.m_intent == MOVE_INTENT_RUN)
+ if(was_running)
+ user.toggle_move_intent()
+ ADD_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness")
+ while(bloodsuckerdatum && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN)
+ // Pay Blood Toll (if awake)
+ owner.alpha = max(0, owner.alpha - min(75, 20 + 15 * level_current))
+ bloodsuckerdatum.AddBloodVolume(-0.2)
+ sleep(5) // Check every few ticks that we haven't disabled this power
+ // Return to Running (if you were before)
+ if(was_running && user.m_intent != MOVE_INTENT_RUN)
+ user.toggle_move_intent()
+
+/datum/action/bloodsucker/cloak/ContinueActive(mob/living/user, mob/living/target)
+ if (!..())
+ return FALSE
+ if(user.stat == !CONSCIOUS) // Must be CONSCIOUS
+ to_chat(owner, "Your cloak failed due to you falling unconcious! ")
+ return FALSE
+ var/turf/T = owner.loc // Must be DARK
+ if(istype(T) && T.get_lumcount() > light_min)
+ to_chat(owner, "Your cloak failed due to there being too much light!")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/cloak/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..()
+ REMOVE_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness")
+ user.alpha = 255
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_feed.dm b/code/modules/antagonists/bloodsucker/powers/bs_feed.dm
new file mode 100644
index 0000000000..7c4cf46e3c
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_feed.dm
@@ -0,0 +1,324 @@
+
+
+/datum/action/bloodsucker/feed
+ name = "Feed"
+ desc = "Draw the heartsblood of living victims in your grasp.
None/Passive: Feed silently and unnoticed by your victim.
Aggressive: Subdue your target quickly."
+ button_icon_state = "power_feed"
+
+ bloodcost = 0
+ cooldown = 30
+ amToggle = TRUE
+ bloodsucker_can_buy = TRUE
+ can_be_staked = TRUE
+ cooldown_static = TRUE
+
+ var/notice_range = 2 // Distance before silent feeding is noticed.
+ var/mob/living/feed_target // So we can validate more than just the guy we're grappling.
+ var/target_grappled = FALSE // If you started grappled, then ending it will end your Feed.
+
+/datum/action/bloodsucker/feed/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ // Wearing mask
+ var/mob/living/L = owner
+ if (L.is_mouth_covered())
+ if (display_error)
+ to_chat(owner, "You cannot feed with your mouth covered! Remove your mask.")
+ return FALSE
+ // Find my Target!
+ if (!FindMyTarget(display_error)) // Sets feed_target within after Validating
+ return FALSE
+ // Not in correct state
+ // DONE!
+ return TRUE
+
+/datum/action/bloodsucker/feed/proc/ValidateTarget(mob/living/target, display_error) // Called twice: validating a subtle victim, or validating your grapple victim.
+ // Bloodsuckers + Animals MUST be grabbed aggressively!
+ if (!owner.pulling || target == owner.pulling && owner.grab_state < GRAB_AGGRESSIVE)
+ // NOTE: It's OKAY that we are checking if(!target) below, AFTER animals here. We want passive check vs animal to warn you first, THEN the standard warning.
+ // Animals:
+ if (isliving(target) && !iscarbon(target))
+ if (display_error)
+ to_chat(owner, "Lesser beings require a tighter grip.")
+ return FALSE
+ // Bloodsuckers:
+ else if (iscarbon(target) && target.mind && target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ if (display_error)
+ to_chat(owner, "Other Bloodsuckers will not fall for your subtle approach.")
+ return FALSE
+ // Must have Target
+ if (!target) // || !ismob(target)
+ if (display_error)
+ to_chat(owner, "You must be next to or grabbing a victim to feed from them.")
+ return FALSE
+ // Not even living!
+ if (!isliving(target) || issilicon(target))
+ if (display_error)
+ to_chat(owner, "You may only feed from living beings.")
+ return FALSE
+ if (target.blood_volume <= 0)
+ if (display_error)
+ to_chat(owner, "Your victim has no blood to take.")
+ return FALSE
+ if (ishuman(target))
+ var/mob/living/carbon/human/H = target
+ if(NOBLOOD in H.dna.species.species_traits)// || owner.get_blood_id() != target.get_blood_id())
+ if (display_error)
+ to_chat(owner, "Your victim's blood is not suitable for you to take.")
+ return FALSE
+ return TRUE
+
+// If I'm not grabbing someone, find me someone nearby.
+/datum/action/bloodsucker/feed/proc/FindMyTarget(display_error)
+ // Default
+ feed_target = null
+ target_grappled = FALSE
+ // If you are pulling a mob, that's your target. If you don't like it, then release them.
+ if (owner.pulling && ismob(owner.pulling))
+ // Check grapple target Valid
+ if (!ValidateTarget(owner.pulling, display_error)) // Grabbed targets display error.
+ return FALSE
+ target_grappled = TRUE
+ feed_target = owner.pulling
+ return TRUE
+ // Find Targets
+ var/list/mob/living/seen_targets = view(1, owner)
+ var/list/mob/living/seen_mobs = list()
+ for(var/mob/living/M in seen_targets)
+ if (isliving(M) && M != owner)
+ seen_mobs += M
+ // None Seen!
+ if (seen_mobs.len == 0)
+ if (display_error)
+ to_chat(owner, "You must be next to or grabbing a victim to feed from them.")
+ return FALSE
+ // Check Valids...
+ var/list/targets_valid = list()
+ var/list/targets_dead = list()
+ for(var/mob/living/M in seen_mobs)
+ // Check adjecent Valid target
+ if (M != owner && ValidateTarget(M, display_error = FALSE)) // Do NOT display errors. We'll be doing this again in CheckCanUse(), which will rule out grabbed targets.
+ // Prioritize living, but remember dead as backup
+ if (M.stat < DEAD)
+ targets_valid += M
+ else
+ targets_dead += M
+ // No Living? Try dead.
+ if (targets_valid.len == 0 && targets_dead.len > 0)
+ targets_valid = targets_dead
+ // No Targets
+ if (targets_valid.len == 0)
+ // Did I see targets? Then display at least one error
+ if (seen_mobs.len > 1)
+ if (display_error)
+ to_chat(owner, "None of these are valid targets to feed from subtly.")
+ else
+ ValidateTarget(seen_mobs[1], display_error)
+ return FALSE
+ // Too Many Targets
+ //else if (targets.len > 1)
+ // if (display_error)
+ // to_chat(owner, "You are adjecent to too many witnesses. Either grab your victim or move away.")
+ // return FALSE
+ // One Target!
+ else
+ feed_target = pick(targets_valid)//targets[1]
+ return TRUE
+
+/datum/action/bloodsucker/feed/ActivatePower()
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up Activate(), so Deactivate() can happen after.
+ var/mob/living/target = feed_target // Stored during CheckCanUse(). Can be a grabbed OR adjecent character.
+ var/mob/living/user = owner
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ // Am I SECRET or LOUD? It stays this way the whole time! I must END IT to try it the other way.
+ var/amSilent = (!target_grappled || owner.grab_state <= GRAB_PASSIVE) // && iscarbon(target) // Non-carbons (animals) not passive. They go straight into aggressive.
+ // Initial Wait
+ var/feed_time = (amSilent ? 45 : 25) - (2.5 * level_current)
+ feed_time = max(15, feed_time)
+ if (amSilent)
+ to_chat(user, "You lean quietly toward [target] and secretly draw out your fangs...")
+ else
+ to_chat(user, "You pull [target] close to you and draw out your fangs...")
+ if (!do_mob(user, target, feed_time,0,1,extra_checks=CALLBACK(src, .proc/ContinueActive, user, target)))//sleep(10)
+ to_chat(user, "Your feeding was interrupted.")
+ //DeactivatePower(user,target)
+ return
+ // Put target to Sleep (Bloodsuckers are immune to their own bite's sleep effect)
+ if (!amSilent)
+ ApplyVictimEffects(target) // Sleep, paralysis, immobile, unconscious, and mute
+ if(target.stat <= UNCONSCIOUS)
+ sleep(1)
+ // Wait, then Cancel if Invalid
+ if (!ContinueActive(user,target)) // Cancel. They're gone.
+ //DeactivatePower(user,target)
+ return
+ // Pull Target Close
+ if (!target.density) // Pull target to you if they don't take up space.
+ target.Move(user.loc)
+ // Broadcast Message
+ if (amSilent)
+ //if (!iscarbon(target))
+ // user.visible_message("[user] shifts [target] closer to [user.p_their()] mouth.", \
+ // "You secretly slip your fangs into [target]'s flesh.", \
+ // vision_distance = 2, ignored_mobs=target) // Only people who AREN'T the target will notice this action.
+ //else
+ var/deadmessage = target.stat == DEAD ? "" : " [target.p_they(TRUE)] looks dazed, and will not remember this."
+ user.visible_message("[user] puts [target]'s wrist up to [user.p_their()] mouth.", \
+ "You secretly slip your fangs into [target]'s wrist.[deadmessage]", \
+ vision_distance = notice_range, ignored_mobs=target) // Only people who AREN'T the target will notice this action.
+ // Warn Feeder about Witnesses...
+ var/was_unnoticed = TRUE
+ for(var/mob/living/M in viewers(notice_range, owner))
+ if(M != owner && M != target && iscarbon(M) && M.mind && !M.has_unlimited_silicon_privilege && !M.eye_blind && !M.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ was_unnoticed = FALSE
+ break
+ if (was_unnoticed)
+ to_chat(user, "You think no one saw you...")
+ else
+ to_chat(user, "Someone may have noticed...")
+
+ else // /atom/proc/visible_message(message, self_message, blind_message, vision_distance, ignored_mobs)
+ user.visible_message("[user] closes [user.p_their()] mouth around [target]'s neck!", \
+ "You sink your fangs into [target]'s neck.")
+ // My mouth is full!
+ ADD_TRAIT(user, TRAIT_MUTE, "bloodsucker_feed")
+
+ // Begin Feed Loop
+ var/warning_target_inhuman = FALSE
+ var/warning_target_dead = FALSE
+ var/warning_full = FALSE
+ var/warning_target_bloodvol = 99999
+ var/amount_taken = 0
+ var/blood_take_mult = amSilent ? 0.3 : 1 // Quantity to take per tick, based on Silent or not.
+ var/was_alive = target.stat < DEAD && ishuman(target)
+ // Activate Effects
+ //target.add_trait(TRAIT_MUTE, "bloodsucker_victim") // <----- Make mute a power you buy?
+
+ // FEEEEEEEEED!!! //
+ bloodsuckerdatum.poweron_feed = TRUE
+ while (bloodsuckerdatum && target && active)
+ //user.mobility_flags &= ~MOBILITY_MOVE // user.canmove = 0 // Prevents spilling blood accidentally.
+
+ // Abort? A bloody mistake.
+ if (!do_mob(user, target, 20, 0, 0, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target)))
+ // May have disabled Feed during do_mob
+ if (!active || !ContinueActive(user, target))
+ break
+
+ if (amSilent)
+ to_chat(user, "Your feeding has been interrupted...but [target.p_they()] didn't seem to notice you.")
+ else
+ to_chat(user, "Your feeding has been interrupted!")
+ user.visible_message("[user] is ripped from [target]'s throat. [target.p_their(TRUE)] blood sprays everywhere!", \
+ "Your teeth are ripped from [target]'s throat. [target.p_their(TRUE)] blood sprays everywhere!")
+
+ // Deal Damage to Target (should have been more careful!)
+ if (iscarbon(target))
+ var/mob/living/carbon/C = target
+ C.bleed(15)
+ playsound(get_turf(target), 'sound/effects/splat.ogg', 40, 1)
+ if (ishuman(target))
+ var/mob/living/carbon/human/H = target
+ H.bleed_rate += 5
+ target.add_splatter_floor(get_turf(target))
+ user.add_mob_blood(target) // Put target's blood on us. The donor goes in the ( )
+ target.add_mob_blood(target)
+ target.take_overall_damage(10,0)
+ target.emote("scream")
+
+ // Killed Target?
+ if (was_alive)
+ CheckKilledTarget(user,target)
+
+ return
+
+ ///////////////////////////////////////////////////////////
+ // Handle Feeding! User & Victim Effects (per tick)
+ bloodsuckerdatum.HandleFeeding(target, blood_take_mult)
+ amount_taken += amSilent ? 0.3 : 1
+ if (!amSilent)
+ ApplyVictimEffects(target) // Sleep, paralysis, immobile, unconscious, and mute
+ if (amount_taken > 5 && target.stat < DEAD && ishuman(target))
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "drankblood", /datum/mood_event/drankblood) // GOOD // in bloodsucker_life.dm
+
+ ///////////////////////////////////////////////////////////
+ // Not Human?
+ if (!ishuman(target))
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "drankblood", /datum/mood_event/drankblood_bad) // BAD // in bloodsucker_life.dm
+ if (!warning_target_inhuman)
+ to_chat(user, "You recoil at the taste of a lesser lifeform.")
+ warning_target_inhuman = TRUE
+ // Dead Blood?
+ if (target.stat >= DEAD)
+ if (ishuman(target))
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "drankblood", /datum/mood_event/drankblood_dead) // BAD // in bloodsucker_life.dm
+ if (!warning_target_dead)
+ to_chat(user, "Your victim is dead. [target.p_their(TRUE)] blood barely nourishes you.")
+ warning_target_dead = TRUE
+ // Full?
+ if (!warning_full && user.blood_volume >= bloodsuckerdatum.maxBloodVolume)
+ to_chat(user, "You are full. Further blood will be wasted.")
+ warning_full = TRUE
+ // Blood Remaining? (Carbons/Humans only)
+ if (iscarbon(target) && !target.AmBloodsucker(1))
+ if (target.blood_volume <= BLOOD_VOLUME_BAD && warning_target_bloodvol > BLOOD_VOLUME_BAD)
+ to_chat(user, "Your victim's blood volume is fatally low!")
+ else if (target.blood_volume <= BLOOD_VOLUME_OKAY && warning_target_bloodvol > BLOOD_VOLUME_OKAY)
+ to_chat(user, "Your victim's blood volume is dangerously low.")
+ else if (target.blood_volume <= BLOOD_VOLUME_SAFE && warning_target_bloodvol > BLOOD_VOLUME_SAFE)
+ to_chat(user, "Your victim's blood is at an unsafe level.")
+ warning_target_bloodvol = target.blood_volume // If we had a warning to give, it's been given by now.
+ // Done?
+ if (target.blood_volume <= 0)
+ to_chat(user, "You have bled your victim dry.")
+ break
+
+ // Blood Gulp Sound
+ owner.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
+
+ // DONE!
+ //DeactivatePower(user,target)
+ if (amSilent)
+ to_chat(user, "You slowly release [target]'s wrist." + (target.stat == 0 ? " [target.p_their(TRUE)] face lacks expression, like you've already been forgotten." : ""))
+ else
+ user.visible_message("[user] unclenches their teeth from [target]'s neck.", \
+ "You retract your fangs and release [target] from your bite.")
+
+ // /proc/log_combat(atom/user, atom/target, what_done, atom/object=null, addition=null)
+ log_combat(owner, target, "fed on blood", addition="(and took [amount_taken] blood)")
+
+ // Killed Target?
+ if (was_alive)
+ CheckKilledTarget(user,target)
+
+
+/datum/action/bloodsucker/feed/proc/CheckKilledTarget(mob/living/user, mob/living/target)
+ // Bad Vampire. You shouldn't do that.
+ if (target && target.stat >= DEAD && ishuman(target))
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "drankkilled", /datum/mood_event/drankkilled) // BAD // in bloodsucker_life.dm
+
+/datum/action/bloodsucker/feed/ContinueActive(mob/living/user, mob/living/target)
+ return ..() && target && (!target_grappled || user.pulling == target)// Active, and still Antag,
+ // NOTE: We only care about pulling if target started off that way. Mostly only important for Aggressive feed.
+
+/datum/action/bloodsucker/feed/proc/ApplyVictimEffects(mob/living/target)
+ // Bloodsuckers not affected by "the Kiss" of another vampire
+ if (!target.mind || !target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ target.Unconscious(50,0)
+ target.Knockdown(40 + 5 * level_current,1)
+ // NOTE: THis is based on level of power!
+ if (ishuman(target))
+ target.adjustStaminaLoss(5, forced = TRUE)// Base Stamina Damage
+
+/datum/action/bloodsucker/feed/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..() // activate = FALSE
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ // No longer Feeding
+ if (bloodsuckerdatum)
+ bloodsuckerdatum.poweron_feed = FALSE
+ feed_target = null
+ // My mouth is no longer full
+ REMOVE_TRAIT(owner, TRAIT_MUTE, "bloodsucker_feed")
+ // Let me move immediately
+ user.update_canmove()
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm b/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm
new file mode 100644
index 0000000000..3305504c15
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm
@@ -0,0 +1,54 @@
+
+
+
+
+/datum/action/bloodsucker/fortitude
+ name = "Fortitude"//"Cellular Emporium"
+ desc = "Withstand egregious physical wounds and walk away from attacks that would stun, pierce, and dismember lesser beings. You cannot run while active."
+ button_icon_state = "power_fortitude"
+ bloodcost = 5
+ cooldown = 80
+ bloodsucker_can_buy = TRUE
+ amToggle = TRUE
+ warn_constant_cost = TRUE
+
+ var/this_resist // So we can raise and lower your brute resist based on what your level_current WAS.
+
+/datum/action/bloodsucker/fortitude/ActivatePower()
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ var/mob/living/user = owner
+ to_chat(user, "Your flesh, skin, and muscles become as steel.")
+ // Traits & Effects
+ ADD_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude")
+ ADD_TRAIT(user, TRAIT_NODISMEMBER, "fortitude")
+ ADD_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude")
+ ADD_TRAIT(user, TRAIT_NORUNNING, "fortitude")
+ if (ishuman(owner))
+ var/mob/living/carbon/human/H = owner
+ this_resist = max(0.3, 0.7 - level_current * 0.1)
+ H.physiology.brute_mod *= this_resist//0.5
+ H.physiology.burn_mod *= this_resist//0.5
+ // Stop Running (Taken from /datum/quirk/nyctophobia in negative.dm)
+ var/was_running = (user.m_intent == MOVE_INTENT_RUN)
+ if(was_running)
+ user.toggle_move_intent()
+ while(bloodsuckerdatum && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN)
+ // Pay Blood Toll (if awake)
+ if (user.stat == CONSCIOUS)
+ bloodsuckerdatum.AddBloodVolume(-0.5) // Used to be 0.3 blood per 2 seconds, but we're making it more expensive to keep on.
+ sleep(20) // Check every few ticks that we haven't disabled this power
+ // Return to Running (if you were before)
+ if(was_running && user.m_intent != MOVE_INTENT_RUN)
+ user.toggle_move_intent()
+
+/datum/action/bloodsucker/fortitude/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..()
+ // Restore Traits & Effects
+ REMOVE_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude")
+ REMOVE_TRAIT(user, TRAIT_NODISMEMBER, "fortitude")
+ REMOVE_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude")
+ REMOVE_TRAIT(user, TRAIT_NORUNNING, "fortitude")
+ if (ishuman(owner))
+ var/mob/living/carbon/human/H = owner
+ H.physiology.brute_mod /= this_resist//0.5
+ H.physiology.burn_mod /= this_resist//0.5
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm
new file mode 100644
index 0000000000..0da9ab5ba3
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm
@@ -0,0 +1,115 @@
+
+
+/datum/action/bloodsucker/gohome
+ name = "Vanishing Act"
+ desc = "As dawn aproaches, disperse into mist and return directly to your Lair.
WARNING: You will drop ALL of your possessions if observed by mortals."
+ button_icon_state = "power_gohome"
+ background_icon_state_on = "vamp_power_off_oneshot" // Even though this never goes off.
+ background_icon_state_off = "vamp_power_off_oneshot"
+
+ bloodcost = 25
+ cooldown = 99999 // It'll never come back.
+ amToggle = FALSE
+ amSingleUse = TRUE
+
+ bloodsucker_can_buy = FALSE // You only get this if you've claimed a lair, and only just before sunrise.
+ can_use_in_torpor = TRUE
+ must_be_capacitated = TRUE
+ can_be_immobilized = TRUE
+
+/datum/action/bloodsucker/gohome/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ // Have No Lair (NOTE: You only got this power if you had a lair, so this means it's destroyed)
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if (!istype(bloodsuckerdatum) || !bloodsuckerdatum.coffin)
+ if (display_error)
+ to_chat(owner, "Your coffin has been destroyed!")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/gohome/ActivatePower()
+ var/mob/living/carbon/user = owner
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ // IMPORTANT: Check for lair at every step! It might get destroyed.
+ to_chat(user, "You focus on separating your consciousness from your physical form...")
+ // STEP ONE: Flicker Lights
+ for(var/obj/machinery/light/L in view(3, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
+ L.flicker(5)
+ playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 20, 1)
+ sleep(50)
+ for(var/obj/machinery/light/L in view(3, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
+ L.flicker(5)
+ playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 40, 1)
+ sleep(50)
+ for(var/obj/machinery/light/L in view(6, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
+ L.flicker(5)
+ playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 60, 1)
+ // ( STEP TWO: Lights OFF? )
+ // CHECK: Still have Coffin?
+ if (!istype(bloodsuckerdatum) || !bloodsuckerdatum.coffin)
+ to_chat(user, "Your coffin has been destroyed! You no longer have a destination.")
+ return FALSE
+ if (!owner)
+ return
+ // SEEN?: (effects ONLY if there are witnesses! Otherwise you just POOF)
+ // NOTE: Stolen directly from statue.dm, thanks guys!
+ var/am_seen = FALSE // Do Effects (seen by anyone)
+ var/drop_item = FALSE // Drop Stuff (seen by non-vamp)
+ if (isturf(owner.loc)) // Only check if I'm not in a Locker or something.
+ // A) Check for Darkness (we can just leave)
+ var/turf/T = get_turf(user)
+ if(T && T.lighting_object && T.get_lumcount()>= 0.1)
+ // B) Check for Viewers
+ for(var/mob/living/M in viewers(owner))
+ if(M != owner && isliving(M) && M.mind && !M.has_unlimited_silicon_privilege && !M.eye_blind) // M.client <--- add this in after testing!
+ am_seen = TRUE
+ if (!M.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ drop_item = TRUE
+ break
+ // LOSE CUFFS
+ if(user.handcuffed)
+ var/obj/O = user.handcuffed
+ user.dropItemToGround(O)
+ if(user.legcuffed)
+ var/obj/O = user.legcuffed
+ user.dropItemToGround(O)
+ // SEEN!
+ if (drop_item)
+ // DROP: Clothes, held items, and cuffs etc
+ // NOTE: Taken from unequip_everything() in inventory.dm. We need to
+ // *force* all items to drop, so we had to just gut the code out of it.
+ var/list/items = list()
+ items |= user.get_equipped_items()
+ for(var/I in items)
+ user.dropItemToGround(I,TRUE)
+ for(var/obj/item/I in owner.held_items) // drop_all_held_items()
+ user.dropItemToGround(I, TRUE)
+ if (am_seen)
+ // POOF EFFECTS
+ playsound(get_turf(owner), 'sound/magic/summon_karp.ogg', 60, 1)
+ var/datum/effect_system/steam_spread/puff = new /datum/effect_system/steam_spread/()
+ puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke
+ puff.set_up(3, 0, get_turf(owner))
+ puff.start()
+ // TELEPORT: Move to Coffin & Close it!
+ do_teleport(owner, bloodsuckerdatum.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM) // in teleport.dm?
+ // SLEEP
+ user.resting = TRUE
+ //user.Unconscious(30,0)
+ user.Stun(30,1)
+ // CLOSE LID: If fail, force me in.
+ if (!bloodsuckerdatum.coffin.close(owner))
+ bloodsuckerdatum.coffin.insert(owner) // Puts me inside.
+ // The following was taken from close() proc in closets.dm
+ // (but we had to do it this way because there is no way to force entry)
+ playsound(bloodsuckerdatum.coffin.loc, bloodsuckerdatum.coffin.close_sound, 15, 1, -3)
+ bloodsuckerdatum.coffin.opened = FALSE
+ bloodsuckerdatum.coffin.density = TRUE
+ bloodsuckerdatum.coffin.update_icon()
+ // Lock Coffin
+ bloodsuckerdatum.coffin.LockMe(owner)
+ // ( STEP FIVE: Create animal at prev location? )
+ //var/mob/living/simple_animal/SA = /mob/living/simple_animal/hostile/retaliate/bat // pick(/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse, /mob/living/simple_animal/hostile/retaliate/bat) //prob(300) /mob/living/simple_animal/mouse,
+ //new SA (owner.loc)
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm
new file mode 100644
index 0000000000..ee1dd3007c
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm
@@ -0,0 +1,85 @@
+
+// Level 1: Speed to location
+// Level 2: Dodge Bullets
+// Level 3: Stun People Passed
+
+/datum/action/bloodsucker/targeted/haste
+ name = "Immortal Haste"
+ desc = "Dash somewhere with supernatural speed. Those nearby may be knocked away, stunned, or left empty-handed."
+ button_icon_state = "power_speed"
+ bloodcost = 6
+ cooldown = 30
+ target_range = 15
+ power_activates_immediately = TRUE
+ message_Trigger = ""//"Whom will you subvert to your will?"
+ bloodsucker_can_buy = TRUE
+ must_be_capacitated = TRUE
+
+/datum/action/bloodsucker/targeted/haste/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ // Being Grabbed
+ if(owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE)
+ if(display_error)
+ to_chat(owner, "You're being grabbed!")
+ return FALSE
+ if(!owner.has_gravity(owner.loc)) //We dont want people to be able to use this to fly around in space
+ if(display_error)
+ to_chat(owner, "You cant dash while floating!")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/haste/CheckValidTarget(atom/A)
+ return isturf(A) || A.loc != owner.loc // Anything will do, if it's not me or my square
+
+/datum/action/bloodsucker/targeted/haste/CheckCanTarget(atom/A, display_error)
+ // DEFAULT CHECKS (Distance)
+ if (!..())
+ return FALSE
+ // Check: Range
+ //if (!(A in view(target_range, get_turf(owner))))
+ // return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/haste/FireTargetedPower(atom/A)
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
+ var/mob/living/user = owner
+ var/turf/T = isturf(A) ? A : get_turf(A)
+ // Pulled? Not anymore.
+ owner.pulledby = null
+ // Step One: Heatseek toward Target's Turf
+ walk_to(owner, T, 0, 0.01, 20) // NOTE: this runs in the background! to cancel it, you need to use walk(owner.current,0), or give them a new path.
+ playsound(get_turf(owner), 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+ var/safety = 20
+ while(get_turf(owner) != T && safety > 0 && !(isliving(target) && target.Adjacent(owner)))
+ user.canmove = FALSE //Dont move while doing the thing, or itll break
+ safety --
+ // Did I get knocked down?
+ if(owner && owner.incapacitated(ignore_restraints=TRUE, ignore_grab=TRUE))// owner.incapacitated())
+ // We're gonna cancel. But am I on the ground? Spin me!
+ if(user.resting)
+ var/send_dir = get_dir(owner, T)
+ new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE)
+ owner.spin(10)
+ break
+ // Spin/Stun people we pass.
+ //var/mob/living/newtarget = locate(/mob/living) in oview(1, owner)
+ var/list/mob/living/foundtargets = list()
+ for(var/mob/living/newtarget in oview(1, owner))
+ if (newtarget && newtarget != target && !(newtarget in foundtargets))//!newtarget.IsKnockdown())
+ if (rand(0, 5) < level_current)
+ playsound(get_turf(newtarget), "sound/weapons/punch[rand(1,4)].ogg", 15, 1, -1)
+ newtarget.Knockdown(10 + level_current * 5)
+ if(newtarget.IsStun())
+ newtarget.spin(10,1)
+ if (rand(0,4))
+ newtarget.drop_all_held_items()
+ foundtargets += newtarget
+ sleep(1)
+ if(user)
+ user.update_canmove() //Let the poor guy move again
+
+/datum/action/bloodsucker/targeted/haste/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..() // activate = FALSE
+ user.update_canmove()
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm
new file mode 100644
index 0000000000..2c1b8d6321
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm
@@ -0,0 +1,83 @@
+// Level 1: Grapple level 2
+// Level 2: Grapple 3 from Behind
+// Level 3: Grapple 3 from Shadows
+/datum/action/bloodsucker/targeted/lunge
+ name = "Predatory Lunge"
+ desc = "Spring at your target and aggressively grapple them without warning. Attacks from concealment or the rear may even knock them down."
+ button_icon_state = "power_lunge"
+ bloodcost = 10
+ cooldown = 100
+ target_range = 3
+ power_activates_immediately = TRUE
+ message_Trigger = ""//"Whom will you subvert to your will?"
+ must_be_capacitated = TRUE
+ bloodsucker_can_buy = TRUE
+
+/datum/action/bloodsucker/targeted/lunge/CheckCanUse(display_error)
+ if(!..(display_error))// DEFAULT CHECKS
+ return FALSE
+ // Being Grabbed
+ if(owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE)
+ if(display_error)
+ to_chat(owner, "You're being grabbed!")
+ return FALSE
+ if(!owner.has_gravity(owner.loc))//TODO figure out how to check if theyre able to move while in nograv
+ if(display_error)
+ to_chat(owner, "You cant lunge while floating!")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/lunge/CheckValidTarget(atom/A)
+ return isliving(A)
+
+/datum/action/bloodsucker/targeted/lunge/CheckCanTarget(atom/A, display_error)
+ // Check: Self
+ if(target == owner)
+ return FALSE
+ // Check: Range
+ //if (!(target in view(target_range, get_turf(owner))))
+ // if (display_error)
+ // to_chat(owner, "Your victim is too far away.")
+ // return FALSE
+ // DEFAULT CHECKS (Distance)
+ if(!..())
+ return FALSE
+ // Check: Turf
+ var/mob/living/L = A
+ if(!isturf(L.loc))
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/lunge/FireTargetedPower(atom/A)
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
+ var/mob/living/carbon/target = A
+ var/turf/T = get_turf(target)
+ // Clear Vars
+ owner.pulling = null
+ // Will we Knock them Down?
+ var/do_knockdown = !is_A_facing_B(target,owner) || owner.alpha <= 0 || istype(owner.loc, /obj/structure/closet)
+ // CAUSES: Target has their back to me, I'm invisible, or I'm in a Closet
+ // Step One: Heatseek toward Target's Turf
+
+ walk_towards(owner, T, 0.1, 10) // NOTE: this runs in the background! to cancel it, you need to use walk(owner.current,0), or give them a new path.
+ addtimer(CALLBACK(owner, .proc/_walk, 0), 2 SECONDS)
+ if(get_turf(owner) != T && !(isliving(target) && target.Adjacent(owner)) && owner.incapacitated() && owner.resting)
+ var/send_dir = get_dir(owner, T)
+ new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE)
+ owner.spin(10)
+ // Step Two: Check if I'm at/adjectent to Target's CURRENT turf (not original...that was just a destination)
+ sleep(1)
+ if(target.Adjacent(owner))
+ // LEVEL 2: If behind target, mute or unconscious!
+ if(do_knockdown) // && level_current >= 1)
+ target.Knockdown(15 + 10 * level_current,1)
+ target.adjustStaminaLoss(40 + 10 * level_current)
+ // Cancel Walk (we were close enough to contact them)
+ walk(owner, 0)
+ target.Stun(10,1) //Without this the victim can just walk away
+ target.grabbedby(owner) // Taken from mutations.dm under changelings
+ target.grippedby(owner, instant = TRUE) //instant aggro grab
+
+/datum/action/bloodsucker/targeted/lunge/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..() // activate = FALSE
+ user.update_canmove()
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm b/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm
new file mode 100644
index 0000000000..6ee17b3014
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm
@@ -0,0 +1,97 @@
+
+
+
+// WITHOUT THIS POWER:
+//
+// - Mid-Blood: SHOW AS PALE
+// - Low-Blood: SHOW AS DEAD
+// - No Heartbeat
+// - Examine shows actual blood
+// - Thermal homeostasis (ColdBlooded)
+
+
+
+// WITH THIS POWER:
+// - Normal body temp -- remove Cold Blooded (return on deactivate)
+// -
+
+
+/datum/action/bloodsucker/masquerade
+ name = "Masquerade"
+ desc = "Feign the vital signs of a mortal, and escape both casual and medical notice as the monster you truly are."
+ button_icon_state = "power_human"
+ bloodcost = 10
+ cooldown = 50
+ amToggle = TRUE
+ bloodsucker_can_buy = TRUE
+ warn_constant_cost = TRUE
+ can_use_in_torpor = TRUE // Masquerade is maybe the only one that can do this. It stops your healing.
+ cooldown_static = TRUE
+
+// NOTE: Firing off vulgar powers disables your Masquerade!
+
+/*/datum/action/bloodsucker/masquerade/CheckCanUse(display_error)
+ if(!..(display_error))// DEFAULT CHECKS
+ return FALSE
+ // DONE!
+ return TRUE
+*/
+
+
+/datum/action/bloodsucker/masquerade/ActivatePower()
+
+ var/mob/living/user = owner
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+
+ to_chat(user, "Your heart beats falsely within your lifeless chest. You may yet pass for a mortal.")
+ to_chat(user, "Your vampiric healing is halted while imitating life.")
+
+
+ // Remove ColdBlooded & Hard/SoftCrit
+ REMOVE_TRAIT(user, TRAIT_COLDBLOODED, "bloodsucker")
+ REMOVE_TRAIT(user, TRAIT_NOHARDCRIT, "bloodsucker")
+ REMOVE_TRAIT(user, TRAIT_NOSOFTCRIT, "bloodsucker")
+ var/obj/item/organ/heart/vampheart/H = user.getorganslot(ORGAN_SLOT_HEART)
+
+ // WE ARE ALIVE! //
+ bloodsuckerdatum.poweron_masquerade = TRUE
+ while(bloodsuckerdatum && ContinueActive(user))
+
+ // HEART
+ if (istype(H))
+ H.FakeStart()
+
+ // PASSIVE (done from LIFE)
+ // Don't Show Pale/Dead on low blood
+ // Don't vomit food
+ // Don't Heal
+
+ // Pay Blood Toll (if awake)
+ if (user.stat == CONSCIOUS)
+ bloodsuckerdatum.AddBloodVolume(-0.2)
+
+ sleep(20) // Check every few ticks that we haven't disabled this power
+
+
+/datum/action/bloodsucker/masquerade/ContinueActive(mob/living/user)
+ // Disable if unable to use power anymore.
+ //if (user.stat == DEAD || user.blood_volume <= 0) // not conscious or soft critor uncon, just dead
+ // return FALSE
+ return ..() // Active, and still Antag
+
+
+/datum/action/bloodsucker/masquerade/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..() // activate = FALSE
+
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ bloodsuckerdatum.poweron_masquerade = FALSE
+
+ ADD_TRAIT(user, TRAIT_COLDBLOODED, "bloodsucker")
+ ADD_TRAIT(user, TRAIT_NOHARDCRIT, "bloodsucker")
+ ADD_TRAIT(user, TRAIT_NOSOFTCRIT, "bloodsucker")
+
+ // HEART
+ var/obj/item/organ/heart/H = user.getorganslot(ORGAN_SLOT_HEART)
+ H.Stop()
+
+ to_chat(user, "Your heart beats one final time, while your skin dries out and your icy pallor returns.")
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm
new file mode 100644
index 0000000000..94bc0e11d0
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm
@@ -0,0 +1,114 @@
+
+// * MEZMERIZE
+// LOVE: Target falls in love with you. Being harmed directly causes them harm if they see it?
+// STAY: Target will do everything they can to stand in the same place.
+// FOLLOW: Target follows you, spouting random phrases from their history (or maybe Poly's or NPC's vocab?)
+// ATTACK: Target finds a nearby non-Bloodsucker victim to attack.
+
+/datum/action/bloodsucker/targeted/mesmerize
+ name = "Mesmerize"
+ desc = "Dominate the mind of a mortal who can see your eyes."
+ button_icon_state = "power_mez"
+ bloodcost = 30
+ cooldown = 200
+ target_range = 1
+ power_activates_immediately = FALSE
+ message_Trigger = "Whom will you subvert to your will?"
+ must_be_capacitated = TRUE
+ bloodsucker_can_buy = TRUE
+
+/datum/action/bloodsucker/targeted/mesmerize/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ if (!owner.getorganslot(ORGAN_SLOT_EYES))
+ if (display_error)
+ to_chat(owner, "You have no eyes with which to mesmerize.")
+ return FALSE
+ // Check: Eyes covered?
+ var/mob/living/L = owner
+ if (istype(L) && L.is_eyes_covered() || !isturf(owner.loc))
+ if (display_error)
+ to_chat(owner, "Your eyes are concealed from sight.")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/mesmerize/CheckValidTarget(atom/A)
+ return iscarbon(A)
+
+/datum/action/bloodsucker/targeted/mesmerize/CheckCanTarget(atom/A,display_error)
+ // Check: Self
+ if (A == owner)
+ return FALSE
+ var/mob/living/carbon/target = A // We already know it's carbon due to CheckValidTarget()
+ // Bloodsucker
+ if (target.mind && target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ if (display_error)
+ to_chat(owner, "Bloodsuckers are immune to [src].")
+ return FALSE
+ // Dead/Unconscious
+ if (target.stat > CONSCIOUS)
+ if (display_error)
+ to_chat(owner, "Your victim is not [(target.stat == DEAD || HAS_TRAIT(target, TRAIT_FAKEDEATH))?"alive":"conscious"].")
+ return FALSE
+ // Check: Target has eyes?
+ if (!target.getorganslot(ORGAN_SLOT_EYES))
+ if (display_error)
+ to_chat(owner, "They have no eyes!")
+ return FALSE
+ // Check: Target blind?
+ if (target.eye_blind > 0)
+ if (display_error)
+ to_chat(owner, "Your victim's eyes are glazed over. They cannot perceive you.")
+ return FALSE
+ // Check: Target See Me? (behind wall)
+ if (!(owner in view(target_range, get_turf(target))))
+ // Sub-Check: GET CLOSER
+ //if (!(owner in range(target_range, get_turf(target)))
+ // if (display_error)
+ // to_chat(owner, "You're too far from your victim.")
+ if (display_error)
+ to_chat(owner, "You're too far outside your victim's view.")
+ return FALSE
+ // Check: Facing target?
+ if (!is_A_facing_B(owner,target)) // in unsorted.dm
+ if (display_error)
+ to_chat(owner, "You must be facing your victim.")
+ return FALSE
+ // Check: Target facing me?
+ if (!target.resting && !is_A_facing_B(target,owner))
+ if (display_error)
+ to_chat(owner, "Your victim must be facing you to see into your eyes.")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/mesmerize/FireTargetedPower(atom/A)
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
+ var/mob/living/carbon/target = A
+ var/mob/living/user = owner
+
+ if(istype(target))
+ target.Stun(40) //Utterly useless without this, its okay since there are so many checks to go through
+ target.silent = 45 //Shhhh little lamb
+ target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 45) //So you cant rotate with combat mode, plus fancy status alert
+
+ if(do_mob(user, target, 40, 0, TRUE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target)))
+ PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!
+ var/power_time = 90 + level_current * 12
+ target.silent = power_time + 20
+ target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 100 + level_current * 15)
+ to_chat(user, "[target] is fixed in place by your hypnotic gaze.")
+ target.Stun(power_time)
+ //target.silent += power_time / 10 // Silent isn't based on ticks.
+ target.next_move = world.time + power_time // <--- Use direct change instead. We want an unmodified delay to their next move // target.changeNext_move(power_time) // check click.dm
+ target.notransform = TRUE // <--- Fuck it. We tried using next_move, but they could STILL resist. We're just doing a hard freeze.
+ spawn(power_time)
+ if(istype(target))
+ target.notransform = FALSE
+ // They Woke Up! (Notice if within view)
+ if(istype(user) && target.stat == CONSCIOUS && (target in view(10, get_turf(user))) )
+ to_chat(user, "[target] has snapped out of their trance.")
+
+
+/datum/action/bloodsucker/targeted/mesmerize/ContinueActive(mob/living/user, mob/living/target)
+ return ..() && CheckCanUse() && CheckCanTarget(target)
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm b/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm
new file mode 100644
index 0000000000..c650a6af15
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm
@@ -0,0 +1,124 @@
+
+
+/datum/action/bloodsucker/targeted/trespass
+ name = "Trespass"
+ desc = "Become mist and advance two tiles in one direction, ignoring all obstacles except for walls. Useful for skipping past doors and barricades."
+ button_icon_state = "power_tres"
+
+ bloodcost = 10
+ cooldown = 60
+ amToggle = FALSE
+ //target_range = 2
+
+ bloodsucker_can_buy = TRUE
+ must_be_capacitated = FALSE
+ can_be_immobilized = TRUE
+
+ var/turf/target_turf // We need to decide where we're going based on where we clicked. It's not actually the tile we clicked.
+
+/datum/action/bloodsucker/targeted/trespass/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ if(owner.notransform || !get_turf(owner))
+ return FALSE
+
+ return TRUE
+
+
+/datum/action/bloodsucker/targeted/trespass/CheckValidTarget(atom/A)
+ // Can't target my tile
+ if (A == get_turf(owner) || get_turf(A) == get_turf(owner))
+ return FALSE
+
+ return TRUE // All we care about is destination. Anything you click is fine.
+
+
+/datum/action/bloodsucker/targeted/trespass/CheckCanTarget(atom/A, display_error)
+ // NOTE: Do NOT use ..()! We don't want to check distance or anything.
+
+ // Get clicked tile
+ var/final_turf = isturf(A) ? A : get_turf(A)
+
+ // Are either tiles WALLS?
+ var/turf/from_turf = get_turf(owner)
+ var/this_dir // = get_dir(from_turf, target_turf)
+ for (var/i=1 to 2)
+ // Keep Prev Direction if we've reached final turf
+ if (from_turf != final_turf)
+ this_dir = get_dir(from_turf, final_turf) // Recalculate dir so we don't overshoot on a diagonal.
+ from_turf = get_step(from_turf, this_dir)
+ // ERROR! Wall!
+ if (iswallturf(from_turf))
+ if (display_error)
+ var/wallwarning = (i == 1) ? "in the way" : "at your destination"
+ to_chat(owner, "There is a solid wall [wallwarning].")
+ return FALSE
+ // Done
+ target_turf = from_turf
+
+ return TRUE
+
+
+/datum/action/bloodsucker/targeted/trespass/FireTargetedPower(atom/A)
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
+
+ // Find target turf, at or below Atom
+ var/mob/living/carbon/user = owner
+ var/turf/my_turf = get_turf(owner)
+
+ user.visible_message("[user]'s form dissipates into a cloud of mist!", \
+ "You disspiate into formless mist.")
+
+
+ // Effect Origin
+ playsound(get_turf(owner), 'sound/magic/summon_karp.ogg', 60, 1)
+ var/datum/effect_system/steam_spread/puff = new /datum/effect_system/steam_spread/()
+ puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke
+ puff.set_up(3, 0, my_turf)
+ puff.start()
+
+ var/mist_delay = max(5, 20 - level_current * 2.5) // Level up and do this faster.
+
+ // Freeze Me
+ user.next_move = world.time + mist_delay
+ user.Stun(mist_delay, ignore_canstun = TRUE)
+ user.notransform = TRUE
+ user.density = 0
+ var/invis_was = user.invisibility
+ user.invisibility = INVISIBILITY_MAXIMUM
+
+ // LOSE CUFFS
+ if(user.handcuffed)
+ var/obj/O = user.handcuffed
+ user.dropItemToGround(O)
+ if(user.legcuffed)
+ var/obj/O = user.legcuffed
+ user.dropItemToGround(O)
+
+ // Wait...
+ sleep(mist_delay / 2)
+
+ // Move & Freeze
+ if (isturf(target_turf))
+ do_teleport(owner, target_turf, no_effects=TRUE, channel = TELEPORT_CHANNEL_QUANTUM) // in teleport.dm?
+ user.next_move = world.time + mist_delay / 2
+ user.Stun(mist_delay / 2, ignore_canstun = TRUE)
+
+ // Wait...
+ sleep(mist_delay / 2)
+
+ // Un-Hide & Freeze
+ user.dir = get_dir(my_turf, target_turf)
+ user.next_move = world.time + mist_delay / 2
+ user.Stun(mist_delay / 2, ignore_canstun = TRUE)
+ user.notransform = FALSE
+ user.density = 1
+ user.invisibility = invis_was
+
+ // Effect Destination
+ playsound(get_turf(owner), 'sound/magic/summon_karp.ogg', 60, 1)
+ puff = new /datum/effect_system/steam_spread/()
+ puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke
+ puff.set_up(3, 0, target_turf)
+ puff.start()
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm
new file mode 100644
index 0000000000..0c83cc2d44
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm
@@ -0,0 +1,163 @@
+
+/datum/action/bloodsucker/veil
+ name = "Veil of Many Faces"
+ desc = "Disguise yourself in the illusion of another identity."
+ button_icon_state = "power_veil"
+ bloodcost = 15
+ cooldown = 100
+ amToggle = TRUE
+ bloodsucker_can_buy = TRUE
+ warn_constant_cost = TRUE
+
+ // Outfit Vars
+ var/list/original_items = list()
+
+ // Identity Vars
+ var/prev_gender
+ var/prev_skin_tone
+ var/prev_hair_style
+ var/prev_facial_hair_style
+ var/prev_hair_color
+ var/prev_facial_hair_color
+ var/prev_underwear
+ var/prev_undie_color
+ var/prev_undershirt
+ var/prev_shirt_color
+ var/prev_socks
+ var/prev_socks_color
+ var/prev_disfigured
+ var/list/prev_features // For lizards and such
+
+
+/datum/action/bloodsucker/veil/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+
+ return TRUE
+
+
+/datum/action/bloodsucker/veil/ActivatePower()
+
+ cast_effect() // POOF
+
+ //if (blahblahblah)
+ // Disguise_Outfit()
+
+ Disguise_FaceName()
+
+
+/datum/action/bloodsucker/veil/proc/Disguise_Outfit()
+
+ // Step One: Back up original items
+
+
+
+
+/datum/action/bloodsucker/veil/proc/Disguise_FaceName()
+
+ // Change Name/Voice
+ var/mob/living/carbon/human/H = owner
+ H.name_override = H.dna.species.random_name(H.gender)
+ H.name = H.name_override
+ H.SetSpecialVoice(H.name_override)
+ to_chat(owner, "You mystify the air around your person. Your identity is now altered.")
+
+ // Store Prev Appearance
+ prev_gender = H.gender
+ prev_skin_tone = H.skin_tone
+ prev_hair_style = H.hair_style
+ prev_facial_hair_style = H.facial_hair_style
+ prev_hair_color = H.hair_color
+ prev_facial_hair_color = H.facial_hair_color
+ prev_underwear = H.underwear
+ prev_undie_color = H.undie_color
+ prev_undershirt = H.undershirt
+ prev_shirt_color = H.shirt_color
+ prev_socks = H.socks
+ prev_socks_color = H.socks_color
+ //prev_eye_color
+ prev_disfigured = HAS_TRAIT(H, TRAIT_DISFIGURED) // I was disfigured! //prev_disabilities = H.disabilities
+ prev_features = H.dna.features
+
+ // Change Appearance, not randomizing clothes colour, itll just be janky
+ H.gender = pick(MALE, FEMALE)
+ H.skin_tone = random_skin_tone()
+ H.hair_style = random_hair_style(H.gender)
+ H.facial_hair_style = pick(random_facial_hair_style(H.gender),"Shaved")
+ H.hair_color = random_short_color()
+ H.facial_hair_color = H.hair_color
+ H.underwear = random_underwear(H.gender)
+ H.undershirt = random_undershirt(H.gender)
+ H.socks = random_socks(H.gender)
+ //H.eye_color = random_eye_color()
+ REMOVE_TRAIT(H, TRAIT_DISFIGURED, null) //
+ H.dna.features = random_features()
+
+ // Apply Appearance
+ H.update_body() // Outfit and underware, also body.
+ //H.update_mutant_bodyparts() // Lizard tails etc
+ H.update_hair()
+ H.update_body_parts()
+
+ // Wait here til we deactivate power or go unconscious
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ while (ContinueActive(owner) && istype(bloodsuckerdatum))//active && owner && owner.stat == CONSCIOUS)
+ bloodsuckerdatum.AddBloodVolume(-0.2)
+ sleep(10)
+
+ // Wait for a moment if you fell unconscious...
+ if (owner && owner.stat > CONSCIOUS)
+ sleep(50)
+
+
+/datum/action/bloodsucker/veil/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..()
+ if (ishuman(user))
+ var/mob/living/carbon/human/H = user
+
+ // Revert Identity
+ H.UnsetSpecialVoice()
+ H.name_override = null
+ H.name = H.real_name
+
+ // Revert Appearance
+ H.gender = prev_gender
+ H.skin_tone = prev_skin_tone
+ H.hair_style = prev_hair_style
+ H.facial_hair_style = prev_facial_hair_style
+ H.hair_color = prev_hair_color
+ H.facial_hair_color = prev_facial_hair_color
+ H.underwear = prev_underwear
+ H.undie_color = prev_undie_color
+ H.undershirt = prev_undershirt
+ H.shirt_color = prev_shirt_color
+ H.socks = prev_socks
+ H.socks_color = prev_socks_color
+
+ //H.disabilities = prev_disabilities // Restore HUSK, CLUMSY, etc.
+ if (prev_disfigured)
+ ADD_TRAIT(H, TRAIT_DISFIGURED, "husk") // NOTE: We are ASSUMING husk. // H.status_flags |= DISFIGURED // Restore "Unknown" disfigurement
+ H.dna.features = prev_features
+ // Apply Appearance
+ H.update_body() // Outfit and underware, also body.
+ H.update_hair()
+ H.update_body_parts() // Body itself, maybe skin color?
+ cast_effect() // POOF
+
+ // CAST EFFECT // // General effect (poof, splat, etc) when you cast. Doesn't happen automatically!
+/datum/action/bloodsucker/veil/proc/cast_effect()
+ // Effect
+ playsound(get_turf(owner), 'sound/magic/smoke.ogg', 20, 1)
+ var/datum/effect_system/steam_spread/puff = new /datum/effect_system/steam_spread/()
+ puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke
+ puff.set_up(3, 0, get_turf(owner))
+ puff.attach(owner) // OPTIONAL
+ puff.start()
+ owner.spin(8, 1) // Spin around like a loon.
+
+/obj/effect/particle_effect/smoke/vampsmoke
+ opaque = FALSE
+ lifetime = 0
+/obj/effect/particle_effect/smoke/vampsmoke/fade_out(frames = 6)
+ ..(frames)
diff --git a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm
new file mode 100644
index 0000000000..6b8795ea02
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm
@@ -0,0 +1,38 @@
+/datum/action/bloodsucker/vassal/recuperate
+ name = "Sanguine Recuperation"
+ desc = "Slowly heal brute damage while active. This process is exhausting, and requires some of your tainted blood."
+ button_icon_state = "power_recup"
+ amToggle = TRUE
+ bloodcost = 5
+ cooldown = 100
+
+/datum/action/bloodsucker/vassal/recuperate/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ if (owner.stat >= DEAD)
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/vassal/recuperate/ActivatePower()
+ to_chat(owner, "Your muscles clench and your skin crawls as your master's immortal blood knits your wounds and gives you stamina.")
+ var/mob/living/carbon/C = owner
+ var/mob/living/carbon/human/H
+ if(ishuman(owner))
+ H = owner
+ while(ContinueActive(owner))
+ C.adjustBruteLoss(-1.5)
+ C.adjustFireLoss(-0.5)
+ C.adjustToxLoss(-2, forced = TRUE)
+ C.blood_volume -= 0.2
+ C.adjustStaminaLoss(-15)
+ // Stop Bleeding
+ if(istype(H) && H.bleed_rate > 0 && rand(20) == 0)
+ H.bleed_rate --
+ C.Jitter(5)
+ sleep(10)
+ // DONE!
+ //DeactivatePower(owner)
+
+/datum/action/bloodsucker/vassal/recuperate/ContinueActive(mob/living/user, mob/living/target)
+ return ..() && user.stat <= DEAD && user.blood_volume > 500
diff --git a/code/modules/antagonists/brainwashing/brainwashing.dm b/code/modules/antagonists/brainwashing/brainwashing.dm
index f1cff2bff4..491ee9d2e5 100644
--- a/code/modules/antagonists/brainwashing/brainwashing.dm
+++ b/code/modules/antagonists/brainwashing/brainwashing.dm
@@ -9,7 +9,6 @@
for(var/O in directives)
var/datum/objective/brainwashing/objective = new(O)
B.objectives += objective
- M.objectives += objective
B.greet()
else
B = new()
@@ -32,10 +31,6 @@
antagpanel_category = "Other"
show_name_in_check_antagonists = TRUE
-/datum/antagonist/brainwashed/on_gain()
- owner.objectives |= objectives
- . = ..()
-
/datum/antagonist/brainwashed/greet()
to_chat(owner, "Your mind reels as it begins focusing on a single purpose...")
to_chat(owner, "Follow the Directives, at any cost!")
diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm
index f63e81acbf..7c589bb3ab 100644
--- a/code/modules/antagonists/brother/brother.dm
+++ b/code/modules/antagonists/brother/brother.dm
@@ -20,7 +20,6 @@
/datum/antagonist/brother/on_gain()
SSticker.mode.brothers += owner
objectives += team.objectives
- owner.objectives += objectives
owner.special_role = special_role
finalize_brother()
return ..()
diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm
index b6e3d66c35..0d68660d9d 100644
--- a/code/modules/antagonists/changeling/changeling.dm
+++ b/code/modules/antagonists/changeling/changeling.dm
@@ -459,8 +459,6 @@
objectives += identity_theft
escape_objective_possible = FALSE
- owner.objectives |= objectives
-
/datum/antagonist/changeling/proc/update_changeling_icons_added()
var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING]
hud.join_hud(owner.current)
diff --git a/code/modules/antagonists/changeling/powers/headcrab.dm b/code/modules/antagonists/changeling/powers/headcrab.dm
index 72d8a127ab..1e06fb39de 100644
--- a/code/modules/antagonists/changeling/powers/headcrab.dm
+++ b/code/modules/antagonists/changeling/powers/headcrab.dm
@@ -25,7 +25,8 @@
to_chat(H, "You are blinded by a shower of blood!")
H.Stun(20)
H.blur_eyes(20)
- H.adjust_eye_damage(5)
+ var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES)
+ eyes?.applyOrganDamage(5)
H.confused += 3
for(var/mob/living/silicon/S in range(2,user))
to_chat(S, "Your sensors are disabled by a shower of blood!")
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index c428c56d45..92a4f28308 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -334,7 +334,7 @@
/obj/item/projectile/tentacle/proc/tentacle_stab(mob/living/carbon/human/H, mob/living/carbon/C)
if(H.Adjacent(C))
for(var/obj/item/I in H.held_items)
- if(I.is_sharp())
+ if(I.get_sharpness())
C.visible_message("[H] impales [C] with [H.p_their()] [I.name]!", "[H] impales you with [H.p_their()] [I.name]!")
C.apply_damage(I.force, BRUTE, BODY_ZONE_CHEST)
H.do_item_attack_animation(C, used_item = I)
diff --git a/code/modules/antagonists/clockcult/clock_effect.dm b/code/modules/antagonists/clockcult/clock_effect.dm
index b9de95b030..5fbfa03290 100644
--- a/code/modules/antagonists/clockcult/clock_effect.dm
+++ b/code/modules/antagonists/clockcult/clock_effect.dm
@@ -21,5 +21,5 @@
/obj/effect/clockwork/examine(mob/user)
if((is_servant_of_ratvar(user) || isobserver(user)) && clockwork_desc)
desc = clockwork_desc
- ..()
+ . = ..()
desc = initial(desc)
\ No newline at end of file
diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm b/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm
index 34a986aa97..c18e46790e 100644
--- a/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm
@@ -6,6 +6,7 @@
/obj/effect/clockwork/overlay/examine(mob/user)
if(linked)
linked.examine(user)
+ return ..()
/obj/effect/clockwork/overlay/ex_act()
return FALSE
diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
index 8000be87e6..a27f911163 100644
--- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
@@ -77,13 +77,16 @@
for(var/mob/living/M in viewers(5, src))
if(!is_servant_of_ratvar(M) && M != L)
M.flash_act()
- if(iscultist(L))
+ if(iscultist(L)) //No longer stuns cultists, instead sets them on fire and burns them
to_chat(L, "\"Watch your step, wretch.\"")
- L.adjustBruteLoss(10)
- L.Knockdown(80, FALSE)
+ L.adjustFireLoss(10)
+ L.Knockdown(20, FALSE)
+ L.adjust_fire_stacks(5) //Burn!
+ L.IgniteMob()
+ else
+ L.Stun(40)
L.visible_message("[src] appears around [L] in a burst of light!", \
- "[target_flashed ? "An unseen force":"The glowing sigil around you"] holds you in place!")
- L.Stun(40)
+ "[target_flashed ? "An unseen force":"The glowing sigil around you"] [iscultist(L) ? "painfully bursts into flames!" : "holds you in place!"]")
L.apply_status_effect(STATUS_EFFECT_BELLIGERENT)
new /obj/effect/temp_visual/ratvar/sigil/transgression(get_turf(src))
qdel(src)
@@ -147,6 +150,11 @@
if(iscarbon(L))
var/mob/living/carbon/M = L
M.uncuff()
+ var/brutedamage = L.getBruteLoss()
+ var/burndamage = L.getFireLoss()
+ if(brutedamage || burndamage)
+ L.adjustBruteLoss(-(brutedamage * 0.25))
+ L.adjustFireLoss(-(burndamage * 0.25))
L.Knockdown(50) //Completely defenseless for five seconds - mainly to give them time to read over the information they've just been presented with
if(iscarbon(L))
var/mob/living/carbon/C = L
@@ -191,15 +199,15 @@
..()
/obj/effect/clockwork/sigil/transmission/examine(mob/user)
- ..()
+ . = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
var/structure_number = 0
for(var/obj/structure/destructible/clockwork/powered/P in range(SIGIL_ACCESS_RANGE, src))
structure_number++
- to_chat(user, "It is storing [DisplayPower(get_clockwork_power())] of shared power, \
- and [structure_number] clockwork structure[structure_number == 1 ? " is":"s are"] in range.")
+ . += "It is storing [DisplayPower(get_clockwork_power())] of shared power, \
+ and [structure_number] clockwork structure[structure_number == 1 ? " is":"s are"] in range."
if(iscyborg(user))
- to_chat(user, "You can recharge from the [sigil_name] by crossing it.")
+ . += "You can recharge from the [sigil_name] by crossing it."
/obj/effect/clockwork/sigil/transmission/sigil_effects(mob/living/L)
if(is_servant_of_ratvar(L))
@@ -262,7 +270,7 @@
clockwork_desc = "A sigil that will drain non-Servants that remain on it. Servants that remain on it will be healed if it has any vitality drained."
icon_state = "sigilvitality"
layer = SIGIL_LAYER
- alpha = 75
+ alpha = 125
color = "#123456"
affects_servants = TRUE
stat_affected = DEAD
@@ -274,13 +282,13 @@
var/static/list/damage_heal_order = list(CLONE, TOX, BURN, BRUTE, OXY) //we heal damage in this order
/obj/effect/clockwork/sigil/vitality/examine(mob/user)
- ..()
+ . = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
- to_chat(user, "It has access to [GLOB.ratvar_awakens ? "INFINITE":GLOB.clockwork_vitality] units of vitality.")
+ . += "It has access to [GLOB.ratvar_awakens ? "INFINITE":GLOB.clockwork_vitality] units of vitality."
if(GLOB.ratvar_awakens)
- to_chat(user, "It can revive Servants at no cost!")
+ . += "It can revive Servants at no cost!"
else
- to_chat(user, "It can revive Servants at a cost of [revive_cost] vitality.")
+ . += "It can revive Servants at a cost of [revive_cost] vitality."
/obj/effect/clockwork/sigil/vitality/sigil_effects(mob/living/L)
if((is_servant_of_ratvar(L) && L.suiciding) || sigil_active)
diff --git a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm
index 5cf7ab7923..36aaa27716 100644
--- a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm
@@ -53,9 +53,9 @@
return TRUE
/obj/effect/clockwork/spatial_gateway/examine(mob/user)
- ..()
+ . = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
- to_chat(user, "It has [uses] use\s remaining.")
+ . += "It has [uses] use\s remaining."
//ATTACK GHOST IGNORING PARENT RETURN VALUE
/obj/effect/clockwork/spatial_gateway/attack_ghost(mob/user)
diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
index 23caa788d4..1f616b7dbc 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
@@ -193,15 +193,26 @@
L.visible_message("[L]'s eyes flare with dim light!")
playsound(L, 'sound/weapons/sear.ogg', 50, TRUE)
else
- L.visible_message("[L]'s eyes blaze with brilliant light!", \
- "Your vision suddenly screams with white-hot light!")
- L.Knockdown(15, TRUE, FALSE, 15)
- L.apply_status_effect(STATUS_EFFECT_KINDLE)
- L.flash_act(1, 1)
- if(issilicon(target))
- var/mob/living/silicon/S = L
- S.emp_act(EMP_HEAVY)
- if(iscultist(L))
+ if(!iscultist(L))
+ L.visible_message("[L]'s eyes blaze with brilliant light!", \
+ "Your vision suddenly screams with white-hot light!")
+ L.Knockdown(15, TRUE, FALSE, 15)
+ L.apply_status_effect(STATUS_EFFECT_KINDLE)
+ L.flash_act(1, 1)
+ if(issilicon(target))
+ var/mob/living/silicon/S = L
+ S.emp_act(EMP_HEAVY)
+ else //for Nar'sian weaklings
+ to_chat(L, "\"How does it feel to see the light, dog?\"")
+ L.visible_message("[L]'s eyes flare with burning light!", \
+ "Your vision suddenly screams with a flash of burning hot light!") //Debuffs Narsian cultists hard + deals some burn instead of just hardstunning them; Only the confusion part can stack
+ L.flash_act(1,1)
+ if(iscarbon(target))
+ var/mob/living/carbon/C = L
+ C.stuttering = max(8, C.stuttering)
+ C.drowsyness = max(8, C.drowsyness)
+ C.confused += CLAMP(16 - C.confused, 0, 8)
+ C.apply_status_effect(STATUS_EFFECT_BELLIGERENT)
L.adjustFireLoss(15)
..()
diff --git a/code/modules/antagonists/clockcult/clock_item.dm b/code/modules/antagonists/clockcult/clock_item.dm
index f403b6f9f1..7c8e877fb3 100644
--- a/code/modules/antagonists/clockcult/clock_item.dm
+++ b/code/modules/antagonists/clockcult/clock_item.dm
@@ -20,5 +20,5 @@
/obj/item/clockwork/examine(mob/user)
if((is_servant_of_ratvar(user) || isobserver(user)) && clockwork_desc)
desc = clockwork_desc
- ..()
+ . = ..()
desc = initial(desc)
diff --git a/code/modules/antagonists/clockcult/clock_items/clock_components.dm b/code/modules/antagonists/clockcult/clock_items/clock_components.dm
index 561d49e9ac..a9307f15e1 100644
--- a/code/modules/antagonists/clockcult/clock_items/clock_components.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clock_components.dm
@@ -12,7 +12,7 @@
/obj/item/clockwork/component/examine(mob/user)
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
- to_chat(user, "You can activate this in your hand to break it down for power.")
+ . += "You can activate this in your hand to break it down for power."
/obj/item/clockwork/component/attack_self(mob/living/user)
if(is_servant_of_ratvar(user))
@@ -181,9 +181,9 @@
pixel_y = rand(-sprite_shift, sprite_shift)
/obj/item/clockwork/alloy_shards/examine(mob/user)
- ..()
+ . = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
- to_chat(user, "Can be consumed by a replica fabricator as a source of power.")
+ . += "Can be consumed by a replica fabricator as a source of power."
/obj/item/clockwork/alloy_shards/proc/replace_name_desc()
name = "replicant alloy shard"
diff --git a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm
index 07b4366194..7534f7c043 100644
--- a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm
@@ -27,11 +27,11 @@
armour_penetration = initial(armour_penetration)
/obj/item/clockwork/weapon/ratvarian_spear/examine(mob/user)
- ..()
+ . = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
- to_chat(user, "Attacks on living non-Servants will generate [bonus_burn] units of vitality.")
+ . += "Attacks on living non-Servants will generate [bonus_burn] units of vitality."
if(!iscyborg(user))
- to_chat(user, "Throwing the spear will do massive damage, break the spear, and knock down the target.")
+ . += "Throwing the spear will do massive damage, break the spear, and knock down the target."
/obj/item/clockwork/weapon/ratvarian_spear/attack(mob/living/target, mob/living/carbon/human/user)
. = ..()
@@ -56,8 +56,14 @@
L.visible_message("[src] bounces off of [L], as if repelled by an unseen force!")
else if(!..())
if(!L.anti_magic_check())
- if(issilicon(L) || iscultist(L))
+ if(issilicon(L))
L.Knockdown(100)
+ else if(iscultist(L))
+ L.confused += CLAMP(10 - L.confused, 0, 5) // Spearthrow now confuses enemy cultists + just deals extra damage / sets on fire instead of hardstunning + damage
+ to_chat(L, "[src] crashes into you with burning force, sending you reeling!")
+ L.adjust_fire_stacks(2)
+ L.Knockdown(1)
+ L.IgniteMob()
else
L.Knockdown(40)
GLOB.clockwork_vitality += L.adjustFireLoss(bonus_burn * 3) //normally a total of 40 damage, 70 with ratvar
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
index ec712f2eec..d4d5349c70 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
@@ -64,7 +64,7 @@
/obj/item/clockwork/slab/cyborg/janitor //six scriptures, plus a fabricator
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transgression, \
- /datum/clockwork_scripture/create_object/stargazer, /datum/clockwork_scripture/create_object/ocular_warden, /datum/clockwork_scripture/create_object/mania_motor)
+ /datum/clockwork_scripture/create_object/stargazer, /datum/clockwork_scripture/create_object/ocular_warden, /datum/clockwork_scripture/create_object/mania_motor)
/obj/item/clockwork/slab/cyborg/service //six scriptures, plus xray vision
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant,/datum/clockwork_scripture/create_object/stargazer, \
@@ -121,15 +121,15 @@
adjust_clockwork_power(0.1) //Slabs serve as very weak power generators on their own (no, not enough to justify spamming them)
/obj/item/clockwork/slab/examine(mob/user)
- ..()
+ . = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
if(LAZYLEN(quickbound))
for(var/i in 1 to quickbound.len)
if(!quickbound[i])
continue
var/datum/clockwork_scripture/quickbind_slot = quickbound[i]
- to_chat(user, "Quickbind button: [initial(quickbind_slot.name)].")
- to_chat(user, "Available power: [DisplayPower(get_clockwork_power())].")
+ . += "Quickbind button: [initial(quickbind_slot.name)]."
+ . += "Available power: [DisplayPower(get_clockwork_power())]."
//Slab actions; Hierophant, Quickbind
/obj/item/clockwork/slab/ui_action_click(mob/user, action)
@@ -162,9 +162,11 @@
access_display(user)
/obj/item/clockwork/slab/AltClick(mob/living/user)
+ . = ..()
if(is_servant_of_ratvar(user) && linking && user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
linking = null
to_chat(user, "Object link canceled.")
+ return TRUE
/obj/item/clockwork/slab/proc/access_display(mob/living/user)
if(!is_servant_of_ratvar(user))
diff --git a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm
index 2be0fdde11..43c05b8556 100644
--- a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm
+++ b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm
@@ -15,7 +15,7 @@
. = ..()
var/area/A = get_area(src)
if(A && construct_type)
- notify_ghosts("A [construct_name] chassis has been created in [A.name]!", 'sound/magic/clockwork/fellowship_armory.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_CONSTRUCT)
+ notify_ghosts("A [construct_name] chassis has been created in [A.name]!", 'sound/magic/clockwork/fellowship_armory.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_CONSTRUCT, ignore_dnr_observers = TRUE)
GLOB.poi_list += src
LAZYADD(GLOB.mob_spawners[name], src)
@@ -28,7 +28,7 @@
/obj/item/clockwork/construct_chassis/examine(mob/user)
clockwork_desc = "[clockwork_desc]
[construct_desc]"
- ..()
+ . = ..()
clockwork_desc = initial(clockwork_desc)
//ATTACK HAND IGNORING PARENT RETURN VALUE
@@ -39,7 +39,9 @@
. = ..()
//ATTACK GHOST IGNORING PARENT RETURN VALUE
-/obj/item/clockwork/construct_chassis/attack_ghost(mob/user)
+/obj/item/clockwork/construct_chassis/attack_ghost(mob/dead/observer/user)
+ if(!user.can_reenter_round())
+ return FALSE
if(!SSticker.mode)
to_chat(user, "You cannot use that before the game has started.")
return
diff --git a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm
index 741b251a4f..0365ae63af 100644
--- a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm
+++ b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm
@@ -44,16 +44,16 @@
speed_multiplier = initial(speed_multiplier)
/obj/item/clockwork/replica_fabricator/examine(mob/living/user)
- ..()
+ . = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
- to_chat(user, "Can be used to replace walls, floors, tables, windows, windoors, and airlocks with Clockwork variants.")
- to_chat(user, "Can construct Clockwork Walls on Clockwork Floors and deconstruct Clockwork Walls to Clockwork Floors.")
+ . += "Can be used to replace walls, floors, tables, windows, windoors, and airlocks with Clockwork variants."
+ . += "Can construct Clockwork Walls on Clockwork Floors and deconstruct Clockwork Walls to Clockwork Floors."
if(uses_power)
- to_chat(user, "It can consume floor tiles, rods, metal, and plasteel for power at rates of 2:[DisplayPower(POWER_ROD)], 1:[DisplayPower(POWER_ROD)], 1:[DisplayPower(POWER_METAL)], \
- and 1:[DisplayPower(POWER_PLASTEEL)], respectively.")
- to_chat(user, "It can also consume brass sheets for power at a rate of 1:[DisplayPower(POWER_FLOOR)].")
- to_chat(user, "Use it in-hand to produce 5 brass sheets at a cost of [DisplayPower(POWER_WALL_TOTAL)] power.")
- to_chat(user, "It has access to [DisplayPower(get_clockwork_power())] of power.")
+ . += "It can consume floor tiles, rods, metal, and plasteel for power at rates of 2:[DisplayPower(POWER_ROD)], 1:[DisplayPower(POWER_ROD)], 1:[DisplayPower(POWER_METAL)], \
+ and 1:[DisplayPower(POWER_PLASTEEL)], respectively."
+ . += "It can also consume brass sheets for power at a rate of 1:[DisplayPower(POWER_FLOOR)]."
+ . += "Use it in-hand to produce 5 brass sheets at a cost of [DisplayPower(POWER_WALL_TOTAL)] power."
+ . += "It has access to [DisplayPower(get_clockwork_power())] of power."
/obj/item/clockwork/replica_fabricator/attack_self(mob/living/user)
if(is_servant_of_ratvar(user))
diff --git a/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm b/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm
index d47bf4f316..d84338faea 100644
--- a/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm
+++ b/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm
@@ -39,7 +39,7 @@
/obj/item/mmi/posibrain/soul_vessel/examine(mob/user)
if((is_servant_of_ratvar(user) || isobserver(user)) && clockwork_desc)
desc = clockwork_desc
- ..()
+ . = ..()
desc = initial(desc)
/obj/item/mmi/posibrain/soul_vessel/transfer_personality(mob/candidate)
diff --git a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
index 9d241148b4..2a916c7a2f 100644
--- a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
+++ b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
@@ -48,10 +48,11 @@
/obj/item/clothing/glasses/wraith_spectacles/proc/blind_cultist(mob/living/victim)
if(iscultist(victim))
+ var/obj/item/organ/eyes/eyes = victim.getorganslot(ORGAN_SLOT_EYES)
to_chat(victim, "\"It looks like Nar'Sie's dogs really don't value their eyes.\"")
to_chat(victim, "Your eyes explode with horrific pain!")
victim.emote("scream")
- victim.become_blind(EYE_DAMAGE)
+ eyes?.applyOrganDamage(eyes.maxHealth)
victim.adjust_blurriness(30)
victim.adjust_blindness(30)
return TRUE
@@ -141,21 +142,23 @@
if(glasses_right && !WS.up && !GLOB.ratvar_awakens && !GLOB.ratvar_approaches)
apply_eye_damage(H)
else
+ var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES)
if(GLOB.ratvar_awakens)
H.cure_nearsighted(list(EYE_DAMAGE))
H.cure_blind(list(EYE_DAMAGE))
- H.adjust_eye_damage(-eye_damage_done)
+ eyes?.applyOrganDamage(-eye_damage_done)
eye_damage_done = 0
else if(prob(50) && eye_damage_done)
- H.adjust_eye_damage(-1)
+ eyes?.applyOrganDamage(-1)
eye_damage_done = max(0, eye_damage_done - 1)
if(!eye_damage_done)
qdel(src)
/datum/status_effect/wraith_spectacles/proc/apply_eye_damage(mob/living/carbon/human/H)
- if(HAS_TRAIT(H, TRAIT_BLIND))
+ var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES)
+ if(HAS_TRAIT(H, TRAIT_BLIND) || !eyes)
return
- H.adjust_eye_damage(0.5)
+ eyes.applyOrganDamage(0.5)
eye_damage_done += 0.5
if(eye_damage_done >= 20)
H.adjust_blurriness(2)
@@ -166,7 +169,7 @@
if(eye_damage_done >= blind_breakpoint)
if(!HAS_TRAIT(H, TRAIT_BLIND))
to_chat(H, "A piercing white light floods your vision. Suddenly, all goes dark!")
- H.become_blind(EYE_DAMAGE)
+ eyes.applyOrganDamage(eyes.maxHealth)
if(prob(min(20, 5 + eye_damage_done)))
to_chat(H, "Your eyes continue to burn.")
diff --git a/code/modules/antagonists/clockcult/clock_mobs.dm b/code/modules/antagonists/clockcult/clock_mobs.dm
index 6268d15d44..9bdf03cbc7 100644
--- a/code/modules/antagonists/clockcult/clock_mobs.dm
+++ b/code/modules/antagonists/clockcult/clock_mobs.dm
@@ -57,7 +57,7 @@
msg += "[addendum]\n"
msg += "*---------*"
- to_chat(user, msg)
+ return list(msg)
/mob/living/simple_animal/hostile/clockwork/proc/examine_info() //Override this on a by-mob basis to have unique examine info
return
diff --git a/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm b/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm
index 47faea6dc8..86099d8c79 100644
--- a/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm
+++ b/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm
@@ -98,7 +98,7 @@
else
to_chat(M, message)
-/mob/camera/eminence/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode)
+/mob/camera/eminence/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
. = ..()
if(is_reebe(z) || is_servant_of_ratvar(speaker) || GLOB.ratvar_approaches || GLOB.ratvar_awakens) //Away from Reebe, the Eminence can't hear anything
to_chat(src, message)
diff --git a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm
index 42ca9e07e2..311f552467 100644
--- a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm
+++ b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm
@@ -1,5 +1,7 @@
#define MARAUDER_SLOWDOWN_PERCENTAGE 0.40 //Below this percentage of health, marauders will become slower
#define MARAUDER_SHIELD_REGEN_TIME 200 //In deciseconds, how long it takes for shields to regenerate after breaking
+#define MARAUDER_SPACE_FULL_DAMAGE 6 //amount of damage per life tick while inside space
+#define MARAUDER_SPACE_NEAR_DAMAGE 4 //amount of damage taking per Life() tick from being next to space.
//Clockwork marauder: A well-rounded frontline construct. Only one can exist for every two human servants.
/mob/living/simple_animal/hostile/clockwork/marauder
@@ -20,12 +22,14 @@
movement_type = FLYING
a_intent = INTENT_HARM
loot = list(/obj/item/clockwork/component/geis_capacitor/fallen_armor)
- light_range = 2
- light_power = 1.1
+ light_range = 3
+ light_power = 1.7
playstyle_string = "You are a clockwork marauder, a well-rounded frontline construct of Ratvar. Although you have no \
unique abilities, you're a fearsome fighter in one-on-one combat, and your shield protects from projectiles!
Obey the Servants and do as they \
- tell you. Your primary goal is to defend the Ark from destruction; they are your allies in this, and should be protected from harm."
+ tell you. Your primary goal is to defend the Ark from destruction; they are your allies in this, and should be protected from harm. \
+ Be warned, however, that you will rapidly decay near the void of space."
empower_string = "The Anima Bulwark's power flows through you! Your weapon will strike harder, your armor is sturdier, and your shield is more durable."
+ var/default_speed = 0
var/max_shield_health = 3
var/shield_health = 3 //Amount of projectiles that can be deflected within
var/shield_health_regen = 0 //When world.time equals this, shield health will regenerate
@@ -36,10 +40,21 @@
/mob/living/simple_animal/hostile/clockwork/marauder/Life()
..()
+ var/turf/T = get_turf(src)
+ var/turf/open/space/S = isspaceturf(T)? T : null
+ var/less_space_damage
+ if(!istype(S))
+ var/turf/open/space/nearS = locate() in oview(1)
+ if(nearS)
+ S = nearS
+ less_space_damage = TRUE
+ if(S)
+ to_chat(src, "The void of space drains Ratvar's Light from you! You feel yourself rapidly decaying. It would be wise to get back inside!")
+ adjustBruteLoss(less_space_damage? MARAUDER_SPACE_NEAR_DAMAGE : MARAUDER_SPACE_FULL_DAMAGE)
if(!GLOB.ratvar_awakens && health / maxHealth <= MARAUDER_SLOWDOWN_PERCENTAGE)
- speed = initial(speed) + 1 //Yes, this slows them down
+ speed = default_speed + 1 //Yes, this slows them down
else
- speed = initial(speed)
+ speed = default_speed
if(shield_health < max_shield_health && world.time >= shield_health_regen)
shield_health_regen = world.time + MARAUDER_SHIELD_REGEN_TIME
to_chat(src, "Your shield has recovered, [shield_health] blocks remaining!")
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm
index 3d467350ff..0fd6c8a8dc 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm
@@ -87,9 +87,22 @@
object_path = /obj/item/clockwork/construct_chassis/clockwork_marauder
construct_type = /mob/living/simple_animal/hostile/clockwork/marauder
combat_construct = TRUE
- var/static/recent_marauders = 0
- var/static/time_since_last_marauder = 0
- var/static/scaled_recital_time = 0
+ var/static/last_marauder = 0
+
+/datum/clockwork_scripture/create_object/construct/clockwork_marauder/post_recital()
+ last_marauder = world.time
+ return ..()
+
+/datum/clockwork_scripture/create_object/construct/clockwork_marauder/pre_recital()
+ if(!is_reebe(invoker.z))
+ if(!CONFIG_GET(flag/allow_clockwork_marauder_on_station))
+ to_chat(invoker, "This particular station is too far from the influence of the Hierophant Network. You can not summon a marauder here.")
+ return FALSE
+ if(world.time < (last_marauder + CONFIG_GET(number/marauder_delay_non_reebe)))
+ to_chat(invoker, "The hierophant network is still strained from the last summoning of a marauder on a plane without the strong energy connection of Reebe to support it. \
+ You must wait another [DisplayTimeText((last_marauder + CONFIG_GET(number/marauder_delay_non_reebe)) - world.time, TRUE)]!")
+ return FALSE
+ return ..()
/datum/clockwork_scripture/create_object/construct/clockwork_marauder/update_construct_limit()
var/human_servants = 0
@@ -98,27 +111,7 @@
var/mob/living/L = M.current
if(ishuman(L) && L.stat != DEAD)
human_servants++
- construct_limit = round(CLAMP((human_servants / 4), 1, 3)) - recent_marauders //1 per 4 human servants, maximum of 3, reduced by recent marauder creation
- if(recent_marauders)
- to_chat(invoker, "The Hierophant Network is depleted by a summoning in the last [DisplayTimeText(MARAUDER_SCRIPTURE_SCALING_THRESHOLD, TRUE)] - limiting the number of available marauders by [recent_marauders]!")
-
-/datum/clockwork_scripture/create_object/construct/clockwork_marauder/pre_recital()
- channel_time = initial(channel_time)
- if(recent_marauders)
- scaled_recital_time = min(recent_marauders * MARAUDER_SCRIPTURE_SCALING_TIME, MARAUDER_SCRIPTURE_SCALING_MAX)
- to_chat(invoker, "The Hierophant Network is under strain from repeated summoning, making this scripture [DisplayTimeText(scaled_recital_time)] slower!")
- channel_time += scaled_recital_time
- return TRUE
-
-/datum/clockwork_scripture/create_object/construct/clockwork_marauder/scripture_effects()
- . = ..()
- recent_marauders++
- addtimer(CALLBACK(GLOBAL_PROC, .proc/marauder_reset),MARAUDER_SCRIPTURE_SCALING_THRESHOLD)
-
-/proc/marauder_reset()
- var/datum/clockwork_scripture/create_object/construct/clockwork_marauder/CM = new()
- CM.recent_marauders--
- qdel(CM)
+ construct_limit = round(CLAMP((human_servants / 4), 1, 3)) //1 per 4 human servants, maximum of 3
//Summon Neovgre: Summon a very powerful combat mech that explodes when destroyed for massive damage.
/datum/clockwork_scripture/create_object/summon_arbiter
@@ -146,6 +139,6 @@
/datum/clockwork_scripture/create_object/summon_arbiter/check_special_requirements()
if(GLOB.neovgre_exists)
- to_chat(invoker, "\"You've already got one...\"")
+ to_chat(invoker, "\"Only one of my weapons may exist in this temporal stream!\"")
return FALSE
return ..()
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
index 82c1291433..4ab481cfe2 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
@@ -80,7 +80,7 @@
power_cost = 125
whispered = TRUE
object_path = /obj/effect/clockwork/sigil/submission
- creator_message = "A luminous sigil appears below you. Any non-Servants to cross it will be converted after 8 seconds if they do not move."
+ creator_message = "A luminous sigil appears below you. Any non-Servants to cross it will be converted and healed of some of their wounds after 8 seconds if they do not move."
usage_tip = "This is the primary conversion method, though it will not penetrate mindshield implants."
tier = SCRIPTURE_DRIVER
one_per_tile = TRUE
diff --git a/code/modules/antagonists/clockcult/clock_structure.dm b/code/modules/antagonists/clockcult/clock_structure.dm
index 300e85e380..13da9c5a42 100644
--- a/code/modules/antagonists/clockcult/clock_structure.dm
+++ b/code/modules/antagonists/clockcult/clock_structure.dm
@@ -43,10 +43,10 @@
var/can_see_clockwork = is_servant_of_ratvar(user) || isobserver(user)
if(can_see_clockwork && clockwork_desc)
desc = clockwork_desc
- ..()
+ . = ..()
desc = initial(desc)
if(unanchored_icon)
- to_chat(user, "[src] is [anchored ? "":"not "]secured to the floor.")
+ . += "[src] is [anchored ? "":"not "]secured to the floor."
/obj/structure/destructible/clockwork/examine_status(mob/user)
if(is_servant_of_ratvar(user) || isobserver(user))
@@ -155,12 +155,12 @@
var/inactive_icon = null //icon_state while process() isn't being called
/obj/structure/destructible/clockwork/powered/examine(mob/user)
- ..()
+ . = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
if(!can_access_clockwork_power(src))
- to_chat(user, "It has no access to the power network! Create a sigil of transmission nearby.")
+ . += "It has no access to the power network! Create a sigil of transmission nearby."
else
- to_chat(user, "It has access to [DisplayPower(get_clockwork_power())] of power.")
+ . += "It has access to [DisplayPower(get_clockwork_power())] of power."
/obj/structure/destructible/clockwork/powered/Destroy()
SSfastprocess.processing -= src
diff --git a/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm b/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm
index 00a3406da1..47a37583ba 100644
--- a/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm
@@ -16,16 +16,16 @@
return ..()
/obj/structure/destructible/clockwork/trap/examine(mob/user)
- ..()
+ . = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
- to_chat(user, "It's wired to:")
+ . += "It's wired to:"
if(!wired_to.len)
- to_chat(user, "Nothing.")
+ . += "Nothing."
else
for(var/V in wired_to)
var/obj/O = V
var/distance = get_dist(src, O)
- to_chat(user, "[O] ([distance == 0 ? "same tile" : "[distance] tiles [dir2text(get_dir(src, O))]"])")
+ . += "[O] ([distance == 0 ? "same tile" : "[distance] tiles [dir2text(get_dir(src, O))]"])"
/obj/structure/destructible/clockwork/trap/wrench_act(mob/living/user, obj/item/I)
if(!is_servant_of_ratvar(user))
@@ -71,6 +71,7 @@
return TRUE
/obj/structure/destructible/clockwork/trap/proc/activate()
+ return
//These objects send signals to normal traps to activate
/obj/structure/destructible/clockwork/trap/trigger
@@ -79,6 +80,14 @@
break_message = "The trigger breaks apart!"
density = FALSE
+/obj/structure/destructible/clockwork/trap/trigger/Initialize()
+ . = ..()
+ for(var/obj/structure/destructible/clockwork/trap/T in get_turf(src))
+ if(!istype(T, /obj/structure/destructible/clockwork/trap/trigger))
+ wired_to += T
+ T.wired_to += src
+ to_chat(usr, "[src] automatically links with [T] beneath it.")
+
/obj/structure/destructible/clockwork/trap/trigger/activate()
for(var/obj/structure/destructible/clockwork/trap/T in wired_to)
if(istype(T, /obj/structure/destructible/clockwork/trap/trigger)) //Triggers don't go off multiple times
diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
index f735d6bb29..297856f531 100644
--- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
@@ -223,34 +223,34 @@
/obj/structure/destructible/clockwork/massive/celestial_gateway/examine(mob/user)
icon_state = "spatial_gateway" //cheat wildly by pretending to have an icon
- ..()
+ . = ..()
icon_state = initial(icon_state)
if(is_servant_of_ratvar(user) || isobserver(user))
if(!active)
- to_chat(user, "Time until the Ark's activation: [DisplayTimeText(get_arrival_time())]")
+ . += "Time until the Ark's activation: [DisplayTimeText(get_arrival_time())]"
else
if(grace_period)
- to_chat(user, "Crew grace period time remaining: [DisplayTimeText(get_arrival_time())]")
+ . += "Crew grace period time remaining: [DisplayTimeText(get_arrival_time())]"
else
- to_chat(user, "Time until Ratvar's arrival: [DisplayTimeText(get_arrival_time())]")
+ . += "Time until Ratvar's arrival: [DisplayTimeText(get_arrival_time())]"
switch(progress_in_seconds)
if(-INFINITY to GATEWAY_REEBE_FOUND)
- to_chat(user, "The Ark is feeding power into the bluespace field.")
+ . += "The Ark is feeding power into the bluespace field."
if(GATEWAY_REEBE_FOUND to GATEWAY_RATVAR_COMING)
- to_chat(user, "The field is ripping open a copy of itself in Ratvar's prison.")
+ . += "The field is ripping open a copy of itself in Ratvar's prison."
if(GATEWAY_RATVAR_COMING to INFINITY)
- to_chat(user, "With the bluespace field established, Ratvar is preparing to come through!")
+ . += "With the bluespace field established, Ratvar is preparing to come through!"
else
if(!active)
- to_chat(user, "Whatever it is, it doesn't seem to be active.")
+ . += "Whatever it is, it doesn't seem to be active."
else
switch(progress_in_seconds)
if(-INFINITY to GATEWAY_REEBE_FOUND)
- to_chat(user, "You see a swirling bluespace anomaly steadily growing in intensity.")
+ . += "You see a swirling bluespace anomaly steadily growing in intensity."
if(GATEWAY_REEBE_FOUND to GATEWAY_RATVAR_COMING)
- to_chat(user, "The anomaly is stable, and you can see flashes of something from it.")
+ . += "The anomaly is stable, and you can see flashes of something from it."
if(GATEWAY_RATVAR_COMING to INFINITY)
- to_chat(user, "The anomaly is stable! Something is coming through!")
+ . += "The anomaly is stable! Something is coming through!"
/obj/structure/destructible/clockwork/massive/celestial_gateway/process()
if(seconds_until_activation == -1) //we never do anything
diff --git a/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm b/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm
index cb13fdd616..058bd9d24e 100644
--- a/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm
@@ -21,9 +21,9 @@
toggle(1)
/obj/structure/destructible/clockwork/powered/clockwork_obelisk/examine(mob/user)
- ..()
+ . = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
- to_chat(user, "It requires [DisplayPower(hierophant_cost)] to broadcast over the Hierophant Network, and [DisplayPower(gateway_cost)] to open a Spatial Gateway.")
+ . += "It requires [DisplayPower(hierophant_cost)] to broadcast over the Hierophant Network, and [DisplayPower(gateway_cost)] to open a Spatial Gateway."
/obj/structure/destructible/clockwork/powered/clockwork_obelisk/can_be_unfasten_wrench(mob/user, silent)
if(active)
diff --git a/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm b/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm
index 3a461b7745..7d8b206f41 100644
--- a/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm
@@ -47,16 +47,16 @@
STOP_PROCESSING(SSprocessing, src)
/obj/structure/destructible/clockwork/heralds_beacon/examine(mob/user)
- ..()
+ . = ..()
if(isobserver(user) || is_servant_of_ratvar(user))
if(!available)
if(!GLOB.ratvar_approaches)
- to_chat(user, "It can no longer be activated.")
+ . += "It can no longer be activated."
else
- to_chat(user, "It has been activated!")
+ . += "It has been activated!"
else
- to_chat(user, "There are [time_remaining] second[time_remaining != 1 ? "s" : ""] remaining to vote.")
- to_chat(user, "There are [voters.len]/[votes_needed] votes to activate the beacon!")
+ . += "There are [time_remaining] second[time_remaining != 1 ? "s" : ""] remaining to vote."
+ . += "There are [voters.len]/[votes_needed] votes to activate the beacon!"
/obj/structure/destructible/clockwork/heralds_beacon/attack_hand(mob/living/user)
. = ..()
diff --git a/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm
index df1231442a..9b4ac8085c 100644
--- a/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm
@@ -17,9 +17,9 @@
var/mania_cost = 150
/obj/structure/destructible/clockwork/powered/mania_motor/examine(mob/user)
- ..()
+ . = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
- to_chat(user, "It requires [DisplayPower(mania_cost)] to run.")
+ . += "It requires [DisplayPower(mania_cost)] to run."
/obj/structure/destructible/clockwork/powered/mania_motor/forced_disable(bad_effects)
if(active)
diff --git a/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm b/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm
index 7afd9e7dbc..d0940ebb7a 100644
--- a/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm
@@ -25,8 +25,8 @@
return ..()
/obj/structure/destructible/clockwork/ocular_warden/examine(mob/user)
- ..()
- to_chat(user, "[target ? "It's fixated on [target]!" : "Its gaze is wandering aimlessly."]")
+ . = ..()
+ . += "[target ? "It's fixated on [target]!" : "Its gaze is wandering aimlessly."]"
/obj/structure/destructible/clockwork/ocular_warden/hulk_damage()
return 25
@@ -110,9 +110,7 @@
if(!(BI.resistance_flags & ON_FIRE))
BI.fire_act()
continue
- if(is_servant_of_ratvar(L) || (HAS_TRAIT(L, TRAIT_BLIND)) || L.anti_magic_check(TRUE, TRUE))
- continue
- if(L.stat || L.lying)
+ if(is_servant_of_ratvar(L) || (HAS_TRAIT(L, TRAIT_BLIND)) || L.anti_magic_check(TRUE, TRUE) || L.incapacitated(TRUE))
continue
if (iscarbon(L))
var/mob/living/carbon/c = L
diff --git a/code/modules/antagonists/clockcult/clock_structures/stargazer.dm b/code/modules/antagonists/clockcult/clock_structures/stargazer.dm
index 57f83c55aa..fbaee79959 100644
--- a/code/modules/antagonists/clockcult/clock_structures/stargazer.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/stargazer.dm
@@ -25,11 +25,11 @@
. = ..()
/obj/structure/destructible/clockwork/stargazer/examine(mob/user)
- ..()
+ . = ..()
if(is_servant_of_ratvar(user))
- to_chat(user, "Generates [DisplayPower(STARGAZER_POWER)] per second while viewing starlight within [STARGAZER_RANGE] tiles.")
+ . += "Generates [DisplayPower(STARGAZER_POWER)] per second while viewing starlight within [STARGAZER_RANGE] tiles."
if(star_light_star_bright)
- to_chat(user, "[is_servant_of_ratvar(user) ? "It can see starlight!" : "It's shining brilliantly!"]")
+ . += "[is_servant_of_ratvar(user) ? "It can see starlight!" : "It's shining brilliantly!"]"
/obj/structure/destructible/clockwork/stargazer/process()
star_light_star_bright = check_starlight()
diff --git a/code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor.dm b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor.dm
index 94f0ba7112..af29bc9b31 100644
--- a/code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor.dm
@@ -7,18 +7,10 @@
icon_state = "pressure_sensor"
alpha = 50
-/obj/structure/destructible/clockwork/trap/trigger/Initialize()
- . = ..()
- for(var/obj/structure/destructible/clockwork/trap/T in get_turf(src))
- if(!istype(T, /obj/structure/destructible/clockwork/trap/trigger))
- wired_to += T
- T.wired_to += src
- to_chat(usr, "[src] automatically links with [T] beneath it.")
-
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/Crossed(atom/movable/AM)
if(isliving(AM) && !is_servant_of_ratvar(AM))
var/mob/living/L = AM
- if(L.stat || L.m_intent == MOVE_INTENT_WALK || L.lying)
+ if(L.stat || L.m_intent == MOVE_INTENT_WALK || L.movement_type & (FLYING|FLOATING))
return
audible_message("*click*")
playsound(src, 'sound/items/screwdriver2.ogg', 50, TRUE)
diff --git a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
index ebfb219c9a..2f0db73bfc 100644
--- a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
@@ -113,7 +113,7 @@
"You start tenderly lifting [skewee] off of [src]...")
if(!do_after(user, 60, target = skewee))
skewee.visible_message("[skewee] painfully slides back down [src].")
- skewee.emote("moan")
+ skewee.say("Oof, ouch owwie!!", forced = "fail brass skewer removal")
return
skewee.visible_message("[skewee] comes free of [src] with a squelching pop!", \
"You come free of [src]!")
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index fc4d945d51..a833aa8a94 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -438,21 +438,27 @@
target.visible_message("[L] starts to glow in a halo of light!", \
"A feeling of warmth washes over you, rays of holy light surround your body and protect you from the flash of light!")
else
- to_chat(user, "In an brilliant flash of red, [L] falls to the ground!")
- L.Knockdown(160)
- L.adjustStaminaLoss(140) //Ensures hard stamcrit
- L.flash_act(1,1)
- if(issilicon(target))
- var/mob/living/silicon/S = L
- S.emp_act(EMP_HEAVY)
- else if(iscarbon(target))
- var/mob/living/carbon/C = L
- C.silent += 6
- C.stuttering += 15
- C.cultslurring += 15
- C.Jitter(15)
- if(is_servant_of_ratvar(L))
+ if(!iscultist(L))
+ L.Knockdown(160)
+ L.adjustStaminaLoss(140) //Ensures hard stamcrit
+ L.flash_act(1,1)
+ if(issilicon(target))
+ var/mob/living/silicon/S = L
+ S.emp_act(EMP_HEAVY)
+ else if(iscarbon(target))
+ var/mob/living/carbon/C = L
+ C.silent += CLAMP(12 - C.silent, 0, 6)
+ C.stuttering += CLAMP(30 - C.stuttering, 0, 15)
+ C.cultslurring += CLAMP(30 - C.cultslurring, 0, 15)
+ C.Jitter(15)
+ else // cultstun no longer hardstuns + damages hostile cultists, instead debuffs them hard + deals some damage; debuffs for a bit longer since they don't add the clockie belligerent debuff
+ if(iscarbon(target))
+ var/mob/living/carbon/C = L
+ C.stuttering = max(10, C.stuttering)
+ C.drowsyness = max(10, C.drowsyness)
+ C.confused += CLAMP(20 - C.confused, 0, 10)
L.adjustBruteLoss(15)
+ to_chat(user, "In an brilliant flash of red, [L] [iscultist(L) ? "writhes in pain" : "falls to the ground!"]")
uses--
..()
@@ -651,7 +657,7 @@
/obj/item/melee/blood_magic/manipulator/examine(mob/user)
. = ..()
if(iscultist(user))
- to_chat(user, "The [name] currently has [uses] blood charges left.")
+ . += "The [name] currently has [uses] blood charges left."
/obj/item/melee/blood_magic/manipulator/afterattack(atom/target, mob/living/carbon/human/user, proximity)
if(proximity)
diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm
index 47cf2abf3f..df2383f892 100644
--- a/code/modules/antagonists/cult/cult.dm
+++ b/code/modules/antagonists/cult/cult.dm
@@ -35,7 +35,6 @@
/datum/antagonist/cult/proc/add_objectives()
objectives |= cult_team.objectives
- owner.objectives |= objectives
/datum/antagonist/cult/Destroy()
QDEL_NULL(communion)
@@ -129,7 +128,8 @@
current.clear_alert("bloodsense")
if(ishuman(current))
var/mob/living/carbon/human/H = current
- H.eye_color = initial(H.eye_color)
+ var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES)
+ H.eye_color = eyes?.eye_color || initial(H.eye_color)
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
REMOVE_TRAIT(H, TRAIT_CULT_EYES, "valid_cultist")
H.update_body()
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index 06ea2cbe0a..b4ddb9dbff 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -119,10 +119,11 @@
AddComponent(/datum/component/butchering, 50, 80)
/obj/item/twohanded/required/cult_bastard/examine(mob/user)
+ . = ..()
if(contents.len)
- desc+="
There are [contents.len] souls trapped within the sword's core."
+ . += "
There are [contents.len] souls trapped within the sword's core."
else
- desc+="
The sword appears to be quite lifeless."
+ . += "
The sword appears to be quite lifeless."
/obj/item/twohanded/required/cult_bastard/can_be_pulled(user)
return FALSE
@@ -493,7 +494,7 @@
desc = "You peer within this smokey orb and glimpse terrible fates befalling the escape shuttle."
icon = 'icons/obj/cult.dmi'
icon_state ="shuttlecurse"
- var/global/curselimit = 0
+ var/static/curselimit = 0
/obj/item/shuttle_curse/attack_self(mob/living/user)
if(!iscultist(user))
@@ -530,7 +531,7 @@
playsound(user.loc, 'sound/effects/glassbr1.ogg', 50, 1)
qdel(src)
sleep(20)
- var/global/list/curses
+ var/static/list/curses
if(!curses)
curses = list("A fuel technician just slit his own throat and begged for death.",
"The shuttle's navigation programming was replaced by a file containing just two words: IT COMES.",
@@ -557,11 +558,11 @@
var/uses = 4
/obj/item/cult_shift/examine(mob/user)
- ..()
+ . = ..()
if(uses)
- to_chat(user, "It has [uses] use\s remaining.")
+ . += "It has [uses] use\s remaining."
else
- to_chat(user, "It seems drained.")
+ . += "It seems drained."
/obj/item/cult_shift/proc/handle_teleport_grab(turf/T, mob/user)
var/mob/living/carbon/C = user
@@ -702,7 +703,10 @@
else if(!..())
if(!L.anti_magic_check())
if(is_servant_of_ratvar(L))
- L.Knockdown(100)
+ to_chat(L, "\"Kneel for me, scum\"")
+ L.confused += CLAMP(10 - L.confused, 0, 5) //confuses and lightly knockdowns + damages hostile cultists instead of hardstunning like before
+ L.Knockdown(15)
+ L.adjustBruteLoss(10)
else
L.Knockdown(50)
break_spear(T)
diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm
index 0dd6b08c4d..f38f379abe 100644
--- a/code/modules/antagonists/cult/cult_structures.dm
+++ b/code/modules/antagonists/cult/cult_structures.dm
@@ -29,10 +29,10 @@
/obj/structure/destructible/cult/examine(mob/user)
- ..()
- to_chat(user, "\The [src] is [anchored ? "":"not "]secured to the floor.")
+ . = ..()
+ . += "\The [src] is [anchored ? "":"not "]secured to the floor."
if((iscultist(user) || isobserver(user)) && cooldowntime > world.time)
- to_chat(user, "The magic in [src] is too weak, [p_they()] will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].")
+ . += "The magic in [src] is too weak, [p_they()] will be ready to use again in [DisplayTimeText(cooldowntime - world.time)]."
/obj/structure/destructible/cult/examine_status(mob/user)
if(iscultist(user) || isobserver(user))
diff --git a/code/modules/antagonists/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm
index b9e4da8677..ff12a835ef 100644
--- a/code/modules/antagonists/cult/ritual.dm
+++ b/code/modules/antagonists/cult/ritual.dm
@@ -15,12 +15,12 @@ This file contains the cult dagger and rune list code
GLOB.rune_types[initial(R.cultist_name)] = R //Uses the cultist name for displaying purposes
/obj/item/melee/cultblade/dagger/examine(mob/user)
- ..()
+ . = ..()
if(iscultist(user) || isobserver(user))
- to_chat(user, "The scriptures of the Geometer. Allows the scribing of runes and access to the knowledge archives of the cult of Nar'Sie.")
- to_chat(user, "Striking a cult structure will unanchor or reanchor it.")
- to_chat(user, "Striking another cultist with it will purge holy water from them.")
- to_chat(user, "Striking a noncultist, however, will tear their flesh.")
+ . += "The scriptures of the Geometer. Allows the scribing of runes and access to the knowledge archives of the cult of Nar'Sie."
+ . += "Striking a cult structure will unanchor or reanchor it."
+ . += "Striking another cultist with it will purge holy water from them."
+ . += "Striking a noncultist, however, will tear their flesh."
/obj/item/melee/cultblade/dagger/attack(mob/living/M, mob/living/user)
if(iscultist(M))
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index f0fc59834c..da002e568c 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -47,13 +47,13 @@ Runes can either be invoked by one's self or with many different cultists. Each
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "cult_runes", I)
/obj/effect/rune/examine(mob/user)
- ..()
+ . = ..()
if(iscultist(user) || user.stat == DEAD) //If they're a cultist or a ghost, tell them the effects
- to_chat(user, "Name: [cultist_name]")
- to_chat(user, "Effects: [capitalize(cultist_desc)]")
- to_chat(user, "Required Acolytes: [req_cultists_text ? "[req_cultists_text]":"[req_cultists]"]")
+ . += "Name: [cultist_name]"
+ . += "Effects: [capitalize(cultist_desc)]"
+ . += "Required Acolytes: [req_cultists_text ? "[req_cultists_text]":"[req_cultists]"]"
if(req_keyword && keyword)
- to_chat(user, "Keyword: [keyword]")
+ . += "Keyword: [keyword]"
/obj/effect/rune/attackby(obj/I, mob/user, params)
if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user))
@@ -249,7 +249,7 @@ structure_check() searches for nearby cultist structures required for the invoca
convertee.adjustFireLoss(-(burndamage * 0.75))
convertee.visible_message("[convertee] writhes in pain \
[brutedamage || burndamage ? "even as [convertee.p_their()] wounds heal and close" : "as the markings below [convertee.p_them()] glow a bloody red"]!", \
- "AAAAAAAAAAAAAA-")
+ "AAAAAAAAAAAAAA-")
SSticker.mode.add_cultist(convertee.mind, 1)
new /obj/item/melee/cultblade/dagger(get_turf(src))
convertee.mind.special_role = ROLE_CULTIST
@@ -525,10 +525,10 @@ structure_check() searches for nearby cultist structures required for the invoca
var/static/revives_used = -SOULS_TO_REVIVE // Cultists get one "free" revive
/obj/effect/rune/raise_dead/examine(mob/user)
- ..()
+ . = ..()
if(iscultist(user) || user.stat == DEAD)
var/revive_number = LAZYLEN(GLOB.sacrificed) - revives_used
- to_chat(user, "Revives Remaining: [revive_number]")
+ . += "Revives Remaining: [revive_number]"
/obj/effect/rune/raise_dead/invoke(var/list/invokers)
var/turf/T = get_turf(src)
@@ -622,11 +622,11 @@ structure_check() searches for nearby cultist structures required for the invoca
GLOB.wall_runes += src
/obj/effect/rune/wall/examine(mob/user)
- ..()
+ . = ..()
if(density && iscultist(user))
var/datum/timedevent/TMR = active_timers[1]
if(TMR)
- to_chat(user, "The air above this rune has hardened into a barrier that will last [DisplayTimeText(TMR.timeToRun - world.time)].")
+ . += "The air above this rune has hardened into a barrier that will last [DisplayTimeText(TMR.timeToRun - world.time)]."
/obj/effect/rune/wall/Destroy()
GLOB.wall_runes -= src
@@ -848,10 +848,10 @@ structure_check() searches for nearby cultist structures required for the invoca
fail_invoke()
log_game("Manifest rune failed - too many summoned ghosts")
return list()
- notify_ghosts("Manifest rune invoked in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src)
+ notify_ghosts("Manifest rune invoked in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src, ignore_dnr_observers = TRUE)
var/list/ghosts_on_rune = list()
for(var/mob/dead/observer/O in T)
- if(O.client && !jobban_isbanned(O, ROLE_CULTIST) && !QDELETED(src) && !QDELETED(O))
+ if(!QDELETED(O) && O.client && !jobban_isbanned(O, ROLE_CULTIST) && !QDELETED(src) && O.can_reenter_round())
ghosts_on_rune += O
if(!ghosts_on_rune.len)
to_chat(user, "There are no spirits near [src]!")
diff --git a/code/modules/antagonists/devil/devil.dm b/code/modules/antagonists/devil/devil.dm
index dc649025d2..2e38734b6f 100644
--- a/code/modules/antagonists/devil/devil.dm
+++ b/code/modules/antagonists/devil/devil.dm
@@ -549,7 +549,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
var/list/parts = list()
parts += printplayer(owner)
parts += printdevilinfo()
- parts += printobjectives(owner)
+ parts += printobjectives(objectives)
return parts.Join("
")
//A simple super light weight datum for the codex gigas.
diff --git a/code/modules/antagonists/devil/imp/imp.dm b/code/modules/antagonists/devil/imp/imp.dm
index da51a5d698..fa5263059a 100644
--- a/code/modules/antagonists/devil/imp/imp.dm
+++ b/code/modules/antagonists/devil/imp/imp.dm
@@ -57,3 +57,18 @@
visible_message("[src] screams in agony as it sublimates into a sulfurous smoke.")
ghostize()
qdel(src)
+
+/datum/antagonist/imp
+ name = "Imp"
+ antagpanel_category = "Devil"
+ show_in_roundend = FALSE
+
+/datum/antagonist/imp/on_gain()
+ . = ..()
+ give_objectives()
+
+/datum/antagonist/imp/proc/give_objectives()
+ var/datum/objective/newobjective = new
+ newobjective.explanation_text = "Try to get a promotion to a higher devilic rank."
+ newobjective.owner = owner
+ objectives += newobjective
\ No newline at end of file
diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm
index afe439f02c..fc50a0ecf5 100644
--- a/code/modules/antagonists/devil/true_devil/_true_devil.dm
+++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm
@@ -64,26 +64,25 @@
/mob/living/carbon/true_devil/examine(mob/user)
- var/msg = "*---------*\nThis is [icon2html(src, user)] [src]!\n"
+ . = list("*---------*\nThis is [icon2html(src, user)] [src]!")
//Left hand items
for(var/obj/item/I in held_items)
if(!(I.item_flags & ABSTRACT))
- msg += "It is holding [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n"
+ . += "It is holding [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))]."
//Braindead
if(!client && stat != DEAD)
- msg += "The devil seems to be in deep contemplation.\n"
+ . += "The devil seems to be in deep contemplation."
//Damaged
if(stat == DEAD)
- msg += "The hellfire seems to have been extinguished, for now at least.\n"
+ . += "The hellfire seems to have been extinguished, for now at least."
else if(health < (maxHealth/10))
- msg += "You can see hellfire inside its gaping wounds.\n"
+ . += "You can see hellfire inside its gaping wounds."
else if(health < (maxHealth/2))
- msg += "You can see hellfire inside its wounds.\n"
- msg += "*---------*"
- to_chat(user, msg)
+ . += "You can see hellfire inside its wounds."
+ . += "*---------*"
/mob/living/carbon/true_devil/IsAdvancedToolUser()
return 1
@@ -106,7 +105,7 @@
/mob/living/carbon/true_devil/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null)
return 666
-/mob/living/carbon/true_devil/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0)
+/mob/living/carbon/true_devil/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0)
if(mind && has_bane(BANE_LIGHT))
mind.disrupt_spells(-500)
return ..() //flashes don't stop devils UNLESS it's their bane.
@@ -147,13 +146,8 @@
if(ascended || user.mind.soulOwner == src.mind)
var/mob/living/simple_animal/imp/S = new(get_turf(loc))
user.transfer_ckey(S, FALSE)
- S.mind.assigned_role = "Imp"
- S.mind.special_role = "Imp"
- var/datum/objective/newobjective = new
- newobjective.explanation_text = "Try to get a promotion to a higher devilic rank."
- S.mind.objectives += newobjective
- to_chat(S, S.playstyle_string)
- to_chat(S, "Objective #[1]: [newobjective.explanation_text]")
+ var/datum/antagonist/imp/A = new()
+ S.mind.add_antag_datum(A)
else
return ..()
diff --git a/code/modules/antagonists/disease/disease_datum.dm b/code/modules/antagonists/disease/disease_datum.dm
index eb0feac0a2..1aef9ceba6 100644
--- a/code/modules/antagonists/disease/disease_datum.dm
+++ b/code/modules/antagonists/disease/disease_datum.dm
@@ -10,12 +10,10 @@
var/datum/objective/O = new /datum/objective/disease_infect()
O.owner = owner
objectives += O
- owner.objectives += O
O = new /datum/objective/disease_infect_centcom()
O.owner = owner
objectives += O
- owner.objectives += O
. = ..()
diff --git a/code/modules/antagonists/disease/disease_event.dm b/code/modules/antagonists/disease/disease_event.dm
index 385cee998b..4365fd7538 100644
--- a/code/modules/antagonists/disease/disease_event.dm
+++ b/code/modules/antagonists/disease/disease_event.dm
@@ -3,6 +3,7 @@
name = "Spawn Sentient Disease"
typepath = /datum/round_event/ghost_role/sentient_disease
weight = 7
+ gamemode_blacklist = list("dynamic")
max_occurrences = 1
min_players = 5
diff --git a/code/modules/antagonists/disease/disease_mob.dm b/code/modules/antagonists/disease/disease_mob.dm
index faea113ac5..516f30d896 100644
--- a/code/modules/antagonists/disease/disease_mob.dm
+++ b/code/modules/antagonists/disease/disease_mob.dm
@@ -9,7 +9,7 @@ the new instance inside the host to be updated to the template's stats.
name = "Sentient Disease"
real_name = "Sentient Disease"
desc = ""
- icon = 'icons/mob/blob.dmi'
+ icon = 'icons/mob/cameramob.dmi'
icon_state = "marker"
mouse_opacity = MOUSE_OPACITY_ICON
move_on_shuttle = FALSE
@@ -97,14 +97,14 @@ the new instance inside the host to be updated to the template's stats.
/mob/camera/disease/examine(mob/user)
- ..()
+ . = ..()
if(isobserver(user))
- to_chat(user, "[src] has [points]/[total_points] adaptation points.")
- to_chat(user, "[src] has the following unlocked:")
+ . += "[src] has [points]/[total_points] adaptation points."
+ . += "[src] has the following unlocked:"
for(var/A in purchased_abilities)
var/datum/disease_ability/B = A
if(istype(B))
- to_chat(user, "[B.name]")
+ . += "[B.name]"
/mob/camera/disease/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
return
@@ -117,7 +117,7 @@ the new instance inside the host to be updated to the template's stats.
follow_next(Dir & NORTHWEST)
last_move_tick = world.time
-/mob/camera/disease/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
+/mob/camera/disease/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
. = ..()
var/atom/movable/to_follow = speaker
if(radio_freq)
@@ -129,7 +129,7 @@ the new instance inside the host to be updated to the template's stats.
else
link = ""
// Recompose the message, because it's scrambled by default
- message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode)
+ message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode, FALSE, source)
to_chat(src, "[link] [message]")
diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm
index bb24af4f7a..0fb41cabc8 100644
--- a/code/modules/antagonists/ert/ert.dm
+++ b/code/modules/antagonists/ert/ert.dm
@@ -34,6 +34,12 @@
. = ..()
name_source = GLOB.commando_names
+/datum/antagonist/ert/deathsquad/apply_innate_effects(mob/living/mob_override)
+ ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT)
+
+/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override)
+ REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT)
+
/datum/antagonist/ert/security // kinda handled by the base template but here for completion
/datum/antagonist/ert/security/amber
@@ -113,7 +119,6 @@
/datum/antagonist/ert/proc/forge_objectives()
if(ert_team)
objectives |= ert_team.objectives
- owner.objectives |= objectives
/datum/antagonist/ert/proc/equipERT()
var/mob/living/carbon/human/H = owner.current
diff --git a/code/modules/antagonists/greentext/greentext.dm b/code/modules/antagonists/greentext/greentext.dm
index ffaab71aca..13a3c2a07a 100644
--- a/code/modules/antagonists/greentext/greentext.dm
+++ b/code/modules/antagonists/greentext/greentext.dm
@@ -8,7 +8,6 @@
O.completed = TRUE //YES!
O.owner = owner
objectives += O
- owner.objectives += objectives
/datum/antagonist/greentext/on_gain()
forge_objectives()
diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm
index 51e8d9a13b..49635356ac 100644
--- a/code/modules/antagonists/highlander/highlander.dm
+++ b/code/modules/antagonists/highlander/highlander.dm
@@ -24,8 +24,6 @@
hijack_objective.owner = owner
objectives += hijack_objective
- owner.objectives |= objectives
-
/datum/antagonist/highlander/on_gain()
forge_objectives()
owner.special_role = "highlander"
diff --git a/code/modules/antagonists/magic_servant/magic_servant.dm b/code/modules/antagonists/magic_servant/magic_servant.dm
new file mode 100644
index 0000000000..31b51f59f6
--- /dev/null
+++ b/code/modules/antagonists/magic_servant/magic_servant.dm
@@ -0,0 +1,9 @@
+/datum/antagonist/magic_servant
+ name = "Magic Servant"
+ show_in_roundend = FALSE
+ show_in_antagpanel = FALSE
+
+/datum/antagonist/magic_servant/proc/setup_master(mob/M)
+ var/datum/objective/O = new("Serve [M.real_name].")
+ O.owner = owner
+ objectives |= O
\ No newline at end of file
diff --git a/code/modules/antagonists/monkey/monkey.dm b/code/modules/antagonists/monkey/monkey.dm
index 9ce28eb60d..e480eb8674 100644
--- a/code/modules/antagonists/monkey/monkey.dm
+++ b/code/modules/antagonists/monkey/monkey.dm
@@ -63,7 +63,6 @@
/datum/antagonist/monkey/proc/forge_objectives()
objectives |= monkey_team.objectives
- owner.objectives |= objectives
/datum/antagonist/monkey/admin_remove(mob/admin)
var/mob/living/carbon/monkey/M = owner.current
diff --git a/code/modules/antagonists/morph/morph.dm b/code/modules/antagonists/morph/morph.dm
index 12f8d22897..ad2eb4792a 100644
--- a/code/modules/antagonists/morph/morph.dm
+++ b/code/modules/antagonists/morph/morph.dm
@@ -52,12 +52,11 @@
/mob/living/simple_animal/hostile/morph/examine(mob/user)
if(morphed)
- form.examine(user) // Refactor examine to return desc so it's static? Not sure if worth it
+ . = form.examine(user)
if(get_dist(user,src)<=3)
- to_chat(user, "It doesn't look quite right...")
+ . += "It doesn't look quite right..."
else
- ..()
- return
+ . = ..()
/mob/living/simple_animal/hostile/morph/med_hud_set_health()
if(morphed && !isliving(form))
diff --git a/code/modules/antagonists/ninja/ninja.dm b/code/modules/antagonists/ninja/ninja.dm
index a8bce90f1c..52e13bdc69 100644
--- a/code/modules/antagonists/ninja/ninja.dm
+++ b/code/modules/antagonists/ninja/ninja.dm
@@ -96,7 +96,6 @@
var/datum/objective/O = new /datum/objective/survive()
O.owner = owner
objectives += O
- owner.objectives |= objectives
/proc/remove_ninja(mob/living/L)
if(!L || !L.mind)
diff --git a/code/modules/antagonists/nukeop/equipment/borgchameleon.dm b/code/modules/antagonists/nukeop/equipment/borgchameleon.dm
new file mode 100644
index 0000000000..e25e0cd164
--- /dev/null
+++ b/code/modules/antagonists/nukeop/equipment/borgchameleon.dm
@@ -0,0 +1,181 @@
+/obj/item/borg_chameleon
+ name = "cyborg chameleon projector"
+ icon = 'icons/obj/device.dmi'
+ icon_state = "shield0"
+ flags_1 = CONDUCT_1
+ item_flags = NOBLUDGEON
+ item_state = "electronic"
+ lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
+ w_class = WEIGHT_CLASS_SMALL
+ var/friendlyName
+ var/savedName
+ var/active = FALSE
+ var/activationCost = 300
+ var/activationUpkeep = 50
+ var/disguise = null
+ var/disguise_icon_override = null
+ var/disguise_pixel_offset = null
+ var/mob/listeningTo
+ var/static/list/signalCache = list( // list here all signals that should break the camouflage
+ COMSIG_PARENT_ATTACKBY,
+ COMSIG_ATOM_ATTACK_HAND,
+ COMSIG_MOVABLE_IMPACT_ZONE,
+ COMSIG_ATOM_BULLET_ACT,
+ COMSIG_ATOM_EX_ACT,
+ COMSIG_ATOM_FIRE_ACT,
+ COMSIG_ATOM_EMP_ACT,
+ )
+ var/mob/living/silicon/robot/user // needed for process()
+ var/animation_playing = FALSE
+
+ var/list/engymodels = list("Default", "Default - Treads", "Heavy", "Sleek", "Marina", "Can", "Spider", "Loader","Handy", "Pup Dozer", "Vale")
+
+
+/obj/item/borg_chameleon/Initialize()
+ . = ..()
+ friendlyName = pick(GLOB.ai_names)
+
+/obj/item/borg_chameleon/Destroy()
+ listeningTo = null
+ return ..()
+
+/obj/item/borg_chameleon/dropped(mob/user)
+ . = ..()
+ disrupt(user)
+
+/obj/item/borg_chameleon/equipped(mob/user)
+ . = ..()
+ disrupt(user)
+
+/obj/item/borg_chameleon/attack_self(mob/living/silicon/robot/user)
+ if (user && user.cell && user.cell.charge > activationCost)
+ if (isturf(user.loc))
+ toggle(user)
+ else
+ to_chat(user, "You can't use [src] while inside something!")
+ else
+ to_chat(user, "You need at least [activationCost] charge in your cell to use [src]!")
+
+/obj/item/borg_chameleon/proc/toggle(mob/living/silicon/robot/user)
+ if(active)
+ playsound(src, 'sound/effects/pop.ogg', 100, TRUE, -6)
+ to_chat(user, "You deactivate \the [src].")
+ deactivate(user)
+ else
+ if(animation_playing)
+ to_chat(user, "\the [src] is recharging.")
+ return
+ var/borg_icon = input(user, "Select an icon!", "Robot Icon", null) as null|anything in engymodels
+ if(!borg_icon)
+ return FALSE
+ switch(borg_icon)
+ if("Default")
+ disguise = "engineer"
+ disguise_icon_override = 'icons/mob/robots.dmi'
+ if("Default - Treads")
+ disguise = "engi-tread"
+ disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ if("Loader")
+ disguise = "loaderborg"
+ disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ if("Handy")
+ disguise = "handyeng"
+ disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ if("Sleek")
+ disguise = "sleekeng"
+ disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ if("Can")
+ disguise = "caneng"
+ disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ if("Marina")
+ disguise = "marinaeng"
+ disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ if("Spider")
+ disguise = "spidereng"
+ disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ if("Heavy")
+ disguise = "heavyeng"
+ disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ if("Pup Dozer")
+ disguise = "pupdozer"
+ disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
+ disguise_pixel_offset = -16
+ if("Vale")
+ disguise = "valeeng"
+ disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
+ disguise_pixel_offset = -16
+ animation_playing = TRUE
+ to_chat(user, "You activate \the [src].")
+ playsound(src, 'sound/effects/seedling_chargeup.ogg', 100, TRUE, -6)
+ var/start = user.filters.len
+ var/X,Y,rsq,i,f
+ for(i=1, i<=7, ++i)
+ do
+ X = 60*rand() - 30
+ Y = 60*rand() - 30
+ rsq = X*X + Y*Y
+ while(rsq<100 || rsq>900)
+ user.filters += filter(type="wave", x=X, y=Y, size=rand()*2.5+0.5, offset=rand())
+ for(i=1, i<=7, ++i)
+ f = user.filters[start+i]
+ animate(f, offset=f:offset, time=0, loop=3, flags=ANIMATION_PARALLEL)
+ animate(offset=f:offset-1, time=rand()*20+10)
+ if (do_after(user, 50, target=user) && user.cell.use(activationCost))
+ playsound(src, 'sound/effects/bamf.ogg', 100, TRUE, -6)
+ to_chat(user, "You are now disguised as the Nanotrasen engineering borg \"[friendlyName]\".")
+ activate(user)
+ else
+ to_chat(user, "The chameleon field fizzles.")
+ do_sparks(3, FALSE, user)
+ for(i=1, i<=min(7, user.filters.len), ++i) // removing filters that are animating does nothing, we gotta stop the animations first
+ f = user.filters[start+i]
+ animate(f)
+ user.filters = null
+ animation_playing = FALSE
+
+/obj/item/borg_chameleon/process()
+ if (user)
+ if (!user.cell || !user.cell.use(activationUpkeep))
+ disrupt(user)
+ else
+ return PROCESS_KILL
+
+/obj/item/borg_chameleon/proc/activate(mob/living/silicon/robot/user)
+ START_PROCESSING(SSobj, src)
+ src.user = user
+ savedName = user.name
+ user.name = friendlyName
+ user.module.cyborg_base_icon = disguise
+ user.module.cyborg_icon_override = disguise_icon_override
+ user.module.cyborg_pixel_offset = disguise_pixel_offset
+ user.bubble_icon = "robot"
+ active = TRUE
+ user.update_icons()
+
+ if(listeningTo == user)
+ return
+ if(listeningTo)
+ UnregisterSignal(listeningTo, signalCache)
+ RegisterSignal(user, signalCache, .proc/disrupt)
+ listeningTo = user
+
+/obj/item/borg_chameleon/proc/deactivate(mob/living/silicon/robot/user)
+ STOP_PROCESSING(SSobj, src)
+ if(listeningTo)
+ UnregisterSignal(listeningTo, signalCache)
+ listeningTo = null
+ do_sparks(5, FALSE, user)
+ user.name = savedName
+ user.module.cyborg_base_icon = initial(user.module.cyborg_base_icon)
+ user.module.cyborg_icon_override = 'icons/mob/robots.dmi'
+ user.bubble_icon = "syndibot"
+ active = FALSE
+ user.update_icons()
+ user.pixel_x = 0 //this solely exists because of dogborgs. I want anyone who ever reads this code later on to know this. Don't ask me why it's here, doesn't work above update_icons()
+ src.user = user
+
+/obj/item/borg_chameleon/proc/disrupt(mob/living/silicon/robot/user)
+ if(active)
+ to_chat(user, "Your chameleon field deactivates.")
+ deactivate(user)
\ No newline at end of file
diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm
index 779dfb43a7..0a223f8b10 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm
@@ -64,7 +64,7 @@ GLOBAL_VAR_INIT(war_declared, FALSE)
for(var/obj/machinery/computer/camera_advanced/shuttle_docker/D in GLOB.jam_on_wardec)
D.jammed = TRUE
- GLOB.war_declared = TRUE
+ GLOB.war_declared = TRUE
var/list/nukeops = get_antag_minds(/datum/antagonist/nukeop)
var/actual_players = GLOB.joined_player_list.len - nukeops.len
var/tc_malus = 0
@@ -74,6 +74,11 @@ GLOBAL_VAR_INIT(war_declared, FALSE)
new uplink_type(get_turf(user), user.key, CHALLENGE_TELECRYSTALS - tc_malus + CEILING(PLAYER_SCALING * actual_players, 1))
CONFIG_SET(number/shuttle_refuel_delay, max(CONFIG_GET(number/shuttle_refuel_delay), CHALLENGE_SHUTTLE_DELAY))
+ if(istype(SSticker.mode, /datum/game_mode/dynamic))
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ var/threat_spent = CONFIG_GET(number/dynamic_warops_cost)
+ mode.spend_threat(threat_spent)
+ mode.log_threat("Nuke ops spent [threat_spent] on war ops.")
SSblackbox.record_feedback("amount", "nuclear_challenge_mode", 1)
qdel(src)
@@ -94,6 +99,14 @@ GLOBAL_VAR_INIT(war_declared, FALSE)
if(board.moved)
to_chat(user, "The shuttle has already been moved! You have forfeit the right to declare war.")
return FALSE
+ if(istype(SSticker.mode, /datum/game_mode/dynamic))
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ if(mode.threat_level < CONFIG_GET(number/dynamic_warops_requirement))
+ to_chat(user, "Due to the dynamic space in which the station resides, you are too deep into Nanotrasen territory to reasonably go loud.")
+ return FALSE
+ else if(mode.threat < CONFIG_GET(number/dynamic_warops_cost))
+ to_chat(user, "Due to recent threats on the station, Nanotrasen is looking too closely for a war declaration to be wise.")
+ return FALSE
return TRUE
/obj/item/nuclear_challenge/clownops
diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
index add3c1d9b0..e1c50a7cf5 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
@@ -55,9 +55,9 @@
/obj/machinery/nuclearbomb/examine(mob/user)
. = ..()
if(exploding)
- to_chat(user, "It is in the process of exploding. Perhaps reviewing your affairs is in order.")
+ . += "It is in the process of exploding. Perhaps reviewing your affairs is in order."
if(timing)
- to_chat(user, "There are [get_time_left()] seconds until detonation.")
+ . += "There are [get_time_left()] seconds until detonation."
/obj/machinery/nuclearbomb/selfdestruct
name = "station self-destruct terminal"
@@ -343,10 +343,10 @@
/obj/machinery/nuclearbomb/proc/set_anchor()
- if(!isinspace())
- anchored = !anchored
- else
+ if(isinspace() && !anchored)
to_chat(usr, "There is nothing to anchor to!")
+ else
+ anchored = !anchored
/obj/machinery/nuclearbomb/proc/set_safety()
safety = !safety
@@ -472,9 +472,9 @@
/obj/machinery/nuclearbomb/beer/examine(mob/user)
. = ..()
if(keg.reagents.total_volume)
- to_chat(user, "It has [keg.reagents.total_volume] unit\s left.")
+ . += "It has [keg.reagents.total_volume] unit\s left."
else
- to_chat(user, "It's empty.")
+ . += "It's empty."
/obj/machinery/nuclearbomb/beer/attackby(obj/item/W, mob/user, params)
if(W.is_refillable())
@@ -611,11 +611,8 @@ This is here to make the tiles around the station mininuke change when it's arme
if(!fake)
return
- var/ghost = isobserver(user)
- var/captain = user.mind && user.mind.assigned_role == "Captain"
- var/nukie = user.mind && user.mind.has_antag_datum(/datum/antagonist/nukeop)
- if(ghost || captain || nukie)
- to_chat(user, "The serial numbers on [src] are incorrect.")
+ if(isobserver(user) || HAS_TRAIT(user, TRAIT_DISK_VERIFIER) || (user.mind && HAS_TRAIT(user.mind, TRAIT_DISK_VERIFIER)))
+ . += "The serial numbers on [src] are incorrect."
/obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params)
if(istype(I, /obj/item/claymore/highlander) && !fake)
@@ -653,3 +650,7 @@ This is here to make the tiles around the station mininuke change when it's arme
/obj/item/disk/nuclear/fake
fake = TRUE
+
+/obj/item/disk/nuclear/fake/obvious
+ name = "cheap plastic imitation of the nuclear authentication disk"
+ desc = "How anyone could mistake this for the real thing is beyond you."
diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm
index 538feba008..db9ff4e609 100644
--- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm
+++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm
@@ -2,7 +2,7 @@
var/mode = TRACK_NUKE_DISK
/obj/item/pinpointer/nuke/examine(mob/user)
- ..()
+ . = ..()
var/msg = "Its tracking indicator reads "
switch(mode)
if(TRACK_NUKE_DISK)
@@ -13,10 +13,10 @@
msg += "\"vasvygengbefuvc\"."
else
msg = "Its tracking indicator is blank."
- to_chat(user, msg)
+ . += msg
for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines)
if(bomb.timing)
- to_chat(user, "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()].")
+ . += "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()]."
/obj/item/pinpointer/nuke/process()
..()
diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm
index 800448c02f..d343951d53 100644
--- a/code/modules/antagonists/nukeop/nukeop.dm
+++ b/code/modules/antagonists/nukeop/nukeop.dm
@@ -23,10 +23,12 @@
/datum/antagonist/nukeop/apply_innate_effects(mob/living/mob_override)
var/mob/living/M = mob_override || owner.current
update_synd_icons_added(M)
+ ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, NUKEOP_TRAIT)
/datum/antagonist/nukeop/remove_innate_effects(mob/living/mob_override)
var/mob/living/M = mob_override || owner.current
update_synd_icons_removed(M)
+ REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, NUKEOP_TRAIT)
/datum/antagonist/nukeop/proc/equip_op()
if(!ishuman(owner.current))
@@ -42,7 +44,6 @@
owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0)
to_chat(owner, "You are a [nuke_team ? nuke_team.syndicate_name : "syndicate"] agent!")
owner.announce_objectives()
- return
/datum/antagonist/nukeop/on_gain()
give_alias()
@@ -87,7 +88,7 @@
/datum/antagonist/nukeop/proc/forge_objectives()
if(nuke_team)
- owner.objectives |= nuke_team.objectives
+ objectives |= nuke_team.objectives
/datum/antagonist/nukeop/proc/move_to_spawnpoint()
var/team_number = 1
diff --git a/code/modules/antagonists/official/official.dm b/code/modules/antagonists/official/official.dm
index 26de196cb4..9165a99d42 100644
--- a/code/modules/antagonists/official/official.dm
+++ b/code/modules/antagonists/official/official.dm
@@ -36,8 +36,6 @@
missionobj.completed = 1
mission = missionobj
objectives |= mission
- owner.objectives |= objectives
-
/datum/antagonist/official/on_gain()
forge_objectives()
diff --git a/code/modules/antagonists/overthrow/overthrow.dm b/code/modules/antagonists/overthrow/overthrow.dm
index 075b9f13bc..c8b253793e 100644
--- a/code/modules/antagonists/overthrow/overthrow.dm
+++ b/code/modules/antagonists/overthrow/overthrow.dm
@@ -26,7 +26,6 @@
// Sets objectives, equips all antags with the storage implant.
/datum/antagonist/overthrow/on_gain()
objectives += team.objectives
- owner.objectives += objectives
..()
owner.announce_objectives()
equip_overthrow()
@@ -34,7 +33,6 @@
/datum/antagonist/overthrow/on_removal()
owner.special_role = null
- owner.objectives -= objectives
..()
// Creates the overthrow team, or sets it. The objectives are static for all the team members.
diff --git a/code/modules/antagonists/overthrow/overthrow_team.dm b/code/modules/antagonists/overthrow/overthrow_team.dm
index 7f5d010013..a22f08d45c 100644
--- a/code/modules/antagonists/overthrow/overthrow_team.dm
+++ b/code/modules/antagonists/overthrow/overthrow_team.dm
@@ -35,7 +35,9 @@
objectives += heads_obj
for(var/i in members)
var/datum/mind/M = i
- M.objectives += heads_obj
+ var/datum/antagonist/overthrow/O = M.has_antag_datum(/datum/antagonist/overthrow)
+ if(O)
+ O.objectives += heads_obj
heads_obj.find_targets()
addtimer(CALLBACK(src,.proc/update_objectives),OBJECTIVE_UPDATING_TIME,TIMER_UNIQUE)
diff --git a/code/modules/antagonists/pirate/pirate.dm b/code/modules/antagonists/pirate/pirate.dm
index 96830562e9..ff33477909 100644
--- a/code/modules/antagonists/pirate/pirate.dm
+++ b/code/modules/antagonists/pirate/pirate.dm
@@ -31,12 +31,7 @@
/datum/antagonist/pirate/on_gain()
if(crew)
- owner.objectives |= crew.objectives
- . = ..()
-
-/datum/antagonist/pirate/on_removal()
- if(crew)
- owner.objectives -= crew.objectives
+ objectives |= crew.objectives
. = ..()
/datum/team/pirate
@@ -53,7 +48,9 @@
getbooty.update_explanation_text()
objectives += getbooty
for(var/datum/mind/M in members)
- M.objectives |= objectives
+ var/datum/antagonist/pirate/P = M.has_antag_datum(/datum/antagonist/pirate)
+ if(P)
+ P.objectives |= objectives
/datum/objective/loot
diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm
index b43024fb31..d7d88a9b6a 100644
--- a/code/modules/antagonists/revenant/revenant.dm
+++ b/code/modules/antagonists/revenant/revenant.dm
@@ -368,11 +368,11 @@
scatter()
/obj/item/ectoplasm/revenant/examine(mob/user)
- ..()
+ . = ..()
if(inert)
- to_chat(user, "It seems inert.")
+ . += "It seems inert."
else if(reforming)
- to_chat(user, "It is shifting and distorted. It would be wise to destroy this.")
+ . += "It is shifting and distorted. It would be wise to destroy this."
/obj/item/ectoplasm/revenant/proc/reform()
if(QDELETED(src) || QDELETED(revenant) || inert)
diff --git a/code/modules/antagonists/revenant/revenant_abilities.dm b/code/modules/antagonists/revenant/revenant_abilities.dm
index 17d200a685..d6582a294f 100644
--- a/code/modules/antagonists/revenant/revenant_abilities.dm
+++ b/code/modules/antagonists/revenant/revenant_abilities.dm
@@ -5,7 +5,7 @@
ShiftClickOn(A)
return
if(modifiers["alt"])
- AltClickNoInteract(src, A)
+ altclick_listed_turf(A)
return
if(ishuman(A))
diff --git a/code/modules/antagonists/revenant/revenant_antag.dm b/code/modules/antagonists/revenant/revenant_antag.dm
index 476db96fb8..8d99edf26e 100644
--- a/code/modules/antagonists/revenant/revenant_antag.dm
+++ b/code/modules/antagonists/revenant/revenant_antag.dm
@@ -14,8 +14,6 @@
objective2.owner = owner
objectives += objective2
- owner.objectives |= objectives
-
/datum/antagonist/revenant/on_gain()
forge_objectives()
. = ..()
diff --git a/code/modules/antagonists/revenant/revenant_spawn_event.dm b/code/modules/antagonists/revenant/revenant_spawn_event.dm
index cb534b6613..7bb7f1aa76 100644
--- a/code/modules/antagonists/revenant/revenant_spawn_event.dm
+++ b/code/modules/antagonists/revenant/revenant_spawn_event.dm
@@ -4,6 +4,7 @@
name = "Spawn Revenant" // Did you mean 'griefghost'?
typepath = /datum/round_event/ghost_role/revenant
weight = 7
+ gamemode_blacklist = list("dynamic")
max_occurrences = 1
min_players = 5
diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm
index e10d83ffb7..c4190d8cd9 100644
--- a/code/modules/antagonists/revolution/revolution.dm
+++ b/code/modules/antagonists/revolution/revolution.dm
@@ -66,10 +66,10 @@
return rev_team
/datum/antagonist/rev/proc/create_objectives()
- owner.objectives |= rev_team.objectives
+ objectives |= rev_team.objectives
/datum/antagonist/rev/proc/remove_objectives()
- owner.objectives -= rev_team.objectives
+ objectives -= rev_team.objectives
//Bump up to head_rev
/datum/antagonist/rev/proc/promote()
@@ -207,9 +207,20 @@
owner.current.visible_message("The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it.", null, null, null, owner.current)
to_chat(owner, "The frame's firmware detects and deletes your neural reprogramming! You remember nothing of your time spent reprogrammed, you can't even remember the names or identities of anyone involved...")
+/datum/antagonist/rev/head/farewell()
+ if((ishuman(owner.current) || ismonkey(owner.current)))
+ if(owner.current.stat != DEAD)
+ owner.current.visible_message("[owner.current] looks like [owner.current.p_theyve()] just remembered [owner.current.p_their()] real allegiance!", null, null, null, owner.current)
+ to_chat(owner, "You have given up your cause of overthrowing the command staff. You are no longer a Head Revolutionary.")
+ else
+ to_chat(owner, "The sweet release of death. You are no longer a Head Revolutionary.")
+ else if(issilicon(owner.current))
+ owner.current.visible_message("The frame beeps contentedly, suppressing the disloyal personality traits from the MMI before initalizing it.", null, null, null, owner.current)
+ to_chat(owner, "The frame's firmware detects and suppresses your unwanted personality traits! You feel more content with the leadership around these parts.")
+
//blunt trauma deconversions call this through species.dm spec_attacked_by()
/datum/antagonist/rev/proc/remove_revolutionary(borged, deconverter)
- log_attack("[key_name(owner.current)] has been deconverted from the revolution by [key_name(deconverter)]!")
+ log_attack("[key_name(owner.current)] has been deconverted from the revolution by [ismob(deconverter) ? key_name(deconverter) : deconverter]!")
if(borged)
message_admins("[ADMIN_LOOKUPFLW(owner.current)] has been borged while being a [name]")
owner.special_role = null
@@ -219,9 +230,8 @@
owner.remove_antag_datum(type)
/datum/antagonist/rev/head/remove_revolutionary(borged,deconverter)
- if(!borged)
- return
- . = ..()
+ if(borged || deconverter == "gamemode")
+ . = ..()
/datum/antagonist/rev/head/equip_rev()
var/mob/living/carbon/human/H = owner.current
@@ -253,6 +263,8 @@
/datum/team/revolution
name = "Revolution"
var/max_headrevs = 3
+ var/list/ex_headrevs = list() // Dynamic removes revs on loss, used to keep a list for the roundend report.
+ var/list/ex_revs = list()
/datum/team/revolution/proc/update_objectives(initial = FALSE)
var/untracked_heads = SSjob.get_all_heads()
@@ -265,7 +277,8 @@
new_target.update_explanation_text()
objectives += new_target
for(var/datum/mind/M in members)
- M.objectives |= objectives
+ var/datum/antagonist/rev/R = M.has_antag_datum(/datum/antagonist/rev)
+ R.objectives |= objectives
addtimer(CALLBACK(src,.proc/update_objectives),HEAD_UPDATE_PERIOD,TIMER_UNIQUE)
@@ -295,9 +308,12 @@
addtimer(CALLBACK(src,.proc/update_heads),HEAD_UPDATE_PERIOD,TIMER_UNIQUE)
+/datum/team/revolution/proc/save_members()
+ ex_headrevs = get_antag_minds(/datum/antagonist/rev/head, TRUE)
+ ex_revs = get_antag_minds(/datum/antagonist/rev, TRUE)
/datum/team/revolution/roundend_report()
- if(!members.len)
+ if(!members.len && !ex_headrevs.len)
return
var/list/result = list()
@@ -317,8 +333,17 @@
var/list/targets = list()
- var/list/datum/mind/headrevs = get_antag_minds(/datum/antagonist/rev/head)
- var/list/datum/mind/revs = get_antag_minds(/datum/antagonist/rev,TRUE)
+ var/list/datum/mind/headrevs
+ var/list/datum/mind/revs
+ if(ex_headrevs.len)
+ headrevs = ex_headrevs
+ else
+ headrevs = get_antag_minds(/datum/antagonist/rev/head, TRUE)
+
+ if(ex_revs.len)
+ revs = ex_revs
+ else
+ revs = get_antag_minds(/datum/antagonist/rev, TRUE)
if(headrevs.len)
var/list/headrev_part = list()
headrev_part += ""
diff --git a/code/modules/antagonists/santa/santa.dm b/code/modules/antagonists/santa/santa.dm
new file mode 100644
index 0000000000..bf42188cf6
--- /dev/null
+++ b/code/modules/antagonists/santa/santa.dm
@@ -0,0 +1,29 @@
+/datum/antagonist/santa
+ name = "Santa"
+ show_in_antagpanel = FALSE
+
+/datum/antagonist/santa/on_gain()
+ . = ..()
+ give_equipment()
+ give_objective()
+
+/datum/antagonist/santa/greet()
+ . = ..()
+ to_chat(owner, "You are Santa! Your objective is to bring joy to the people on this station. You can conjure more presents using a spell, and there are several presents in your bag.")
+
+/datum/antagonist/santa/proc/give_equipment()
+ var/mob/living/carbon/human/H = owner.current
+ if(istype(H))
+ H.equipOutfit(/datum/outfit/santa)
+
+ owner.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/presents)
+ var/obj/effect/proc_holder/spell/targeted/area_teleport/teleport/telespell = new
+ telespell.clothes_req = 0 //santa robes aren't actually magical.
+ owner.AddSpell(telespell) //does the station have chimneys? WHO KNOWS!
+
+/datum/antagonist/santa/proc/give_objective()
+ var/datum/objective/santa_objective = new()
+ santa_objective.explanation_text = "Bring joy and presents to the station!"
+ santa_objective.completed = 1 //lets cut our santas some slack.
+ santa_objective.owner = owner
+ objectives |= santa_objective
\ No newline at end of file
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index f45555a6ee..c669ff7877 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -33,6 +33,7 @@
melee_damage_lower = 30
melee_damage_upper = 30
see_in_dark = 8
+ blood_volume = 0 //No bleeding on getting shot, for skeddadles
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
bloodcrawl = BLOODCRAWL_EAT
var/playstyle_string = "You are a slaughter demon, a terrible creature from another realm. You have a single desire: To kill. \
@@ -94,7 +95,7 @@
user.temporarilyRemoveItemFromInventory(src, TRUE)
src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E
-/obj/item/organ/heart/demon/Insert(mob/living/carbon/M, special = 0)
+/obj/item/organ/heart/demon/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
if(M.mind)
M.mind.AddSpell(new /obj/effect/proc_holder/spell/bloodcrawl(null))
diff --git a/code/modules/antagonists/slaughter/slaughter_antag.dm b/code/modules/antagonists/slaughter/slaughter_antag.dm
index 54bfc19acf..a018603cf1 100644
--- a/code/modules/antagonists/slaughter/slaughter_antag.dm
+++ b/code/modules/antagonists/slaughter/slaughter_antag.dm
@@ -26,8 +26,6 @@
new_objective2.explanation_text = "[objective_verb] everyone[summoner ? " else while you're at it":""]."
objectives += new_objective2
- owner.objectives |= objectives
-
/datum/antagonist/slaughter/laughter
name = "Laughter demon"
objective_verb = "Hug and Tickle"
\ No newline at end of file
diff --git a/code/modules/antagonists/slaughter/slaughterevent.dm b/code/modules/antagonists/slaughter/slaughterevent.dm
index 6ace6a0536..069795cfb8 100644
--- a/code/modules/antagonists/slaughter/slaughterevent.dm
+++ b/code/modules/antagonists/slaughter/slaughterevent.dm
@@ -3,6 +3,7 @@
typepath = /datum/round_event/ghost_role/slaughter
weight = 1 //Very rare
max_occurrences = 1
+ gamemode_blacklist = list("dynamic")
earliest_start = 1 HOURS
min_players = 20
diff --git a/code/modules/antagonists/survivalist/survivalist.dm b/code/modules/antagonists/survivalist/survivalist.dm
index 93a2170dab..4e0184b7b6 100644
--- a/code/modules/antagonists/survivalist/survivalist.dm
+++ b/code/modules/antagonists/survivalist/survivalist.dm
@@ -8,7 +8,6 @@
var/datum/objective/survive/survive = new
survive.owner = owner
objectives += survive
- owner.objectives |= objectives
/datum/antagonist/survivalist/on_gain()
owner.special_role = "survivalist"
diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm
index 87cee7586d..ce455d9e67 100644
--- a/code/modules/antagonists/swarmer/swarmer.dm
+++ b/code/modules/antagonists/swarmer/swarmer.dm
@@ -33,7 +33,7 @@
. = ..()
var/area/A = get_area(src)
if(A)
- notify_ghosts("A swarmer shell has been created in [A.name].", 'sound/effects/bin_close.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE)
+ notify_ghosts("A swarmer shell has been created in [A.name].", 'sound/effects/bin_close.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_dnr_observers = TRUE)
/obj/effect/mob_spawn/swarmer/attack_hand(mob/living/user)
. = ..()
diff --git a/code/modules/antagonists/swarmer/swarmer_event.dm b/code/modules/antagonists/swarmer/swarmer_event.dm
index e086485a49..8e385f6674 100644
--- a/code/modules/antagonists/swarmer/swarmer_event.dm
+++ b/code/modules/antagonists/swarmer/swarmer_event.dm
@@ -1,8 +1,8 @@
/datum/round_event_control/spawn_swarmer
name = "Spawn Swarmer Shell"
typepath = /datum/round_event/spawn_swarmer
- weight = 7
- max_occurrences = 1 //Only once okay fam
+ weight = 0
+ max_occurrences = 0
earliest_start = 30 MINUTES
min_players = 15
diff --git a/code/modules/antagonists/traitor/IAA/internal_affairs.dm b/code/modules/antagonists/traitor/IAA/internal_affairs.dm
index f2e6566e8f..caf2f644df 100644
--- a/code/modules/antagonists/traitor/IAA/internal_affairs.dm
+++ b/code/modules/antagonists/traitor/IAA/internal_affairs.dm
@@ -78,15 +78,14 @@
scan_target = null
if(owner)
if(owner.mind)
- if(owner.mind.objectives)
- for(var/datum/objective/objective_ in owner.mind.objectives)
- if(!is_internal_objective(objective_))
- continue
- var/datum/objective/assassinate/internal/objective = objective_
- var/mob/current = objective.target.current
- if(current&¤t.stat!=DEAD)
- scan_target = current
- break
+ for(var/datum/objective/objective_ in owner.mind.get_all_objectives())
+ if(!is_internal_objective(objective_))
+ continue
+ var/datum/objective/assassinate/internal/objective = objective_
+ var/mob/current = objective.target.current
+ if(current&¤t.stat!=DEAD)
+ scan_target = current
+ break
/datum/status_effect/agent_pinpointer/tick()
if(!owner)
@@ -100,9 +99,9 @@
return (istype(O, /datum/objective/assassinate/internal)||istype(O, /datum/objective/destroy/internal))
/datum/antagonist/traitor/proc/replace_escape_objective()
- if(!owner||!owner.objectives)
+ if(!owner || !objectives.len)
return
- for (var/objective_ in owner.objectives)
+ for (var/objective_ in objectives)
if(!(istype(objective_, /datum/objective/escape)||istype(objective_, /datum/objective/survive)))
continue
remove_objective(objective_)
@@ -112,9 +111,9 @@
add_objective(martyr_objective)
/datum/antagonist/traitor/proc/reinstate_escape_objective()
- if(!owner||!owner.objectives)
+ if(!owner||!objectives.len)
return
- for (var/objective_ in owner.objectives)
+ for (var/objective_ in objectives)
if(!istype(objective_, /datum/objective/martyr))
continue
remove_objective(objective_)
@@ -131,7 +130,7 @@
return
to_chat(owner.current, " Target eliminated: [victim.name]")
LAZYINITLIST(targets_stolen)
- for(var/objective_ in victim.objectives)
+ for(var/objective_ in victim.get_all_objectives())
if(istype(objective_, /datum/objective/assassinate/internal))
var/datum/objective/assassinate/internal/objective = objective_
if(objective.target==owner)
@@ -159,7 +158,7 @@
var/status_text = objective.check_completion() ? "neutralised" : "active"
to_chat(owner.current, " New target added to database: [objective.target.name] ([status_text]) ")
last_man_standing = TRUE
- for(var/objective_ in owner.objectives)
+ for(var/objective_ in objectives)
if(!is_internal_objective(objective_))
continue
var/datum/objective/assassinate/internal/objective = objective_
@@ -175,7 +174,7 @@
/datum/antagonist/traitor/internal_affairs/proc/iaa_process()
if(owner&&owner.current&&owner.current.stat!=DEAD)
- for(var/objective_ in owner.objectives)
+ for(var/objective_ in objectives)
if(!is_internal_objective(objective_))
continue
var/datum/objective/assassinate/internal/objective = objective_
@@ -224,8 +223,6 @@
special_role = TRAITOR_AGENT_ROLE
syndicate = TRUE
forge_single_objective()
- else
- ..() // Give them standard objectives.
return
/datum/antagonist/traitor/internal_affairs/forge_traitor_objectives()
diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm
index e43c2f6254..ac19df3631 100644
--- a/code/modules/antagonists/traitor/datum_traitor.dm
+++ b/code/modules/antagonists/traitor/datum_traitor.dm
@@ -48,19 +48,22 @@
A.verbs -= /mob/living/silicon/ai/proc/choose_modules
A.malf_picker.remove_malf_verbs(A)
qdel(A.malf_picker)
-
SSticker.mode.traitors -= owner
if(!silent && owner.current)
to_chat(owner.current," You are no longer the [special_role]! ")
owner.special_role = null
- ..()
+ . = ..()
-/datum/antagonist/traitor/proc/add_objective(var/datum/objective/O)
- owner.objectives += O
+/datum/antagonist/traitor/proc/handle_hearing(datum/source, list/hearing_args)
+ var/message = hearing_args[HEARING_RAW_MESSAGE]
+ message = GLOB.syndicate_code_phrase_regex.Replace(message, "$1")
+ message = GLOB.syndicate_code_response_regex.Replace(message, "$1")
+ hearing_args[HEARING_RAW_MESSAGE] = message
+
+/datum/antagonist/traitor/proc/add_objective(datum/objective/O)
objectives += O
-/datum/antagonist/traitor/proc/remove_objective(var/datum/objective/O)
- owner.objectives -= O
+/datum/antagonist/traitor/proc/remove_objective(datum/objective/O)
objectives -= O
/datum/antagonist/traitor/proc/forge_traitor_objectives()
@@ -72,7 +75,17 @@
/datum/antagonist/traitor/proc/forge_human_objectives()
var/is_hijacker = FALSE
- if (GLOB.joined_player_list.len >= 30) // Less murderboning on lowpop thanks
+ var/datum/game_mode/dynamic/mode
+ var/is_dynamic = FALSE
+ if(istype(SSticker.mode,/datum/game_mode/dynamic))
+ mode = SSticker.mode
+ is_dynamic = TRUE
+ if(GLOB.joined_player_list.len>=GLOB.dynamic_high_pop_limit)
+ is_hijacker = (prob(10) && mode.threat_level > CONFIG_GET(number/dynamic_hijack_high_population_requirement))
+ else
+ var/indice_pop = min(10,round(GLOB.joined_player_list.len/mode.pop_per_requirement)+1)
+ is_hijacker = (prob(10) && (mode.threat_level >= CONFIG_GET(number_list/dynamic_hijack_requirements)[indice_pop]))
+ else if (GLOB.joined_player_list.len >= 30) // Less murderboning on lowpop thanks
is_hijacker = prob(10)
var/martyr_chance = prob(20)
var/objective_count = is_hijacker //Hijacking counts towards number of objectives
@@ -89,15 +102,19 @@
forge_single_objective()
if(is_hijacker && objective_count <= toa) //Don't assign hijack if it would exceed the number of objectives set in config.traitor_objectives_amount
- if (!(locate(/datum/objective/hijack) in owner.objectives))
+ if (!(locate(/datum/objective/hijack) in objectives))
var/datum/objective/hijack/hijack_objective = new
hijack_objective.owner = owner
add_objective(hijack_objective)
+ if(is_dynamic)
+ var/threat_spent = CONFIG_GET(number/dynamic_hijack_cost)
+ mode.spend_threat(threat_spent)
+ mode.log_threat("[owner.name] spent [threat_spent] on hijack.")
return
var/martyr_compatibility = 1 //You can't succeed in stealing if you're dead.
- for(var/datum/objective/O in owner.objectives)
+ for(var/datum/objective/O in objectives)
if(!O.martyr_compatible)
martyr_compatibility = 0
break
@@ -106,10 +123,14 @@
var/datum/objective/martyr/martyr_objective = new
martyr_objective.owner = owner
add_objective(martyr_objective)
+ if(is_dynamic)
+ var/threat_spent = CONFIG_GET(number/dynamic_hijack_cost)
+ mode.spend_threat(threat_spent)
+ mode.log_threat("[owner.name] spent [threat_spent] on glorious death.")
return
else
- if(!(locate(/datum/objective/escape) in owner.objectives))
+ if(!(locate(/datum/objective/escape) in objectives))
var/datum/objective/escape/escape_objective = new
escape_objective.owner = owner
add_objective(escape_objective)
@@ -141,7 +162,18 @@
/datum/antagonist/traitor/proc/forge_single_human_objective() //Returns how many objectives are added
.=1
- if(prob(50))
+ var/assassin_prob = 50
+ var/is_dynamic = FALSE
+ var/datum/game_mode/dynamic/mode
+ if(istype(SSticker.mode,/datum/game_mode/dynamic))
+ mode = SSticker.mode
+ is_dynamic = TRUE
+ assassin_prob = mode.threat_level*(2/3)
+ if(prob(assassin_prob))
+ if(is_dynamic)
+ var/threat_spent = CONFIG_GET(number/dynamic_assassinate_cost)
+ mode.spend_threat(threat_spent)
+ mode.log_threat("[owner.name] spent [threat_spent] on an assassination target.")
var/list/active_ais = active_ais()
if(active_ais.len && prob(100/GLOB.joined_player_list.len))
var/datum/objective/destroy/destroy_objective = new
@@ -159,7 +191,7 @@
kill_objective.find_target()
add_objective(kill_objective)
else
- if(prob(15) && !(locate(/datum/objective/download) in owner.objectives) && !(owner.assigned_role in list("Research Director", "Scientist", "Roboticist")))
+ if(prob(15) && !(locate(/datum/objective/download) in objectives) && !(owner.assigned_role in list("Research Director", "Scientist", "Roboticist")))
var/datum/objective/download/download_objective = new
download_objective.owner = owner
download_objective.gen_amount_goal()
@@ -228,16 +260,20 @@
/datum/antagonist/traitor/apply_innate_effects(mob/living/mob_override)
. = ..()
update_traitor_icons_added()
- var/mob/living/silicon/ai/A = mob_override || owner.current
- if(istype(A) && traitor_kind == TRAITOR_AI)
+ var/mob/M = mob_override || owner.current
+ if(isAI(M) && traitor_kind == TRAITOR_AI)
+ var/mob/living/silicon/ai/A = M
A.hack_software = TRUE
+ RegisterSignal(M, COMSIG_MOVABLE_HEAR, .proc/handle_hearing)
/datum/antagonist/traitor/remove_innate_effects(mob/living/mob_override)
. = ..()
update_traitor_icons_removed()
- var/mob/living/silicon/ai/A = mob_override || owner.current
- if(istype(A) && traitor_kind == TRAITOR_AI)
+ var/mob/M = mob_override || owner.current
+ if(isAI(M) && traitor_kind == TRAITOR_AI)
+ var/mob/living/silicon/ai/A = M
A.hack_software = FALSE
+ UnregisterSignal(M, COMSIG_MOVABLE_HEAR)
/datum/antagonist/traitor/proc/give_codewords()
if(!owner.current)
diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
index e1d607c34b..3cc3b48e50 100644
--- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
+++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
@@ -208,7 +208,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
var/unlock_text = "Hello World!" //Text shown when an ability is unlocked
var/unlock_sound //Sound played when an ability is unlocked
-/datum/AI_Module/proc/upgrade(mob/living/silicon/AI/AI) //Apply upgrades!
+/datum/AI_Module/proc/upgrade(mob/living/silicon/ai/AI) //Apply upgrades!
return
/datum/AI_Module/large //Big, powerful stuff that can only be used once.
@@ -397,7 +397,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
unlock_text = "You establish a power diversion to your turrets, upgrading their health and damage."
unlock_sound = 'sound/items/rped.ogg'
-/datum/AI_Module/large/upgrade_turrets/upgrade(mob/living/silicon/AI/AI)
+/datum/AI_Module/large/upgrade_turrets/upgrade(mob/living/silicon/ai/AI)
for(var/obj/machinery/porta_turret/ai/turret in GLOB.machines)
turret.obj_integrity += 30
turret.lethal_projectile = /obj/item/projectile/beam/laser/heavylaser //Once you see it, you will know what it means to FEAR.
@@ -505,6 +505,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
if(!is_station_level(F.z))
continue
F.obj_flags |= EMAGGED
+ F.update_icon()
to_chat(owner, "All thermal sensors on the station have been disabled. Fire alerts will no longer be recognized.")
owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0)
diff --git a/code/modules/antagonists/valentines/heartbreaker.dm b/code/modules/antagonists/valentines/heartbreaker.dm
index 4f228910d7..b78e8d574f 100644
--- a/code/modules/antagonists/valentines/heartbreaker.dm
+++ b/code/modules/antagonists/valentines/heartbreaker.dm
@@ -9,7 +9,6 @@
var/datum/objective/martyr/normiesgetout = new
normiesgetout.owner = owner
objectives += normiesgetout
- owner.objectives += objectives
/datum/antagonist/heartbreaker/on_gain()
forge_objectives()
diff --git a/code/modules/antagonists/valentines/valentine.dm b/code/modules/antagonists/valentines/valentine.dm
index 21e54374a4..19c08f3076 100644
--- a/code/modules/antagonists/valentines/valentine.dm
+++ b/code/modules/antagonists/valentines/valentine.dm
@@ -12,7 +12,6 @@
protect_objective.human_check = FALSE
protect_objective.explanation_text = "Protect [date.name], your date."
objectives += protect_objective
- owner.objectives += objectives
/datum/antagonist/valentine/on_gain()
forge_objectives()
@@ -34,8 +33,8 @@
//Squashed up a bit
/datum/antagonist/valentine/roundend_report()
var/objectives_complete = TRUE
- if(owner.objectives.len)
- for(var/datum/objective/objective in owner.objectives)
+ if(objectives.len)
+ for(var/datum/objective/objective in objectives)
if(!objective.check_completion())
objectives_complete = FALSE
break
@@ -51,8 +50,8 @@
/datum/antagonist/valentine/chem/roundend_report()
var/objectives_complete = TRUE
- if(owner.objectives.len)
- for(var/datum/objective/objective in owner.objectives)
+ if(objectives.len)
+ for(var/datum/objective/objective in objectives)
if(!objective.check_completion())
objectives_complete = FALSE
break
diff --git a/code/modules/antagonists/wishgranter/wishgranter.dm b/code/modules/antagonists/wishgranter/wishgranter.dm
index 318de51eb4..21cab26d1e 100644
--- a/code/modules/antagonists/wishgranter/wishgranter.dm
+++ b/code/modules/antagonists/wishgranter/wishgranter.dm
@@ -8,7 +8,6 @@
var/datum/objective/hijack/hijack = new
hijack.owner = owner
objectives += hijack
- owner.objectives |= objectives
/datum/antagonist/wishgranter/on_gain()
owner.special_role = "Avatar of the Wish Granter"
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index 576fc6b9bf..a0dbc4d9b1 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -255,7 +255,7 @@
/obj/item/voodoo/attackby(obj/item/I, mob/user, params)
if(target && cooldown < world.time)
- if(I.is_hot())
+ if(I.get_temperature())
to_chat(target, "You suddenly feel very hot")
target.adjust_bodytemperature(50)
GiveHint(target)
@@ -340,9 +340,9 @@
to_chat(victim, "You feel a dark presence from [A.name]")
/obj/item/voodoo/suicide_act(mob/living/carbon/user)
- user.visible_message("[user] links the voodoo doll to [user.p_them()]self and sits on it, infinitely crushing [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!")
- user.gib()
- return(BRUTELOSS)
+ user.visible_message("[user] links the voodoo doll to [user.p_them()]self and sits on it, infinitely crushing [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!")
+ user.gib()
+ return(BRUTELOSS)
/obj/item/voodoo/fire_act(exposed_temperature, exposed_volume)
if(target)
@@ -383,7 +383,9 @@
if(!istype(user) || on_cooldown)
return
var/turf/T = get_turf(user)
- if(!T)
+ var/area/A = get_area(user)
+ if(!T || !A || A.noteleport)
+ to_chat(user, "You play \the [src], yet no sound comes out of it... Looks like it won't work here.")
return
on_cooldown = TRUE
last_user = user
diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm
index 6f4c3fca10..962c2b2da4 100644
--- a/code/modules/antagonists/wizard/equipment/soulstone.dm
+++ b/code/modules/antagonists/wizard/equipment/soulstone.dm
@@ -35,15 +35,15 @@
to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly.")
/obj/item/soulstone/examine(mob/user)
- ..()
+ . = ..()
if(usability || iscultist(user) || iswizard(user) || isobserver(user))
if (old_shard)
- to_chat(user, "A soulstone, used to capture a soul, either from dead humans or from freed shades.")
+ . += "A soulstone, used to capture a soul, either from dead humans or from freed shades."
else
- to_chat(user, "A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades.")
- to_chat(user, "The captured soul can be placed into a construct shell to produce a construct, or released from the stone as a shade.")
+ . += "A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades."
+ . += "The captured soul can be placed into a construct shell to produce a construct, or released from the stone as a shade."
if(spent)
- to_chat(user, "This shard is spent; it is now just a creepy rock.")
+ . += "This shard is spent; it is now just a creepy rock."
/obj/item/soulstone/Destroy() //Stops the shade from being qdel'd immediately and their ghost being sent back to the arrival shuttle.
for(var/mob/living/simple_animal/shade/A in src)
@@ -102,13 +102,13 @@
desc = "A wicked machine used by those skilled in magical arts. It is inactive."
/obj/structure/constructshell/examine(mob/user)
- ..()
+ . = ..()
if(iscultist(user) || iswizard(user) || user.stat == DEAD)
- to_chat(user, "A construct shell, used to house bound souls from a soulstone.")
- to_chat(user, "Placing a soulstone with a soul into this shell allows you to produce your choice of the following:")
- to_chat(user, "An Artificer, which can produce more shells and soulstones, as well as fortifications.")
- to_chat(user, "A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.")
- to_chat(user, "A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow.")
+ . += "A construct shell, used to house bound souls from a soulstone."
+ . += "Placing a soulstone with a soul into this shell allows you to produce your choice of the following:"
+ . += "An Artificer, which can produce more shells and soulstones, as well as fortifications."
+ . += "A Wraith, which does high damage and can jaunt through walls, though it is quite fragile."
+ . += "A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."
/obj/structure/constructshell/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/soulstone))
diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm
index bb7ffdc85d..dfde04836d 100644
--- a/code/modules/antagonists/wizard/equipment/spellbook.dm
+++ b/code/modules/antagonists/wizard/equipment/spellbook.dm
@@ -11,12 +11,18 @@
var/buy_word = "Learn"
var/limit //used to prevent a spellbook_entry from being bought more than X times with one wizard spellbook
var/list/no_coexistance_typecache //Used so you can't have specific spells together
+ var/dynamic_cost = 0 // How much threat the spell costs to purchase for dynamic.
+ var/dynamic_requirement = 0 // How high the threat level needs to be for purchasing in dynamic.
/datum/spellbook_entry/New()
..()
no_coexistance_typecache = typecacheof(no_coexistance_typecache)
/datum/spellbook_entry/proc/IsAvailible() // For config prefs / gamemode restrictions - these are round applied
+ if(istype(SSticker.mode,/datum/game_mode/dynamic))
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ if(dynamic_requirement > 0 && mode.threat_level < dynamic_requirement)
+ return 0
return 1
/datum/spellbook_entry/proc/CanBuy(mob/living/carbon/human/user,obj/item/spellbook/book) // Specific circumstances
@@ -25,6 +31,10 @@
for(var/spell in user.mind.spell_list)
if(is_type_in_typecache(spell, no_coexistance_typecache))
return 0
+ if(dynamic_cost>0 && istype(SSticker.mode,/datum/game_mode/dynamic))
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ if(mode.threat < dynamic_cost)
+ return 0
return 1
/datum/spellbook_entry/proc/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) //return 1 on success
@@ -60,6 +70,10 @@
SSblackbox.record_feedback("nested tally", "wizard_spell_improved", 1, list("[name]", "[aspell.spell_level]"))
return 1
//No same spell found - just learn it
+ if(dynamic_cost > 0 && istype(SSticker.mode,/datum/game_mode/dynamic))
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ mode.spend_threat(dynamic_cost)
+ mode.log_threat("Wizard spent [dynamic_cost] on [name].")
SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
user.mind.AddSpell(S)
to_chat(user, "You have learned [S.name].")
@@ -83,6 +97,10 @@
if(!S)
S = new spell_type()
var/spell_levels = 0
+ if(dynamic_cost > 0 && istype(SSticker.mode,/datum/game_mode/dynamic))
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ mode.refund_threat(dynamic_cost)
+ mode.log_threat("Wizard refunded [dynamic_cost] on [name].")
for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list)
if(initial(S.name) == initial(aspell.name))
spell_levels = aspell.spell_level
@@ -123,6 +141,10 @@
name = "Disintegrate"
spell_type = /obj/effect/proc_holder/spell/targeted/touch/disintegrate
+/datum/spellbook_entry/nuclearfist
+ name = "Nuclear Fist"
+ spell_type = /obj/effect/proc_holder/spell/targeted/touch/nuclear_fist
+
/datum/spellbook_entry/disabletech
name = "Disable Tech"
spell_type = /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech
@@ -285,6 +307,8 @@
name = "Staff of Change"
desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself."
item_path = /obj/item/gun/magic/staff/change
+ dynamic_requirement = 60
+ dynamic_cost = 20
/datum/spellbook_entry/item/staffanimation
name = "Staff of Animation"
@@ -369,6 +393,14 @@
desc = "A magical contract binding an apprentice wizard to your service, using it will summon them to your side."
item_path = /obj/item/antag_spawner/contract
category = "Assistance"
+ dynamic_requirement = 50
+ dynamic_cost = 10
+
+/datum/spellbook_entry/item/plasmafist
+ name = "Plasma Fist"
+ desc = "A forbidden martial art designed on the surging power of plasma. Use it to harness the ancient power."
+ item_path = /obj/item/book/granter/martial/plasma_fist
+ cost = 3
/datum/spellbook_entry/item/guardian
name = "Guardian Deck"
@@ -388,6 +420,11 @@
item_path = /obj/item/antag_spawner/slaughter_demon
limit = 3
category = "Assistance"
+ dynamic_requirement = 60
+
+/datum/spellbook_entry/item/bloodbottle/New()
+ ..()
+ dynamic_cost = CONFIG_GET(keyed_list/dynamic_cost)["slaughter_demon"]
/datum/spellbook_entry/item/hugbottle
name = "Bottle of Tickles"
@@ -402,6 +439,11 @@
cost = 1 //non-destructive; it's just a jape, sibling!
limit = 3
category = "Assistance"
+ dynamic_requirement = 40
+
+/datum/spellbook_entry/item/hugbottle/New()
+ ..()
+ dynamic_cost = CONFIG_GET(keyed_list/dynamic_cost)["slaughter_demon"]/3
/datum/spellbook_entry/item/mjolnir
name = "Mjolnir"
@@ -465,7 +507,7 @@
if(!SSticker.mode)
return FALSE
else
- return TRUE
+ return ..()
/datum/spellbook_entry/summon/ghosts/Buy(mob/living/carbon/human/user, obj/item/spellbook/book)
SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
@@ -478,11 +520,13 @@
/datum/spellbook_entry/summon/guns
name = "Summon Guns"
desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. Just be careful not to stand still too long!"
+ dynamic_cost = 10
+ dynamic_requirement = 60
/datum/spellbook_entry/summon/guns/IsAvailible()
if(!SSticker.mode) // In case spellbook is placed on map
return 0
- return !CONFIG_GET(flag/no_summon_guns)
+ return (!CONFIG_GET(flag/no_summon_guns) && ..())
/datum/spellbook_entry/summon/guns/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
@@ -490,16 +534,23 @@
active = 1
playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1)
to_chat(user, "You have cast summon guns!")
+ if(istype(SSticker.mode,/datum/game_mode/dynamic))
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ var/threat_spent = dynamic_cost
+ mode.spend_threat(threat_spent)
+ mode.log_threat("Wizard spent [threat_spent] on summon guns.")
return 1
/datum/spellbook_entry/summon/magic
name = "Summon Magic"
desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time."
+ dynamic_cost = 10
+ dynamic_requirement = 60
/datum/spellbook_entry/summon/magic/IsAvailible()
if(!SSticker.mode) // In case spellbook is placed on map
return 0
- return !CONFIG_GET(flag/no_summon_magic)
+ return (!CONFIG_GET(flag/no_summon_guns) && ..())
/datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
@@ -507,21 +558,33 @@
active = 1
playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1)
to_chat(user, "You have cast summon magic!")
+ if(istype(SSticker.mode,/datum/game_mode/dynamic))
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ var/threat_spent = dynamic_cost
+ mode.spend_threat(threat_spent)
+ mode.log_threat("Wizard spent [threat_spent] on summon magic.")
return 1
/datum/spellbook_entry/summon/events
name = "Summon Events"
desc = "Give Murphy's law a little push and replace all events with special wizard ones that will confound and confuse everyone. Multiple castings increase the rate of these events."
+ dynamic_cost = 20
+ dynamic_requirement = 60
var/times = 0
/datum/spellbook_entry/summon/events/IsAvailible()
if(!SSticker.mode) // In case spellbook is placed on map
return 0
- return !CONFIG_GET(flag/no_summon_events)
+ return (!CONFIG_GET(flag/no_summon_events) && ..())
/datum/spellbook_entry/summon/events/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
summonevents()
+ if(istype(SSticker.mode,/datum/game_mode/dynamic) && times == 0)
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ var/threat_spent = dynamic_cost
+ mode.spend_threat(threat_spent)
+ mode.log_threat("Wizard spent [threat_spent] on summon events.")
times++
playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1)
to_chat(user, "You have cast summon events.")
@@ -549,11 +612,11 @@
var/list/categories = list()
/obj/item/spellbook/examine(mob/user)
- ..()
+ . = ..()
if(owner)
- to_chat(user, "There is a small signature on the front cover: \"[owner]\".")
+ . += "There is a small signature on the front cover: \"[owner]\"."
else
- to_chat(user, "It appears to have no author.")
+ . += "It appears to have no author."
/obj/item/spellbook/Initialize()
. = ..()
@@ -626,16 +689,16 @@
dat += {"
-
+ body { font-size: 80%; font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif; }
+ ul#tabs { list-style-type: none; margin: 30px 0 0 0; padding: 0 0 0.3em 0; }
+ ul#tabs li { display: inline; }
+ ul#tabs li a { color: #42454a; background-color: #dedbde; border: 1px solid #c9c3ba; border-bottom: none; padding: 0.3em; text-decoration: none; }
+ ul#tabs li a:hover { background-color: #f1f0ee; }
+ ul#tabs li a.selected { color: #000; background-color: #f1f0ee; font-weight: bold; padding: 0.7em 0.3em 0.38em 0.3em; }
+ div.tabContent { border: 1px solid #c9c3ba; padding: 0.5em; background-color: #f1f0ee; }
+ div.tabContent.hide { display: none; }
+
+
"}
dat += {"[content]