From d1411a8eeebbc119d34c4077d7bf63ad0d83faec Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 11 Dec 2018 01:09:59 -0800 Subject: [PATCH] [READY]MultiZ stuff - tile atmos, movement backend, falling backend, etc etc - Electric boogaloo (#40428) Basic multiZ mob movement procs (Observers can always move) Open space, showing what things are below it, and everything that entails. No complex support for dynamic generation just yet. Decide how openspace should look :/ Atoms falling through open space (NO MOB SUPPORT/DAMAGE/ANYTHING YET.) //CANCELLED FOR ANOTHER PR - [ ] Being able to see upwards? Downwards is going to be handled by open space. MultiZ tile atmospherics - EDIT: Working demo! https://puu.sh/B7mUs/3f6274740f.mp4 Bugtest the heck out of this trainwreck. --- _maps/map_files/debug/multiz.dmm | 10082 ++++++++++++++++ _maps/multiz_debug.dm | 1 + _maps/multiz_debug.json | 6 + code/__DEFINES/atmospherics.dm | 2 + code/__DEFINES/components.dm | 2 + code/__DEFINES/layers.dm | 13 +- code/_globalvars/lists/mapping.dm | 12 +- code/_onclick/hud/plane_master.dm | 22 + code/game/atoms.dm | 7 + code/game/atoms_movable.dm | 45 + code/game/objects/effects/effects.dm | 3 + code/game/objects/structures/stairs.dm | 111 + code/game/turfs/open.dm | 51 +- code/game/turfs/openspace/openspace.dm | 108 + code/game/turfs/space/space.dm | 1 - code/game/turfs/turf.dm | 67 +- .../environmental/LINDA_system.dm | 53 +- .../environmental/LINDA_turf_tile.dm | 3 +- .../space_management/multiz_helpers.dm | 47 + code/modules/mob/dead/observer/observer.dm | 1 + .../mob/dead/observer/observer_movement.dm | 2 + code/modules/mob/living/living.dm | 9 + code/modules/mob/living/living_movement.dm | 6 + code/modules/mob/mob_movement.dm | 32 + code/modules/shuttle/shuttle.dm | 3 + config/maps.txt | 3 + icons/obj/stairs.dmi | Bin 0 -> 4929 bytes icons/turf/floors.dmi | Bin 311410 -> 311456 bytes tgstation.dme | 5 + 29 files changed, 10633 insertions(+), 64 deletions(-) create mode 100644 _maps/map_files/debug/multiz.dmm create mode 100644 _maps/multiz_debug.dm create mode 100644 _maps/multiz_debug.json create mode 100644 code/game/objects/structures/stairs.dm create mode 100644 code/game/turfs/openspace/openspace.dm create mode 100644 code/modules/mapping/space_management/multiz_helpers.dm create mode 100644 code/modules/mob/dead/observer/observer_movement.dm create mode 100644 icons/obj/stairs.dmi diff --git a/_maps/map_files/debug/multiz.dmm b/_maps/map_files/debug/multiz.dmm new file mode 100644 index 000000000000..a228f2b1b328 --- /dev/null +++ b/_maps/map_files/debug/multiz.dmm @@ -0,0 +1,10082 @@ +//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, +/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, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/space, +/area/space/nearstation) +"ao" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/space, +/area/space/nearstation) +"ap" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/machinery/power/apc{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/closet/secure_closet/engineering_electrical, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"aq" = ( +/obj/machinery/computer/monitor, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"ar" = ( +/obj/structure/closet/secure_closet/engineering_welding, +/turf/open/floor/plating, +/area/engine/engineering) +"as" = ( +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"at" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Gravity Generator APC"; + pixel_y = 25 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"au" = ( +/turf/open/openspace, +/area/security) +"av" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/openspace, +/area/security) +"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/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/space, +/area/space/nearstation) +"aB" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/space, +/area/space/nearstation) +"aC" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/openspace, +/area/security) +"aD" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"aE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"aF" = ( +/turf/open/floor/plating, +/area/engine/engineering) +"aG" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"aH" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"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/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/space, +/area/space/nearstation) +"aR" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space, +/area/space/nearstation) +"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 = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"aU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"aV" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"aW" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"aX" = ( +/obj/machinery/gravity_generator/main/station, +/turf/open/openspace, +/area/security) +"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, +/turf/open/floor/plating, +/area/engine/engineering) +"be" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"bf" = ( +/obj/structure/closet/secure_closet/engineering_chief, +/turf/open/floor/plating, +/area/engine/engineering) +"bg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/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/power/apc{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/light, +/obj/structure/table, +/obj/item/analyzer, +/obj/item/wrench, +/turf/open/floor/plating, +/area/engine/atmos) +"bk" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/engine/atmos) +"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{ + 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/wirecutters/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/hallway/primary/central) +"bt" = ( +/obj/machinery/door/airlock, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/engine/atmos) +"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/door/airlock, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"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 = -24 + }, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/structure/closet/jcloset, +/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/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"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/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/machinery/power/apc{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/closet/secure_closet/captains, +/turf/open/floor/plasteel{ + dir = 8 + }, +/area/bridge) +"bH" = ( +/obj/structure/table, +/obj/item/ammo_box/c10mm, +/obj/item/gun/ballistic, +/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/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) +"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-2" + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"bP" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"bQ" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"bR" = ( +/obj/machinery/vending/cola, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"bS" = ( +/obj/machinery/vending/snack, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"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 = -24 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/closet/firecloset/full, +/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/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"cb" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/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/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/bridge) +"ce" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel{ + dir = 8 + }, +/area/bridge) +"cf" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/bridge) +"cg" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel{ + dir = 4 + }, +/area/bridge) +"ch" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/bridge) +"ci" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"cj" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"ck" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/closed/wall/r_wall, +/area/hallway/secondary/entry) +"cl" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel{ + dir = 8 + }, +/area/hallway/secondary/entry) +"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) +"cr" = ( +/obj/machinery/light, +/turf/open/floor/plasteel{ + dir = 6 + }, +/area/bridge) +"cs" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/closed/wall/r_wall, +/area/bridge) +"ct" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light{ + dir = 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/door/airlock, +/turf/open/floor/plasteel, +/area/bridge) +"cx" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"cy" = ( +/turf/open/floor/plasteel{ + dir = 8 + }, +/area/hallway/secondary/entry) +"cz" = ( +/turf/open/floor/plating, +/area/hallway/secondary/entry) +"cA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"cB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel{ + dir = 4 + }, +/area/hallway/primary/central) +"cC" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel{ + dir = 1 + }, +/area/hallway/primary/central) +"cD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + dir = 1 + }, +/area/hallway/primary/central) +"cE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel{ + dir = 1 + }, +/area/hallway/primary/central) +"cF" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"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/structure/cable{ + icon_state = "1-2" + }, +/turf/closed/wall/r_wall, +/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/structure/cable{ + icon_state = "1-2" + }, +/turf/closed/wall/r_wall, +/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/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 8; + pixel_x = -24 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel, +/area/construction) +"cX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/construction) +"cY" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/construction) +"cZ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/ladder, +/turf/open/floor/plasteel, +/area/construction) +"da" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/obj/machinery/power/apc{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/storage/primary) +"db" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plating, +/area/storage/primary) +"dc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"dd" = ( +/turf/open/floor/plasteel{ + icon_state = "L1" + }, +/area/storage/primary) +"de" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel{ + icon_state = "L3" + }, +/area/storage/primary) +"df" = ( +/turf/open/floor/plasteel{ + icon_state = "L5" + }, +/area/storage/primary) +"dg" = ( +/turf/open/floor/plasteel{ + icon_state = "L7" + }, +/area/storage/primary) +"dh" = ( +/turf/open/floor/plasteel{ + icon_state = "L9" + }, +/area/storage/primary) +"di" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel{ + icon_state = "L11" + }, +/area/storage/primary) +"dj" = ( +/turf/open/floor/plasteel{ + icon_state = "L13" + }, +/area/storage/primary) +"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" = ( +/turf/open/floor/plating, +/area/construction) +"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" = ( +/turf/open/floor/plasteel{ + icon_state = "L2" + }, +/area/storage/primary) +"dr" = ( +/turf/open/floor/plasteel{ + icon_state = "L4" + }, +/area/storage/primary) +"ds" = ( +/turf/open/floor/plasteel{ + icon_state = "L6" + }, +/area/storage/primary) +"dt" = ( +/turf/open/floor/plasteel{ + icon_state = "L8" + }, +/area/storage/primary) +"du" = ( +/turf/open/floor/plasteel{ + icon_state = "L10" + }, +/area/storage/primary) +"dv" = ( +/turf/open/floor/plasteel{ + icon_state = "L12" + }, +/area/storage/primary) +"dw" = ( +/turf/open/floor/plasteel{ + icon_state = "L14" + }, +/area/storage/primary) +"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{ + icon_state = "ast_warn"; + dir = 1 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"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) +"dK" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/construction) +"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" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"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/engine/atmos) +"dY" = ( +/turf/open/floor/plasteel, +/area/engine/atmos) +"dZ" = ( +/obj/machinery/door/airlock{ + req_access_txt = "1" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"ea" = ( +/turf/open/floor/plasteel{ + dir = 8 + }, +/area/bridge) +"eb" = ( +/turf/open/floor/plasteel, +/area/bridge) +"ec" = ( +/turf/open/floor/plasteel{ + dir = 4 + }, +/area/bridge) +"ed" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plasteel, +/area/engine/atmos) +"ee" = ( +/turf/open/floor/plasteel{ + dir = 9 + }, +/area/hallway/secondary/entry) +"ef" = ( +/turf/open/floor/plasteel{ + dir = 1 + }, +/area/hallway/secondary/entry) +"eg" = ( +/turf/open/floor/plating, +/area/hallway/primary/central) +"eh" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel{ + dir = 10 + }, +/area/bridge) +"ei" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel{ + dir = 6 + }, +/area/bridge) +"ej" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"ek" = ( +/turf/open/floor/plasteel{ + dir = 4 + }, +/area/hallway/primary/central) +"em" = ( +/turf/open/floor/plasteel{ + dir = 1 + }, +/area/hallway/primary/central) +"en" = ( +/turf/open/floor/plasteel{ + dir = 10 + }, +/area/hallway/secondary/entry) +"eo" = ( +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"ep" = ( +/turf/open/floor/plasteel, +/area/construction) +"eq" = ( +/turf/open/floor/plasteel{ + icon_state = "L3" + }, +/area/storage/primary) +"er" = ( +/turf/open/floor/plasteel{ + icon_state = "L11" + }, +/area/storage/primary) +"es" = ( +/obj/effect/turf_decal/stripes/asteroid/corner, +/turf/open/floor/plasteel, +/area/construction) +"et" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction) +"eu" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plasteel, +/area/construction) +"ev" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"ew" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"ex" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/storage/primary) +"ey" = ( +/obj/effect/turf_decal/stripes/asteroid/corner{ + icon_state = "ast_warn_corner"; + dir = 1 + }, +/obj/structure/ladder, +/turf/open/floor/plasteel, +/area/construction) +"ez" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel{ + dir = 8 + }, +/area/hallway/secondary/entry) +"eC" = ( +/turf/open/openspace, +/area/maintenance/department/bridge) +"eD" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plasteel, +/area/engine/engineering) +"eE" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plating, +/area/engine/atmos) +"eF" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/engine/atmos) +"eG" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"eH" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/construction) +"eI" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction) +"eJ" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/construction) +"eK" = ( +/obj/effect/turf_decal/stripes/asteroid/corner{ + icon_state = "ast_warn_corner"; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/construction) +"eL" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/construction) +"eM" = ( +/obj/effect/turf_decal/stripes/asteroid/corner{ + icon_state = "ast_warn_corner"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction) +"eN" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"eO" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plasteel, +/area/bridge) +"eP" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"eQ" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"eR" = ( +/obj/effect/turf_decal/stripes/asteroid/corner{ + icon_state = "ast_warn_corner"; + dir = 8 + }, +/obj/effect/turf_decal/stripes/asteroid/corner{ + icon_state = "ast_warn_corner"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"eS" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 1 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"eT" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"eU" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"eV" = ( +/obj/structure/ladder, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"eW" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"eX" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"eY" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"fc" = ( +/obj/item/pizzabox, +/turf/open/floor/plasteel{ + icon_state = "L2" + }, +/area/storage/primary) +"fd" = ( +/obj/item/pizzabox, +/turf/open/floor/plasteel{ + icon_state = "L4" + }, +/area/storage/primary) +"fe" = ( +/obj/item/pizzabox, +/turf/open/floor/plasteel{ + icon_state = "L6" + }, +/area/storage/primary) +"ff" = ( +/obj/item/pizzabox, +/turf/open/floor/plasteel{ + icon_state = "L8" + }, +/area/storage/primary) +"fg" = ( +/obj/item/pizzabox, +/turf/open/floor/plasteel{ + icon_state = "L10" + }, +/area/storage/primary) +"fh" = ( +/obj/item/pizzabox, +/turf/open/floor/plasteel{ + icon_state = "L12" + }, +/area/storage/primary) +"fi" = ( +/obj/item/pizzabox, +/turf/open/floor/plasteel{ + icon_state = "L14" + }, +/area/storage/primary) +"fj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/item/pizzabox, +/turf/open/floor/plasteel, +/area/storage/primary) +"fk" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plating, +/area/construction) +"fl" = ( +/obj/effect/turf_decal/stripes/line, +/turf/closed/wall/r_wall, +/area/storage/primary) +"fn" = ( +/turf/closed/wall/r_wall, +/area/space) +"fo" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 4 + }, +/obj/machinery/door/airlock, +/turf/open/floor/plasteel, +/area/hallway/primary/central) + +(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 +af +af +af +af +af +af +af +af +af +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 +bj +bs +bB +ca +bO +bO +bO +bO +bO +cO +cW +dm +dy +dy +dy +dy +dy +dy +dy +dy +dm +dK +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 +af +ah +am +ax +aw +ba +bk +bt +bC +cb +bN +bN +bC +bN +bN +cP +cX +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +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 +bD +cc +bE +bE +cA +bE +bE +cQ +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +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 +cc +bE +bE +cA +bE +bE +cQ +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +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 +cc +co +bE +cA +bE +bE +cN +cY +dn +dn +dn +dn +cN +cN +cN +dn +dn +dn +dL +cN +af +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 +cd +bu +bu +cB +bE +bE +cR +cY +dn +dn +dn +dn +cN +fk +cN +dn +dn +dn +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 +bG +ce +cp +cv +cC +bE +bE +cR +cY +dn +dn +dn +dn +cN +dn +cN +dn +dn +dn +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 +aQ +ai +ag +bv +bH +cf +eb +bv +cD +bE +bE +cR +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +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 +ai +ao +aA +aR +ai +ag +bv +bI +cf +eb +bu +cD +bE +bE +cN +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +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 +aB +ag +ag +ag +bv +bJ +cf +eb +cw +cD +bE +bE +cQ +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +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 +aB +ag +ac +ac +bv +bK +cf +eb +bu +cD +bE +bE +cQ +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +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 +dZ +aj +ac +ac +bv +bL +cf +eb +bv +cD +bE +bE +cN +cZ +do +dz +dz +dz +cN +dz +dz +dz +dz +do +dM +cN +af +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 +aD +aj +ac +ac +bu +bM +cg +cr +bu +cD +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 +aD +aj +aj +aj +bu +bu +ch +cs +cs +cE +bO +bO +cT +da +dp +dl +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 +aD +aS +bd +bo +bw +bN +ci +ct +bN +cF +bN +bN +cU +db +dl +dl +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 +aE +aT +be +be +bx +bO +cj +bE +bE +cA +bE +bE +cS +dc +dc +dA +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 +aF +aD +bf +bp +aj +bP +cc +bE +bE +cA +bE +bE +cS +dd +fc +dB +dl +dE +dH +dI +dB +cS +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 +af +ak +ak +ak +aU +ak +ak +ak +bQ +cc +bE +bE +cA +bE +bE +cS +de +fd +fj +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 +as +aG +aV +bg +bq +ak +bR +cc +bE +bE +cA +bE +bE +cV +df +fe +fj +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 +aH +aW +bh +br +ak +bS +cc +bE +bE +cA +bE +bE +cV +dg +ff +fj +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 +cc +co +bE +cA +bE +bE +cV +dh +fg +fj +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 +ck +by +cx +cG +by +by +by +di +fh +fj +dl +dE +dH +dI +fl +cS +dE +dJ +dQ +cS +af +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 +cy +cy +cH +cI +cJ +by +dj +fi +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 +af +ak +dV +aK +dV +bi +dV +by +bV +eo +eo +eo +eo +eo +cK +by +dk +dk +dC +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 +dl +dl +dl +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 +dl +dx +dl +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 +cn +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 +af +af +af +af +af +af +af +af +af +by +cz +by +af +af +af +af +af +af +af +af +af +af +af +af +af +af +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 +cn +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 +af +af +af +af +af +af +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 +ah +ah +ah +ah +ah +ah +ah +bA +eg +eg +eg +eg +eg +bA +cN +cN +cN +cN +cN +cN +cN +cN +cN +cN +cN +cN +cN +cN +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 +af +ah +aw +aw +eE +aw +dY +bA +bE +bE +bE +bE +bE +bE +bE +cN +es +eI +eI +eI +eI +eI +eI +eI +eI +eI +eI +eK +cN +af +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 +ah +aw +aw +aw +dY +dY +dY +bE +bE +bE +bE +bE +bE +bE +cN +eu +au +au +au +au +au +au +au +au +au +au +eL +cN +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 +ah +aw +aw +dX +dX +dY +dY +bE +bE +bE +bE +bE +bE +bE +ep +eu +au +au +au +au +au +au +au +au +au +au +eL +cN +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 +ah +aw +dY +dY +dY +dY +dY +bE +bE +bE +bE +bE +bE +bE +ep +eu +au +au +au +au +au +au +au +au +au +au +eL +cN +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 +ah +dY +dY +dY +dY +dY +ah +bE +bE +co +bE +bE +bE +bE +ep +eu +au +au +au +au +cN +cN +cN +au +au +au +eL +cN +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 +ah +eF +ed +ed +eF +ah +bu +bu +bv +bu +bu +ek +bE +bE +ep +eu +au +au +au +au +au +av +au +au +au +au +eL +cN +af +ad +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(20,1,2) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +au +au +au +au +au +au +au +au +bu +ea +ea +eh +bu +em +bE +bE +ep +eu +au +au +au +au +au +au +au +au +au +au +eL +cN +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 +au +au +au +au +au +au +au +au +bv +eb +eb +eb +bv +em +bE +bE +ep +eu +au +au +au +au +au +au +au +au +au +au +eL +cN +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 +au +au +au +au +au +au +au +au +eO +eb +eb +eb +eb +em +bE +bE +ep +eu +au +au +au +au +au +au +au +au +au +au +eL +cN +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 +au +au +au +au +au +au +au +au +eO +eb +eb +eb +eb +em +bE +bE +ep +eu +au +au +au +au +au +au +au +au +au +au +eL +cN +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 +au +au +au +au +au +au +au +au +eO +eb +eb +eb +eb +em +bE +bE +ep +eu +au +au +au +au +au +au +au +au +au +au +eL +cN +af +ad +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(25,1,2) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +au +au +au +au +au +au +au +au +bv +eb +eb +eb +bv +em +bE +bE +et +ey +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eH +eM +cN +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 +au +au +au +au +au +au +au +au +bu +ec +ec +ei +bu +em +bE +bE +cS +dJ +dJ +dJ +dJ +dJ +dJ +dJ +cS +cS +cS +cS +cS +cS +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 +aj +eG +eD +eD +eG +aj +bu +bu +bv +bu +bu +em +bE +bE +ev +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +ev +dJ +cS +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 +aj +dW +dW +dW +dW +dW +aj +bE +bE +ej +bE +bE +bE +bE +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +cS +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 +aj +dW +dW +dW +dW +dW +dW +bE +bE +bE +bE +bE +bE +bE +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +cS +af +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 +aj +dW +eN +dW +dW +dW +dW +bE +bE +bE +bE +bE +bE +bE +dJ +dd +dq +dJ +ex +ex +ex +ex +ex +ex +ex +ex +ex +cS +af +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 +ak +dV +ak +dV +dV +dV +dV +bE +bE +bE +bE +bE +bE +bE +dJ +eq +dr +dJ +ex +au +au +au +au +au +au +au +au +au +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 +af +ak +dV +dV +dV +dV +dV +dV +bE +bE +bE +bE +bE +bE +bE +dJ +df +ds +dJ +ex +au +au +au +au +au +au +au +au +au +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 +ak +dV +dV +dV +dV +dV +ak +bE +bE +bE +bE +bE +bE +bE +dJ +dg +dt +dJ +ex +au +au +au +au +au +au +au +au +au +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 +ak +dV +dV +dV +dV +dV +ak +bE +bE +co +bE +bE +bE +bE +dJ +dh +du +dJ +ex +au +au +au +au +au +au +au +au +au +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 +ak +dV +dV +dV +dV +dV +by +by +by +by +eo +by +by +by +by +er +dv +dJ +ex +au +au +au +aC +cS +au +au +au +au +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 +ak +dV +aJ +aK +aL +dV +by +ee +cy +ez +cy +cy +cy +en +by +dj +dw +dJ +ex +au +au +au +au +au +au +au +au +au +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 +ak +dV +aK +dV +bi +dV +by +ef +eo +eo +eo +eo +eo +eo +by +dJ +dJ +dJ +ex +au +au +au +au +au +au +au +au +au +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 +af +ak +dV +aL +aK +aJ +dV +by +ef +eo +eo +eo +eo +eo +eo +by +dJ +dJ +dJ +ex +au +au +au +au +au +au +au +au +au +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 +ak +dV +dV +aY +dV +dV +by +ef +eo +eo +cy +eo +eo +eo +by +dJ +ew +dJ +ex +au +au +au +au +au +au +au +au +au +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 +ak +ak +ak +ak +ak +ak +by +by +cz +by +by +by +cz +by +by +cS +cS +cS +cS +au +au +au +au +au +au +au +au +au +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 +af +af +af +af +af +af +af +af +af +by +cz +by +af +af +af +af +af +af +af +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 +by +by +by +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 +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(12,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(13,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(14,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(15,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(16,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(17,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(18,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(19,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +fn +fn +fn +fn +fn +fn +fn +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(20,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(21,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(22,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(23,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +fn +au +au +au +au +eP +eT +eT +eT +eT +eT +eW +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(24,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +fn +au +au +au +au +eQ +bE +bE +bE +bE +bE +eX +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(25,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +fn +au +au +au +au +eQ +bE +bE +bE +eV +bE +eX +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(26,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +dG +fo +dS +dS +dS +dS +eR +bE +bE +bA +bE +bE +eX +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(27,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +fn +fn +fn +fn +fn +fn +fn +fn +au +au +au +au +eQ +bE +bE +ej +bE +bE +eX +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(28,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +eQ +bE +bE +bE +bE +bE +eX +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(29,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +eS +eU +eU +eU +eU +eU +eY +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(30,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(31,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(32,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(33,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(34,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(35,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(36,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(37,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(38,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(39,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(40,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(41,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +au +fn +au +au +au +au +au +aa +aa +aa +aa +aa +"} +(42,1,3) = {" +aa +aa +aa +aa +aa +au +au +au +au +au +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +fn +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 +aX +au +au +au +au +au +au +au +au +au +au +au +au +au +au +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/multiz_debug.dm b/_maps/multiz_debug.dm new file mode 100644 index 000000000000..0521fef59d30 --- /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 000000000000..6e31e510179b --- /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/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 11b742a9152e..a873e22d2ce4 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -147,7 +147,9 @@ #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 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 diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 96518e3912a8..fce08761514f 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -103,6 +103,8 @@ // /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) diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 8891c06f750b..08ffee272c0f 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 @@ -82,11 +83,15 @@ #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 BYOND_LIGHTING_PLANE 18 +#define BYOND_LIGHTING_LAYER 18 + +#define CAMERA_STATIC_PLANE 19 +#define CAMERA_STATIC_LAYER 19 -#define CAMERA_STATIC_PLANE 18 -#define CAMERA_STATIC_LAYER 18 //HUD layer defines #define FULLSCREEN_PLANE 19 diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index e5dd5d04f524..3ad960e2c16a 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 diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index 5bdf61f75d33..6e8b3ac6d73d 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", border = 5, size = -10) + filters += filter(type = "drop_shadow", color = "#04080FAA", border = 5, size = -15) + filters += filter(type = "drop_shadow", color = "#04080FAA", border = 5, 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, _border, _offset = 0, _x = 0, _y = 0, _color = "#04080FAA") + filters += filter(type = "drop_shadow", x = _x, y = _y, color = _color, size = _size, offset = _offset, border = _border) + +/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/game/atoms.dm b/code/game/atoms.dm index c51e47a9e860..7a5887e15dcf 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 @@ -728,3 +732,6 @@ Proc for attack log creation, because really why not /atom/movable/proc/get_filter(name) if(filter_data && filter_data[name]) return filters[filter_data.Find(name)] + +/atom/proc/intercept_zImpact(atom/movable/AM, levels = 1) + return FALSE diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 160ea43a4f41..3075b0726204 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -36,6 +36,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/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index ccde9c2254d2..6057d1b41806 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -58,6 +58,9 @@ /obj/effect/abstract/singularity_act() return +/obj/effect/abstract/has_gravity(turf/T) + return FALSE + /obj/effect/dummy/singularity_pull() return diff --git a/code/game/objects/structures/stairs.dm b/code/game/objects/structures/stairs.dm new file mode 100644 index 000000000000..e28f6ef0ec69 --- /dev/null +++ b/code/game/objects/structures/stairs.dm @@ -0,0 +1,111 @@ +#define STAIR_TERMINATOR_AUTOMATIC 0 +#define STAIR_TERMINATOR_NO 1 +#define STAIR_TERMINATOR_YES 2 + +/obj/structure/stairs + name = "stairs" + icon = 'icons/obj/stairs.dmi' + icon_state = "stairs" + anchored = TRUE + //dir = direction of travel to go upwards + + var/force_open_above = FALSE + var/terminator_mode = STAIR_TERMINATOR_AUTOMATIC + var/datum/component/redirect/multiz_signal_listener + +/obj/structure/stairs/Initialize(mapload) + if(force_open_above) + force_open_above() + build_signal_listener() + update_surrounding() + return ..() + +/obj/structure/stairs/Destroy() + QDEL_NULL(multiz_signal_listener) + 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(isliving(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. + AM.forceMove(target) + +/obj/structure/stairs/vv_edit_var(var_name, var_value) + . = ..() + if(.) + if(var_name == NAMEOF(src, force_open_above)) + if(!var_value) + QDEL_NULL(multiz_signal_listener) + else + build_signal_listener() + force_open_above() + +/obj/structure/stairs/proc/build_signal_listener() + QDEL_NULL(multiz_signal_listener) + var/turf/open/openspace/T = get_step_multiz(get_turf(src), UP) + multiz_signal_listener = T.AddComponent(/datum/component/redirect, list(COMSIG_TURF_MULTIZ_NEW = CALLBACK(src, .proc/on_multiz_new))) + +/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) + return isTerminator() + +/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/turfs/open.dm b/code/game/turfs/open.dm index a9699fdc3653..5308b0b04eda 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -16,6 +16,22 @@ if(wet) AddComponent(/datum/component/wet_floor, wet, INFINITY, 0, INFINITY, TRUE) +//direction is direction of travel of A +/turf/open/zPassIn(atom/movable/A, direction, turf/source) + return (direction == DOWN) + +//direction is direction of travel of A +/turf/open/zPassOut(atom/movable/A, direction, turf/destination) + return (direction == UP) + +//direction is direction of travel of air +/turf/open/zAirIn(direction, turf/source) + return (direction == DOWN) + +//direction is direction of travel of air +/turf/open/zAirOut(direction, turf/source) + return (direction == UP) + /turf/open/indestructible name = "floor" icon = 'icons/turf/floors.dmi' @@ -157,43 +173,14 @@ update_visuals() current_cycle = times_fired - - //cache some vars - var/list/atmos_adjacent_turfs = src.atmos_adjacent_turfs - - for(var/direction in GLOB.cardinals) - var/turf/open/enemy_tile = get_step(src, direction) - if(!istype(enemy_tile)) - if (atmos_adjacent_turfs) - atmos_adjacent_turfs -= enemy_tile - continue + CalculateAdjacentTurfs() + for(var/i in atmos_adjacent_turfs) + var/turf/open/enemy_tile = i var/datum/gas_mixture/enemy_air = enemy_tile.return_air() - - //only check this turf, if it didn't check us when it was initalized - if(enemy_tile.current_cycle < times_fired) - if(CANATMOSPASS(src, enemy_tile)) - LAZYINITLIST(atmos_adjacent_turfs) - LAZYINITLIST(enemy_tile.atmos_adjacent_turfs) - atmos_adjacent_turfs[enemy_tile] = TRUE - enemy_tile.atmos_adjacent_turfs[src] = TRUE - else - if (atmos_adjacent_turfs) - atmos_adjacent_turfs -= enemy_tile - if (enemy_tile.atmos_adjacent_turfs) - enemy_tile.atmos_adjacent_turfs -= src - UNSETEMPTY(enemy_tile.atmos_adjacent_turfs) - continue - else - if (!atmos_adjacent_turfs || !atmos_adjacent_turfs[enemy_tile]) - continue - if(!excited && air.compare(enemy_air)) //testing("Active turf found. Return value of compare(): [is_active]") excited = TRUE SSair.active_turfs |= src - UNSETEMPTY(atmos_adjacent_turfs) - if (atmos_adjacent_turfs) - src.atmos_adjacent_turfs = atmos_adjacent_turfs /turf/open/proc/GetHeatCapacity() . = air.heat_capacity() diff --git a/code/game/turfs/openspace/openspace.dm b/code/game/turfs/openspace/openspace.dm new file mode 100644 index 000000000000..0f408b83d21d --- /dev/null +++ b/code/game/turfs/openspace/openspace.dm @@ -0,0 +1,108 @@ +/turf/open/openspace + name = "open space" + desc = "Watch your step!" + icon_state = "grey" + baseturfs = /turf/open/openspace + CanAtmosPassVertical = ATMOS_PASS_YES + plane = FLOOR_OPENSPACE_PLANE + layer = OPENSPACE_LAYER + //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() + . = ..() + 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) + 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.") diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 9ebe8f3c190c..3e2f90c7c94a 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -19,7 +19,6 @@ dynamic_lighting = DYNAMIC_LIGHTING_DISABLED bullet_bounce_sound = null - /turf/open/space/basic/New() //Do not convert to Initialize //This is used to optimize the map loader return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index c672f00fe9ed..d3c49ab8b34c 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 @@ -68,6 +68,15 @@ 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 @@ -83,6 +92,12 @@ 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,54 @@ 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) + for(var/i in contents) + var/atom/thing = i + if(thing.intercept_zImpact(A, levels)) + return FALSE + 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.visible_message("[A] falls through [src]!") + A.zfalling = TRUE + A.forceMove(target) + A.zfalling = FALSE + target.zImpact(A, levels) + return TRUE + /turf/proc/handleRCL(obj/item/twohanded/rcl/C, mob/user) if(C.loaded) for(var/obj/structure/cable/LC in src) @@ -193,6 +256,8 @@ var/obj/O = AM 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/atmospherics/environmental/LINDA_system.dm b/code/modules/atmospherics/environmental/LINDA_system.dm index 084c35684cd5..828008baa008 100644 --- a/code/modules/atmospherics/environmental/LINDA_system.dm +++ b/code/modules/atmospherics/environmental/LINDA_system.dm @@ -1,4 +1,6 @@ /atom/var/CanAtmosPass = ATMOS_PASS_YES +/atom/var/CanAtmosPassVertical = ATMOS_PASS_YES + /atom/proc/CanAtmosPass(turf/T) switch (CanAtmosPass) if (ATMOS_PASS_PROC) @@ -8,42 +10,45 @@ else return CanAtmosPass -/turf/closed/CanAtmosPass = ATMOS_PASS_NO +/turf/CanAtmosPass = ATMOS_PASS_NO +/turf/CanAtmosPassVertical = ATMOS_PASS_NO /turf/open/CanAtmosPass = ATMOS_PASS_PROC -/turf/open/CanAtmosPass(turf/T) - var/R +/turf/open/CanAtmosPassVertical = ATMOS_PASS_PROC + +/turf/open/CanAtmosPass(turf/T, vertical = FALSE) + var/dir = vertical? get_dir_multiz(src, T) : get_dir(src, T) + var/opp = dir_inverse_multiz(dir) + var/R = FALSE + if(vertical && !(zAirOut(dir, T) && T.zAirIn(dir, src))) + R = TRUE if(blocks_air || T.blocks_air) - R = 1 + R = TRUE for(var/obj/O in contents+T.contents) var/turf/other = (O.loc == src ? T : src) - if(!CANATMOSPASS(O, other)) - R = 1 + if(!(vertical? (CANVERTICALATMOSPASS(O, other)) : (CANATMOSPASS(O, other)))) + R = TRUE if(O.BlockSuperconductivity()) //the direction and open/closed are already checked on CanAtmosPass() so there are no arguments - var/D = get_dir(src, T) - atmos_supeconductivity |= D - D = get_dir(T, src) - T.atmos_supeconductivity |= D - return 0 //no need to keep going, we got all we asked + atmos_supeconductivity |= dir + T.atmos_supeconductivity |= opp + return FALSE //no need to keep going, we got all we asked - atmos_supeconductivity &= ~get_dir(src, T) - T.atmos_supeconductivity &= ~get_dir(T, src) + atmos_supeconductivity &= ~dir + T.atmos_supeconductivity &= ~opp return !R - - /atom/movable/proc/BlockSuperconductivity() // objects that block air and don't let superconductivity act. Only firelocks atm. - return 0 + return FALSE /turf/proc/CalculateAdjacentTurfs() var/list/atmos_adjacent_turfs = src.atmos_adjacent_turfs - for(var/direction in GLOB.cardinals) - var/turf/T = get_step(src, direction) - if(!T) + for(var/direction in GLOB.cardinals_multiz) + var/turf/T = get_step_multiz(src, direction) + if(!isopenturf(T)) continue - if( !(blocks_air || T.blocks_air) && CANATMOSPASS(T, src) ) + if(!(blocks_air || T.blocks_air) && ((direction & (UP|DOWN))? (CANVERTICALATMOSPASS(T, src)) : (CANATMOSPASS(T, src))) ) LAZYINITLIST(atmos_adjacent_turfs) LAZYINITLIST(T.atmos_adjacent_turfs) atmos_adjacent_turfs[T] = TRUE @@ -72,11 +77,13 @@ var/turf/curloc = src - for (var/direction in GLOB.diagonals) + for (var/direction in GLOB.diagonals_multiz) var/matchingDirections = 0 - var/turf/S = get_step(curloc, direction) + var/turf/S = get_step_multiz(curloc, direction) + if(!S) + continue - for (var/checkDirection in GLOB.cardinals) + for (var/checkDirection in GLOB.cardinals_multiz) var/turf/checkTurf = get_step(S, checkDirection) if(!S.atmos_adjacent_turfs || !S.atmos_adjacent_turfs[checkTurf]) continue diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index b88efc6c6826..667dca7fb9ec 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -42,8 +42,7 @@ /turf/open/Destroy() if(active_hotspot) - qdel(active_hotspot) - active_hotspot = null + QDEL_NULL(active_hotspot) // Adds the adjacent turfs to the current atmos processing for(var/T in atmos_adjacent_turfs) SSair.add_to_active(T) diff --git a/code/modules/mapping/space_management/multiz_helpers.dm b/code/modules/mapping/space_management/multiz_helpers.dm new file mode 100644 index 000000000000..04415d0c1fd6 --- /dev/null +++ b/code/modules/mapping/space_management/multiz_helpers.dm @@ -0,0 +1,47 @@ +/proc/get_step_multiz(ref, dir) + if(dir & UP) + dir &= ~UP + return get_step(SSmapping.get_turf_above(get_turf(ref)), dir) + if(dir & DOWN) + dir &= ~DOWN + return get_step(SSmapping.get_turf_below(get_turf(ref)), dir) + return get_step(ref, dir) + +/proc/get_dir_multiz(turf/us, turf/them) + us = get_turf(us) + them = get_turf(them) + if(!us || !them) + return NONE + if(us.z == them.z) + return get_dir(us, them) + else + var/turf/T = us.above() + var/dir = NONE + if(T && (T.z == them.z)) + dir = UP + else + T = us.below() + if(T && (T.z == them.z)) + dir = DOWN + else + return get_dir(us, them) + return (dir | get_dir(us, them)) + +/turf/proc/above() + return get_step_multiz(src, UP) + +/turf/proc/below() + return get_step_multiz(src, DOWN) + +/proc/dir_inverse_multiz(dir) + var/holder = dir & (UP|DOWN) + if((holder == NONE) || (holder == (UP|DOWN))) + return turn(dir, 180) + dir &= ~(UP|DOWN) + dir = turn(dir, 180) + if(holder == UP) + holder = DOWN + else + holder = UP + dir |= holder + return dir diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index a77df079a915..fe9ea2ce29dc 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -15,6 +15,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) see_in_dark = 100 invisibility = INVISIBILITY_OBSERVER hud_type = /datum/hud/ghost + movement_type = GROUND | FLYING var/can_reenter_corpse var/datum/hud/living/carbon/hud = null // hud var/bootime = 0 diff --git a/code/modules/mob/dead/observer/observer_movement.dm b/code/modules/mob/dead/observer/observer_movement.dm new file mode 100644 index 000000000000..7ed0c9d9eecd --- /dev/null +++ b/code/modules/mob/dead/observer/observer_movement.dm @@ -0,0 +1,2 @@ +/mob/dead/observer/canZMove(direction, turf/target) + return TRUE diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index c6e465888a02..93072762a60c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -40,6 +40,15 @@ QDEL_LIST(diseases) return ..() +/mob/living/onZImpact(turf/T, levels) + ZImpactDamage(T, levels) + return ..() + +/mob/living/proc/ZImpactDamage(turf/T, levels) + visible_message("[src] crashes into [T] with a sickening noise!") + adjustBruteLoss((levels * 5) ** 1.5) + Knockdown(levels * 50) + /mob/living/proc/OpenCraftingMenu() return diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm index 16c3aa6050b5..4cf5fd27496b 100644 --- a/code/modules/mob/living/living_movement.dm +++ b/code/modules/mob/living/living_movement.dm @@ -25,3 +25,9 @@ add_movespeed_modifier(MOVESPEED_ID_LIVING_TURF_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = T.slowdown) else remove_movespeed_modifier(MOVESPEED_ID_LIVING_TURF_SPEEDMOD) + +/mob/living/can_zFall(turf/T, levels) + return !(movement_type & FLYING) + +/mob/living/canZMove(dir, turf/target) + return can_zTravel(target, dir) && (movement_type & FLYING) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 6d6ab46ee00c..0488e7da4430 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -373,3 +373,35 @@ if(hud_used && hud_used.static_inventory) for(var/obj/screen/mov_intent/selector in hud_used.static_inventory) selector.update_icon(src) + +/mob/verb/up() + set name = "Move Upwards" + set category = "IC" + + if(zMove(UP, TRUE)) + to_chat(src, "You move upwards.") + +/mob/verb/down() + set name = "Move Down" + set category = "IC" + + if(zMove(DOWN, TRUE)) + to_chat(src, "You move down.") + +/mob/proc/zMove(dir, feedback = FALSE) + if(dir != UP && dir != DOWN) + return FALSE + var/turf/target = get_step_multiz(src, dir) + if(!target) + if(feedback) + to_chat(src, "There's nothing in that direction!") + return FALSE + if(!canZMove(dir, target)) + if(feedback) + to_chat(src, "You couldn't move there!") + return FALSE + forceMove(target) + return TRUE + +/mob/proc/canZMove(direction, turf/target) + return FALSE diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index f9011930bed5..16d09ed952a8 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -33,6 +33,9 @@ else return QDEL_HINT_LETMELIVE +/obj/docking_port/has_gravity(turf/T) + return FALSE + /obj/docking_port/take_damage() return diff --git a/config/maps.txt b/config/maps.txt index 1878a625e354..403151483e5a 100644 --- a/config/maps.txt +++ b/config/maps.txt @@ -42,3 +42,6 @@ endmap map runtimestation endmap + +map multiz_debug +endmap diff --git a/icons/obj/stairs.dmi b/icons/obj/stairs.dmi new file mode 100644 index 0000000000000000000000000000000000000000..615e88f68455f72b4a2f59e35dbfd5123a90fdbd GIT binary patch literal 4929 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 literal 0 HcmV?d00001 diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 518adfc7661dcaa9d0b81d01d1d22600bb5ea283..08783a9f708a690cab71452fc9b81832e663cb6b 100644 GIT binary patch delta 16576 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 MQWTH8`b`87va^?xL%E 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 mUNb)KAU5LX4F9|2CvcRh_g8m=iXvQM| diff --git a/tgstation.dme b/tgstation.dme index 65f5402f717b..7756fc39c746 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -14,6 +14,7 @@ // BEGIN_INCLUDE #include "_maps\_basemap.dm" +#include "_maps\multiz_debug.dm" #include "code\_compile_options.dm" #include "code\world.dm" #include "code\__DEFINES\_globals.dm" @@ -995,6 +996,7 @@ #include "code\game\objects\structures\showcase.dm" #include "code\game\objects\structures\spawner.dm" #include "code\game\objects\structures\spirit_board.dm" +#include "code\game\objects\structures\stairs.dm" #include "code\game\objects\structures\statues.dm" #include "code\game\objects\structures\table_frames.dm" #include "code\game\objects\structures\tables_racks.dm" @@ -1050,6 +1052,7 @@ #include "code\game\turfs\closed.dm" #include "code\game\turfs\open.dm" #include "code\game\turfs\turf.dm" +#include "code\game\turfs\openspace\openspace.dm" #include "code\game\turfs\simulated\chasm.dm" #include "code\game\turfs\simulated\dirtystation.dm" #include "code\game\turfs\simulated\floor.dm" @@ -1782,6 +1785,7 @@ #include "code\modules\mapping\reader.dm" #include "code\modules\mapping\ruins.dm" #include "code\modules\mapping\verify.dm" +#include "code\modules\mapping\space_management\multiz_helpers.dm" #include "code\modules\mapping\space_management\space_level.dm" #include "code\modules\mapping\space_management\space_reservation.dm" #include "code\modules\mapping\space_management\space_transition.dm" @@ -1848,6 +1852,7 @@ #include "code\modules\mob\dead\observer\logout.dm" #include "code\modules\mob\dead\observer\notificationprefs.dm" #include "code\modules\mob\dead\observer\observer.dm" +#include "code\modules\mob\dead\observer\observer_movement.dm" #include "code\modules\mob\dead\observer\say.dm" #include "code\modules\mob\living\blood.dm" #include "code\modules\mob\living\bloodcrawl.dm"