From 18209f9d78d2ef3a5775bb205777258df1be04bf Mon Sep 17 00:00:00 2001
From: Mloc
Date: Sat, 9 May 2015 23:38:46 +0100
Subject: [PATCH 1/9] lighting map changes
Signed-off-by: Mloc
---
maps/exodus-1.dmm | 46 +++++++-------
maps/exodus-2.dmm | 152 ++++++++++++++++++++++++++--------------------
2 files changed, 112 insertions(+), 86 deletions(-)
diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm
index 18a613af27c..5c2853fbab0 100644
--- a/maps/exodus-1.dmm
+++ b/maps/exodus-1.dmm
@@ -333,7 +333,7 @@
"agu" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_3_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
"agv" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hos)
"agw" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
-"agx" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_3"; pixel_x = 0; pixel_y = -25; tag_door = "escape_pod_3_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
+"agx" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_3"; pixel_x = 0; pixel_y = -25; tag_door = "escape_pod_3_hatch"},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
"agy" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod3/station)
"agz" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/escape_pod3/station)
"agA" = (/obj/structure/table/rack,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/security_port)
@@ -1150,12 +1150,12 @@
"awf" = (/obj/item/weapon/stool,/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/crew_quarters/fitness)
"awg" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/simulated/floor,/area/security/prison)
"awh" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/item/clothing/head/soft/orange,/obj/item/clothing/shoes/sandal,/turf/simulated/floor,/area/security/prison)
-"awi" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_1"; pixel_x = -25; pixel_y = 0; tag_door = "escape_pod_1_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
+"awi" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"awj" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"awk" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eva_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = 25; req_access = list(13)},/turf/simulated/floor/plating/airless,/area/maintenance/evahallway)
"awl" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe,/obj/item/clothing/suit/apron/overalls,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
"awm" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
-"awn" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_2"; pixel_x = -25; pixel_y = 0; tag_door = "escape_pod_2_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
+"awn" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"awo" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "eva_airlock"; name = "interior access button"; pixel_x = 0; pixel_y = 25; req_access = list(13)},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/evahallway)
"awp" = (/obj/machinery/seed_storage/garden,/turf/simulated/floor,/area/security/prison)
"awq" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/port)
@@ -1623,10 +1623,10 @@
"aFk" = (/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/shuttle/arrival/station)
"aFl" = (/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"aFm" = (/obj/machinery/computer/arcade,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
-"aFn" = (/obj/structure/closet/wardrobe/black,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"aFn" = (/obj/machinery/requests_console{department = "Arrival shuttle"; pixel_y = -30},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"aFo" = (/obj/structure/closet/wardrobe/xenos,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"aFp" = (/obj/structure/closet/wardrobe/mixed,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
-"aFq" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"aFq" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"aFr" = (/turf/simulated/shuttle/wall{icon_state = "swall7"; dir = 2},/area/shuttle/arrival/station)
"aFs" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 8},/turf/space,/area/shuttle/arrival/station)
"aFt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
@@ -1634,7 +1634,7 @@
"aFv" = (/obj/structure/closet/wardrobe/red,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/checkpoint2)
"aFw" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
"aFx" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals)
-"aFy" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"aFy" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"aFz" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/arrivals)
"aFA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint2)
"aFB" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/arrivals)
@@ -1948,8 +1948,8 @@
"aLx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/chapel/main)
"aLy" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/arrival/station)
"aLz" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/shuttle/arrival/station)
-"aLA" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
-"aLB" = (/obj/machinery/requests_console{department = "Arrival shuttle"; pixel_y = -30},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"aLA" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_1"; pixel_x = -25; pixel_y = 0; tag_door = "escape_pod_1_hatch"},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
+"aLB" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_2"; pixel_x = -25; pixel_y = 0; tag_door = "escape_pod_2_hatch"},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
"aLC" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"; dir = 8},/turf/space,/area/shuttle/arrival/station)
"aLD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
"aLE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/secondary/entry/port)
@@ -4674,7 +4674,7 @@
"bLT" = (/turf/simulated/floor/airless,/area/rnd/test_area)
"bLU" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/airless,/area/rnd/test_area)
"bLV" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/mining/station)
-"bLW" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
+"bLW" = (/obj/structure/closet/wardrobe/grey,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"bLX" = (/obj/machinery/computer/shuttle_control/mining,/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
"bLY" = (/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Central - South Southeast"},/obj/structure/sign/securearea{pixel_y = 32},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/primary/central_three)
"bLZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
@@ -4817,7 +4817,7 @@
"bOG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{autoclose = 1; name = "EMT Storage"; req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/medbay)
"bOH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/server)
"bOI" = (/obj/structure/table,/obj/item/weapon/cartridge/signal/science,/obj/item/weapon/cartridge/signal/science{pixel_x = -4; pixel_y = 2},/obj/item/weapon/cartridge/signal/science{pixel_x = 4; pixel_y = 6},/obj/item/clothing/glasses/welding/superior,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/camera/network/research{c_tag = "Research - RD's Office"; dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
-"bOJ" = (/obj/structure/table,/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "mining_shuttle"; pixel_x = 25; pixel_y = -8; req_one_access = list(13,48); tag_door = "mining_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
+"bOJ" = (/obj/structure/closet/wardrobe/black,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"bOK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/light_switch{pixel_x = -24; pixel_y = -24},/turf/simulated/floor,/area/quartermaster/qm)
"bOL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/mining{id_tag = "qmdoor"; name = "Quartermaster"; req_access = list(41)},/turf/simulated/floor,/area/quartermaster/qm)
"bOM" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_three)
@@ -4976,9 +4976,9 @@
"bRJ" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/engineering)
"bRK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/mixing)
"bRL" = (/turf/simulated/floor/airless{dir = 8; icon_state = "warning"},/area/rnd/test_area)
-"bRM" = (/obj/structure/closet/crate,/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
+"bRM" = (/obj/structure/table,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
"bRN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/shuttle/mining/station)
-"bRO" = (/obj/structure/ore_box,/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
+"bRO" = (/obj/structure/table,/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "mining_shuttle"; pixel_x = 25; pixel_y = -8; req_one_access = list(13,48); tag_door = "mining_shuttle_hatch"},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
"bRP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"bRQ" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor{dir = 2; icon_state = "brown"},/area/quartermaster/miningdock)
"bRR" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/cargo)
@@ -7334,7 +7334,7 @@
"cLb" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/shuttle/constructionsite/station)
"cLc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/shuttle/constructionsite/station)
"cLd" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/station)
-"cLe" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "engineering_shuttle"; pixel_x = 0; pixel_y = 25; req_one_access = list(13,11,24); tag_door = "engineering_shuttle_hatch"},/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/station)
+"cLe" = (/obj/structure/closet/crate,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
"cLf" = (/turf/simulated/shuttle/wall{icon_state = "swall1"; dir = 2},/area/shuttle/constructionsite/station)
"cLg" = (/obj/machinery/door/airlock/maintenance{name = "Drone Fabrication/Engine Waste Handling"; req_one_access = list(10,24)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"cLh" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_electrical_maintenance"; locked = 1; name = "Electrical Maintenance"; req_access = list(10)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engineering/engine_room)
@@ -7376,6 +7376,10 @@
"cLR" = (/obj/machinery/camera/network/engine{c_tag = "Engine Core South"; dir = 1},/turf/simulated/floor/engine/nitrogen{dir = 8; icon_state = "warnplate"; name = "plating"},/area/engineering/engine_room)
"cLS" = (/obj/effect/landmark{name = "carpspawn"},/obj/structure/grille/broken,/obj/structure/lattice,/turf/space,/area/space)
"cLT" = (/turf/space,/area/skipjack_station/southwest_solars)
+"cLU" = (/obj/structure/ore_box,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
+"cLV" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/research/station)
+"cLW" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "engineering_shuttle"; pixel_x = 0; pixel_y = 25; req_one_access = list(13,11,24); tag_door = "engineering_shuttle_hatch"},/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/station)
+"cLX" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/station)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7475,7 +7479,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLasYaaLaaaaaaaaaaaaaaaaaaaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaqzataaqBagDarRapcatiarTarUatIapharWaloaonaonarYasFasyasMaonascalWasdasealmasgasharAasiasjaskarEaoHaoHaoHaoHaoHaslatQatJasoasoaspaspasqasrassastastasuasvasvaswasxatXaszaqsaaaaafaafaafaaaaaaaafaafaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafasAauiasAaaaaaaaaaaaaaaaaaaaaaaaIaafapJapJapJapJapJaafalkaafapJapJapJapJapJaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasCasbapbagDapUapMagWasDasEalKapOasPaoiasGasGasHasIaonasJaonasKalWasLatgauoathauuarAasQauvasSarEasTasUasUasVauSasVavCavbasZasZasZasZasZasZasZasZasZasmavFatbatcaoKatdateatfaaaaafatPatratjatjatjatjavRatjatjatjatjatUaafaaaaaaaaaaaaaamaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatkatlatmaaaatnatoatpaaaaafatqatWatqaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaaaalkaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaanXatsattagDagDagDagWagWagWagWalWalWalWalWalWatuaonaoratvaqEatwalWalWalWatxatxatxarAatyatzatAarEatBasZasZasZasZatCatDatEatFatGatHavTavUatKatLatMatNatOatPatPatPatPatPatPatPatPatPatPatRatRatRatRatRatRatRatRatRatRaumaafaaaaaaaaaaaaaamaaaapIapIapIapIapIaafalJaafapIapIapIapIapIaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSatTawiatTatSatVawnatVatSaafatqawvatYaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafatZauaanYaubaucanXaafaafalWaudaueaufaugauhawMaonapnaonasJaqEaujaukaulawRaunauKauparAauqaurausarEatBasZauLaxdauMatCauxauyatFatGauzauAauBauCauDatMatNauEauFauGauHauIauHauJauwauOauPaxsatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaamaaaaafaaaaafaafaaaaaabepaaaaaaaafaaaaaaaafaaaaaIaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSatTaLAatTatSatVaLBatVatSaafatqawvatYaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafatZauaanYaubaucanXaafaafalWaudaueaufaugauhawMaonapnaonasJaqEaujaukaulawRaunauKauparAauqaurausarEatBasZauLaxdauMatCauxauyatFatGauzauAauBauCauDatMatNauEauFauGauHauIauHauJauwauOauPaxsatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaamaaaaafaaaaafaafaaaaaabepaaaaaaaafaaaaaaaafaaaaaIaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNatTavmatTauNatVavyatVauNauQauRaxuauTauUauUauVauQauQaafaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaaaaaaaaaaaaanXanXanXauWanXanXapbaucanXaaaaaaalWauXalWauYauZavaalWaxwavzaonavdaveaveavfavgaveavhaviavjarAavkauravlarEatBasZavAavoavJatCawravqatFatGauzauAavravsavtatMatNavuavvauGauHauHauHauJavwavQawfavVatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaamaamaaIaaaaaaaafaaaaaaabpaaaaafaafaafaafaaIaaIaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNavBaxyavDauNavEaxAavGauNavHavIaxCavKavLavMavNavOauQaaaaaaaaqaaaapJapJapJapJapJaafbeSaafapJapJapJapJapJaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaawkaxGavSayqaxOawoavWavXanXaaaaaaalWalWalWavYavZawaalWawbawcawdaweawpawgaukawhawxautawyawlarAawmaurayzarEatBasZawzawUawYaxaaxbawZatFatFatFawsawtawuatFatFatNayNawwauGauHauHauHauJawAavxawfaykatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaayOaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNawGawHawIauNawGawHawIauNawJavHavHavHavHavHavHavHasAaaaaaaaaIaaaaafaaaaafaafaaaaaaaySaaaaaaaafaaaaaaaafaaaaaIaafaaaaaaaafaafaaaaaaaafawPaxGawQazgaxOawSaucawTanXaafaaLcqTatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxarAawVaurawWarEatBasZawBaxjawCatCaxVavnazpaxcaxfaxeaxhaxgaxhaxiaxkaxlaxmaxnaxoaxoaxoaxnaxmavxawEawDatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaazoazBazoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7486,11 +7490,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaBzatSaBAawHaBBaBCaBDaDcaBFaBBawHaBGaBHaBIaBJaBKaBLavHavHavHavHavHavHavHavHaDnaBPaAFazmaBRaBSaAFaBTaBUayCayCayCayCayCaBVaBWaBXazJaafaBYaBYaBYaBYaBYaBYaBYaafazJazOazPaBZaCaaCbaCcaBZazPazQaCdayLayLayLayLaDxaCfaCgaChaCfaDyaCjazTaCkarAaAdayPaClarEaJCasZaznaAYazCatCaxWavqatEaBjaBjaBjaBjaBjaCqaCraCsaBjatPatPatPatPaDQatPatPaAfaAkaAjatRatRatRatRatRatRatRatRatRatRaumaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaCvaEXaEYaDYaCvaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqaAxaCzaCAaCAaCAaCAaCBaAxazqaaaaBIaCCaxzaBLaCEaCEaCEaCEaCEaCEaCEavHaCFaCGaAFaEeaCIaAsaAFaCKaEvaCKaCKaCKaCKaCKaCKaCKaCKaCMaaaaBYaCNaCOaCPaCQaCRaBYaaaazJazOazPaBZaCSaCTaCUaBZazPazQanXayLaCVaCWaARaCXaCYaCZaDaaDbaECayLayLayLarAaAdayPayQarEaAiasZaAtaEMauMatCaDgavqatEaDhaDiaDjaDkaBjaCqaDlaCsaBjaDmaESaDoaDpaDqaGwaDsatPatPatPaAZatjatjatjatjaEVatjatjatjatjaBfaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaCvaCvaFhaGyaCvaDCaDDaDEaDCaDCaDCaDCaDCaDCaDCaDFaDGaDGaDGaDHaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaDIaDJaDKaDJaDJaDLaDMaDJaDJaDKaDNaDOaBIaDPaFEaBLaDRaDSaDTaDUaDVaDWaCEavHaDXauQaAFaAFaFGaDZaCMaEaaEbaEcaEdaFIaEfaEgaEhaEiaEjaCMaafaBYaEkaElaEmaEnaEoaBYaafazJazOazPaEpaEqaEraEsaEtazPazQaEuayLazSazTaFSaEwaCfaExaEyaATaEzaEAaEBaEBarAaAdayPayQarEaAiaCmaCmaCmaCmaCmaEHaEIatEaEJaEKaEKaELaFZaEKaENaEOaBjaEPaEQaERaGfaETaCnaDsaaaaafaafaafaaaaaaaafaafaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaDCaBsaBqaDCaBtaCpaGkaFdaFdaFdaFdaFeaFfaFgaFgaFgaFgaFgaFgaFgaGqaFiaFjaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaDIaDNaDJaFkaFlaFlaFmaFnaFoaFpaFqaFlaFlaFraFsaFtaDPayuaBLaFvayxaBMaCxaBMaBNaGravHaFuaGxaFxaGHaFzaDfaGPaFJaFKaFLaFLaFLaDraFLaFLaFNaFOaCMaaaaBYaDtaElaFQaEnaFRaBYaaaazJazOazPaGVaFTaFUaFTaFVazPazQaFWayLayLayLayLaFXaCfaCgazTaCfaFYaHIazTaGaarAaGbaGcaGdarEaAiaDeaDvaDuaCoaDeaHJaDzaHYaGlaGmaBjaBjaBjaBjaBjaBjaGnaGoaGpaIcaDpaIkaIhaDsaDsaDsaDsaDsaDsaDsaDsaDsaFaaFbaDsaDsaFaaGtaDsaDsaaaaaaaDCaDCaDCaDCaDCaEZaEWaFdaFcaFwaDCaDCaDCaDCaDCaGDaGEaGFaGFaGFaGFaGFaGFaGGaGGaIlaGGaGGaGGaGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaDIaDNaDJaFkawiaFlaFmbOJaFoaFpbLWaFlawnaFraFsaFtaDPayuaBLaFvayxaBMaCxaBMaBNaGravHaFuaGxaFxaGHaFzaDfaGPaFJaFKaFLaFLaFLaDraFLaFLaFNaFOaCMaaaaBYaDtaElaFQaEnaFRaBYaaaazJazOazPaGVaFTaFUaFTaFVazPazQaFWayLayLayLayLaFXaCfaCgazTaCfaFYaHIazTaGaarAaGbaGcaGdarEaAiaDeaDvaDuaCoaDeaHJaDzaHYaGlaGmaBjaBjaBjaBjaBjaBjaGnaGoaGpaIcaDpaIkaIhaDsaDsaDsaDsaDsaDsaDsaDsaDsaFaaFbaDsaDsaFaaGtaDsaDsaaaaaaaDCaDCaDCaDCaDCaEZaEWaFdaFcaFwaDCaDCaDCaDCaDCaGDaGEaGFaGFaGFaGFaGFaGFaGGaGGaIlaGGaGGaGGaGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaFraGIaFyaGKaFlaFMaFlaFMaFlaFMaFlaFMaFlaGMaGNaGOaDPayuaBLaInaFAaGRaGSaGTaGUaCEaFBaFDaFCaFCaFCbazaIzaFCaHcaFLaFLaFLaFLaFLaFLaFLaFNaHdaCMaafaBYaHeaHfaHgaHhaHiaBYaafazJazOazPaHjaFPaFUaHlaHmazPaHnaHoayLaHpazTaARaHqaATaHrazTaCfaFYaHsazTaHtarAaHuaHvaHwarEaGuaIDaEUaGvaDwaIIaGzaGjatEaHCaHDaBjaHEaBjaHFaBjaHGaBjaHHaGpaIZaDpaJsaJjaHLaHMaHMaHNaHOaHKaHKaHKaHKaHKaHPaHKaHKaHKaHQaHVaDsaDsaDsaDCaGBaGAaGCaGCaGLaGJaDCaDCaJwaDCaIdaIeaIfaIgaGFaJBaGFaIiaIjaJHaKjbinaKlaIoaIpaIqaKHaIsbjFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaIwaFlaFlaDKaFlaFMaFlaFMaIxaFMaIyaFMaFlaGMaGNaGOaDPaFFaIAaIAaKMaICaKPaICaIAaIAaIEaIFaFCaGQaFHaGWaHkaFCaIKaILaIMaFLaFLaHRaFLaIOaIPaIKaCMaaaaBYaBYaIQaHSaIQaBYaBYaaaazJazOazPaISaITaIUaFTaIVazPaIWaIXayLaIYazTaKQaEwaCfaJaaEyaATaJbaJcazTaJdaJeaJfaJgaJhaMbaKVaCuaCuaCuaCuaCuaHUaHTaJlaJmaJnaBjaJoaBjaJpaBjaJqaBjaJraGpaKXaJtaGsaGsaDqaJvaDsaDsaKYaDsaDsaJxaDsaGsaJyaGsaGsaGsaJzaHZaHXaHWaIaaLcaIraIbaIbaIbaIRaINaIgaJIaJJaLdaJkaJMaJNaIgaJOaJPaGFaJQaJAaJSaJTbinaJUaIoaJVaLeaGGaGGaGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaFraJXaFyaGKaFlaFMaFlaFMaFlaFMaFlaFMaFlaGMaGNaGOaDPaGYaGXaHaaGZaHbaHbaIBaLiaIHaIGaIJaLkaJZaJYaJGaKaaFCaIKaKmaKnaKoaKpaIKaKqaKraKsaKtaKuaaaaafaaaaKvaKwaKvaaaaafaaaaKuazOazPaKxaKyaKzaKAaKBazPaKCaKDayLaKEazTaARaKFaKGaHrazTaLmaKIaKJaKKaKLaJeaEDaKNaKOaLYaEEaKRaaaaaaaJlaKSaJKaMcaJlaJLaJnaJnaJnaKWaJnaJnaJnaBjaDpaMvaDpaDpaDpaDpaMwaDpaKZaLaaLbaMEaMVaMFaLfaLgaLhaLfaLfaLfaLfaLfaMXaLfaLfaLfaLfaLfaLfaLfaLfaJRaIgaLjaJWaLlaEFaKbaLoaIgaLpaKTaGFaLraLsaLtaJTaNcaJUaIoaJVaIoaKUaLwaLxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaLyaLzaDJaFkaFlaFlaFlaLAaFlaFlaLBaFlaFlaFraLCaLDaDPaLEaLFaLGaLHaLGaLGaLGaLGaLGaLIaLJaFCaFCaFCaFCaFCaFCaLLaLMaLNaLOaLOaLOaLOaLPaLQaLRaKuaLSaLTaLTaLUaLVaLWaLTaLTaLXaKuaNAaKuaKuaLZaMaaLZaJeaJeaMbaNGaJeaJeaJeaJeaMdaMeaNXaNPaMhaMiaJeaJeaJeaJeaMjaKNaMkaMkaMlaMmaMnaMoaJlaMpaLqaLnaJlaJlaJlaJlaJlaJlaJlaJlaBjaBjaMsaMtaMuaOiaOoaLvaMyaMfaKZaMAaMBaMCaMCaMDaLfaOpaOqaMGaMHaMIaMJaMKaMLaMMaMNaMHaMJaMIaMHaMOaLfaJRaIgaMPaMgaMRaMSaMqaMUaIgaOsaMWaOCaMYaMraNaaNbaGFaGGaOHaJVaIoaMxaNeaNfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaLyaLzaDJaFkawiaFlaFlaFqaFlaFlaFnaFlawnaFraLCaLDaDPaLEaLFaLGaLHaLGaLGaLGaLGaLGaLIaLJaFCaFCaFCaFCaFCaFCaLLaLMaLNaLOaLOaLOaLOaLPaLQaLRaKuaLSaLTaLTaLUaLVaLWaLTaLTaLXaKuaNAaKuaKuaLZaMaaLZaJeaJeaMbaNGaJeaJeaJeaJeaMdaMeaNXaNPaMhaMiaJeaJeaJeaJeaMjaKNaMkaMkaMlaMmaMnaMoaJlaMpaLqaLnaJlaJlaJlaJlaJlaJlaJlaJlaBjaBjaMsaMtaMuaOiaOoaLvaMyaMfaKZaMAaMBaMCaMCaMDaLfaOpaOqaMGaMHaMIaMJaMKaMLaMMaMNaMHaMJaMIaMHaMOaLfaJRaIgaMPaMgaMRaMSaMqaMUaIgaOsaMWaOCaMYaMraNaaNbaGFaGGaOHaJVaIoaMxaNeaNfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaLyaDJaDKaDJaDJaDLaDMaDJaDJaDKaLzaNgaBIaNhaLEaNiaMzaMzaNkaMzaNlaIAaNmaNnaLJaNoaNpaNqaNraNsaNtaNraNuaNraNraNraNvaNraNraNwaNxaNyaNzaNzaNBaOMaNCaNzaNzaNzaNzaNDaNEaNFaQcaNraNHaNIaNJaNKaNLaNMaNLaNNaNOaQdaNQaNQaNRaNSaNTaNSaNUaNVaNWaEGaNYaNZaOaaObaOcaMkaMkaMkaOdaOeaMTaMQaOhaQxaOjaOkaOlaOmaOnaJlaQAaQyaQEaOraOtaOtaOuaMZaOwaNdaKZaOyaOzaOAaOAaOBaLfaQJaODaOEaOEaOEaOEaOFaOGaQTaOIaOJaOKaOKaOLaRbaLfaJRaIgaONaOOaNjaOfaONaONaIgaORaOSaGFaOTaOUaOVaOWaGFaIoaIoaJVaIoaGGaGGaGGaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOXaOYaOZaPaaPaaPaaPaaPbaOYaOXaaaaBIaPcaPdaPeaOvaOgaPhaPhaOxaIAaPjaNnaPkaPlaPmaPnaPoaPpaPqaPqaPraPsaPsaPsaPtaPuaPuaPvaPwaNIaPqaPqaPxaPyaPzaPAaPBaPBaPCaPBaPDaPyaPyaPyaPEaPFaPGaPHaMkaPIaPJaPJaPJaPJaPJaPJaPJaPJaPKaPJaPLaPMaPNaPOaPPaPQaPRaPSaPTaPJaPUaPJaPVaPWaPXaPWaPWaPWaPWaPWaPWaPYaPZaRsaQbaQbaQbaRraQbaQbaRxaQeaQfaQgaKZaQhaMCaQiaQjaQkaLfaQlaQmaQnaQnaQnaQnaQnaQoaQpaOPaQraQnaQnaQsaQtaLfaJRaIgaQuaONaONaQvaONaQwaIgaGFaGFaGFaGFaGFaGFaSoaGFaIoaIoaJVaIoaStaOQaGGaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaafaBIawqaBIaQBaQCaGOaQDaSuaQFaQGaGOaQCaQHaQIaBIaSyaLEaPeaPfaQLaPhaPhaOxaIAaQMaNnaLJaQNaNpaQOaQPaNraNraQQaQRaQSaSEaNraQUaQVaQWaQVaQXaQYaQVaQVaQZaQVaQVaRaaSHaQVaRcaQVaRdaNraNraNraReaPFaPGaPHaMkaRfaMkaRgaRgaRgaRgaRgaRgaRgaRgaRhaRiaRgaRjaRgaRgaRkaRgaRgaRgaRgaRlaRmaRnaRoaRoaRoaRoaRoaRoaRoaRpaRqaRpaJlaImawOawOawOawOawOaItaRuaRvaRwaKZaKZaKZaKZaKZaSIaLfaRyaQmaQnaRzaRAaRBaPgaRDaREaRFaQraRGaRHaRIaRJaLfaJRaIgaRKaRKaRLaRMaRNaRNaROaIgaRPaRQaRRaGGaRSaRTaRUaRVaRVaRWaRXaGGaRYaGGaRZaRZaRZaSaaSbaScaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7513,7 +7517,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaT
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaabrsbrtbsvbsBbsybsHbsHbthbrzbrAbgrbtkbtlbtvbtmbjpbjpbjpbajbrEbrFbrGbrHbrGbrGbrGbrHbrGbajbajbdPbdPbdPbtBbdPbrJbrJbrJbrJbrJbrJbqfbrKbrLbrMbrNbrObtIbrQbrRbrSbrTbrUbrVbrWbrXbrYbrZaHBbsbbqvbsabsebscbotbosbotaafbsibtObtKbtTbsmbtXbtKbubbsiaafbedbspbuibspbedbedbedbujaJibssaRqaRpbXHboJbngbstbsubuobqLbswbqNbsxbuxbszbsAbuTbsCbqObsDbnibsEbsFbsGbuUbnnbsIbqVbpebpfbpgbphbpfbpibYfaVJbpjbsJbsKbsLbsMbplbsNbsObsPbsQbsRbsSbsTbsUbrhbsVbsWbsXbnIbsYbsZbtabtbbtcbtdbnIbrqbpFbtebnMaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaacaaaaaaaaaaaaaaaaaaaaabrsbtfbtgbuYbtibtibtibtjbtibtibgrbvabuZboAbvjbjpaaaaaaaaaaafaafbtnbtnbtnbtnbtnbtnbtnaaaaaabtobtpbtqbtrbtsbrJbrJbrJbrJbrJbrJbttbtubvqbtwbtxbtybtzbtAbfmbfmbvCbfmbfmbtCbtDbtEbtFbmGbtHbmGbmGbmGbmGbmGbvEbmGaafbtJbvFbtLbtMbtNbtMbtLbvIbtPaafbspbtQbtRbtSbvObtUbspbtVaJlbtWbbmbvZaJibtYbohbtZbuabwcbucbudbuebufbwgbuhbwlbwnbukbulbumbnibnnbunbpubupbnnbuqburbusbutbuubuubuvbuwbYfaXqbpjbwxbplbplbsMbuybuzbuAbpvbuCbuDbuEbuFbuGbrhbuHbuIbuJbnIbuKbuLbuMbtbbpCbuNbnIbpEbpFbuObnMaaaaaaaaaaaacHOaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwZbeObxmbxmbuVbpHbuWbgnbgobuXbuWbgrbxpbjpbxvbvbbjpaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaabvcbvdbrJbvebvfbvfbvfbvfbvfbvgbvhbvfbvibxzbvkbvlbvmbvnbvobfmbvpbgGbxDbpzbvsbvtbvubvvbmGbmGbmGbvxbvybvzbvAbvBbvwaafbpObxHbvHbvJbvKbvMbvNbxIbpOaafbspbqMbvQbxnbedbvRbspbvSaJlbvTbcLbvUaJibvVbvWbvXbvYbxObucbyobxTbyKbwdbwebwebwfbyMcdWcdVbwjbwkbyObwmbwkbwkbwkbwkbyQbwkbwkaXKaXKaXKaXKaVJbpjbsJbsKbsLbwobwpbwqbwrbwsbwsbwsbsSbwtbqTbwvbwwbyUbwybnIbwzbwAbwBbwCbpCbwDbnIbwEbwFbnMbnMaaaaaaaaaaaaaafbuPbuQbuRbuQbuRbuQbuSaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbwMbwNbwObwPbrJbwQbrJbwRbwRbwRbwSbwTbrKbrJbrJbrLbwUbwVbwWbwXbrpbzcbxabgGbgGbugbxcbvtbvubxdbxebxfbzrbzHbxibxjbxkbxlbvwaafbxrbzNbzJbzObyLbxobzPbzVbxraafbspbqwbAebuBbedbAibspbtVaJlbxwbcLaRpaJibxxbxybAobxAbxBbxCbAtbxEbxCbxFbxGbAubxFbwkbAxbxJbwkbwkbxKbxLbxMbxNbAAbxPbxQbxRbxSaXKbaybvraXKaVJbpjbxXbqZbqZbxYbxZbppbyabwsbwsbwsbsSbwtbybbwwbvDbUabTQbwwbyfbygbyhbyibpCbvLbnIbrqbykbnMaaaaaaaaaaaaaaaaafbwGbwHbrgbwJbwJbwKbwGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbwMbwNbwObwPbrJbwQbrJbwRbwRbwRbwSbwTbrKbrJbrJbrLbwUbwVbwWbwXbrpbzcbxabgGbgGbugbxcbvtbvubxdbxebxfbzrbzHbxibxjbxkbxlbvwaafbxrbzNbzJbzObyLbxobzPbzVbxraafbspbqwbAebuBbedbAibspbtVaJlbxwbcLaRpaJibxxbxybAobxAbxBbxCbAtbxEbxCbxFbxGbAubxFbwkbAxbxJbwkbwkbxKbxLbxMbxNbAAbxPbxQbxRbxSaXKbaybvraXKaVJbpjbxXbqZbqZbxYbxZbppbyabwsbwsbwsbsSbwtbybbwwbvDbUabTQbwwbyfbygbyhbyibpCbvLbnIbrqbykbnMaaaaaaaaaaaaaaaaafbwGbwHbrgcLVbwJbwKbwGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbAFbypbAFbyqbyrbwQbrJbrJbrJbysbrJbwTbrKbytbdPbdPbyubgGbrNbwXbyvbywbyxbyybyybyzbyAbyBbyCbyDbvsbyEbvPbyGbxkbyHbyIbyJbvwaafbxrbxrbxrbxrbALbxrbxrbxrbxraafbyNbyNbyNbyNbyNbyNbyNbAVaJibyPblMblNaJibwbbyRbyRbySbyTbxCbAXbyVbyWbyXbyYbyZbzabwmbzbbBqbzdbzebzfbzgbzgbzhbzibzgbzjbzkbckbaAbwubclbBsbcnbBtbzsbztbzubzvbzwbppbzxbpqbpqbzybsSbwtbzzbzAbzBbzCbzDbzAbzEbzFbzGbBwbzIbwwbwwbBxbnMbnMbzKbzLbzLbzLbzMbCJbylbymbrgbwJbrgbynbuRaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaacaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbBAbzQbBAbzRbrJbwQbrJbzSbzSbzSbzSbwTbrKbzTbzUbdPbBEbgGbrNbBJbzWbzXbzYbgGblnbgGbzZbAabAbbAcbAdbyEbwIbAfbxkbxkbxkbAgbvwbAhbAhbBKbAhbBRbBQbBSbAjbBUbAjbAjbyNbAkbAlbAmbAnbBXbApbAqaJibAraRqaRpaJibxbbwYbxhbAvbAwbCcbAybAzbCdbABbACbADbAEbCnbAGbAHbAIbAJbAKbAIbxtbAMbANbAObnvblUbsdbCobsgbsfbaAbPObpjbxubxUbAYbAZbAZbppbBabBbbBcbppbBdbBebBfbBgbBhbBibBjbBkbBlbBlbBmbBnbBobTHbCrbBrbCwbCAbTIbBvbCEbCIbCHbCKbwGbwJbrgbwJbwJbCLbwGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbBCbwNbBDbCYbrJbwQbrJbrJbrJbrJbrJbwTbrKbzTbBFbdPbBGbgGbBHbBIbgGbCZbgFbgGbgGbyjbvsbvtbAbbAcbAdbyEbvwbBLbBMbBNbBMbBObvwbDbbDabDdbDcbDfbDebDhbDgbDjbDibBVbyNbBWbzmbBYbBZbCabCabCbbDwbAraRqaRpaJibAsbCebCebySbCfbxCbCgbChbxCbCibCjbCjbCkbwkbClbCmbwkbwkbwkbwkbwkbwkbDIbwkbwkbwmbDKaXKaXKaXKaXKbDYbpjbwwbzAbzAbzAbzAbzAbzAbzAbzAbzAbzIbEibCsbCtbBhbCubCvbEjbCxbCxbCxbCybCzbEkbCBbCCbCDbEpbTGbCGbErbCGbEsbEubBzbuQbuRbEwbuRbuQbBBaafaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7523,11 +7527,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaafaaaaaaaaabHuaafaaaaaaaaaaaabGtbHvbHwbHxbHybGvbHzbKVbHBbHCbtCbvtbAbbAcbAabHDbHEbHFbHGbHHbHIbHJbHKbHLbLabLxbLnbLzbAabAabLIbMhbLYbAabHTbAabzZbHHbKJbHWbHXbHYbMibxwaRqbDsaJlbDtbDubDtbDCbDPbxCbIbbIcbIdbIebMlbIgbIhbIibIjbIkbwmbIlbImbInbDJbDTbElbIpbIqbIrbFDbIsbItbIubCpbMpbIwbIxbIybUdbLybMqbICbMCbUcbIFbIGbIHbIIbIJbzAbIKbCubCvbMHbMFbINbIObIPbIQbIRbGabGbbISbEnbEnbEnbCJbCJbCJbMSbMPbCJbCJbBybCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaabMZaaaaaaaaaaaaaaaaaaaaaaaaaaabGtbITbEmbIVbIWbNdbIYbIZbJabNfbtCbvtbJcbJdbJebJebJfbJgbJhbJibJjbJgbJfbJebJebNkbJkbJlbNqbJnbJobNBbJebJebJpbJgbJhbJibJjbJsbJtbJubJtbJvbJwbvUaJlbEtbEqbFHbGFbNLbGHbDzbHAbFibDVbxFbNQbCFbDSbDEbJGbwkbJHbJIbJJbDJbJKbJLbJMbJNbJObFDbJPbItbJObCpbJQbJRbIxbJSbJTbJUbNZbJWbObbJYbIFbJZbKabKbbKbbzAbKcbKdbKebOcbKgbKhbKibKjbKjbKkbGabGbbKlbEnbKmbOdbKnbEnaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbKpbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaaaaaabKvbKwbKxbKwbKyaaaaaaaaabGtbGtbOfbKAbIVbKAbOibKCbOnbKDbKEbtCbKFbvtbKGbKHbAabKIbAabzZbHHbKJbAabKKbKLbKMbKNbKObAcbAabKPbKQbHLbKRbHLbHLbKSbKTbODbOtbKWbKXbcLbKYaRpaRpaRpaJlbOEbFlbFnbOFbJmbOGbJybJxbFIbLgbLhbLibLjbHgbDEbIkbIabIzbHhbDJbDJbLobLobLobCpbLpbLqbLrbLsbLtbCpbLubLvbIxbLwbFGbLybOHbLAbLBbLCbIFbJCbLEbKbbKbbzAbRsbLFbCvbwwbLGbLHbOIbLJbLKbLLbGabLMbLNbLObLObLObLPbGdaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbLQbLRbLSbLRbKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLVbLWbLXbOJbLVbLZbMabMbbGtbMcbMdbMebMfbMgbOLbOKbMjbMjbMkbtCbtCbtCbOMbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbMmbMnbMobtCbtCbtCbtCbtCbONbtCbtCbtCaJlaJlbOQaJlaKSaMpbMraJlbKZbJXbORbGFbLdbxCbDzbLDbxCbMybMzbMAbMBbwkbOTbMDbMEbOUbMGbPubMIbMJbMKbMLbItbJObFDbFDbMMbJObCpbMNbMObMObMObMObMObMObMObMObMObMObPvbMQbMRbMRbzAbPAbMTbMUbwwbMVbMVbMVbMWbMXbMYbMVbMVbMVbMVbMVbMVbNabNbaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymbPCbLRbLRbNebKtbKtbLTbLTbPDbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLVbRMbLXbRObLVbLZbMabMbbGtbMcbMdbMebMfbMgbOLbOKbMjbMjbMkbtCbtCbtCbOMbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbMmbMnbMobtCbtCbtCbtCbtCbONbtCbtCbtCaJlaJlbOQaJlaKSaMpbMraJlbKZbJXbORbGFbLdbxCbDzbLDbxCbMybMzbMAbMBbwkbOTbMDbMEbOUbMGbPubMIbMJbMKbMLbItbJObFDbFDbMMbJObCpbMNbMObMObMObMObMObMObMObMObMObMObPvbMQbMRbMRbzAbPAbMTbMUbwwbMVbMVbMVbMWbMXbMYbMVbMVbMVbMVbMVbMVbNabNbaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymbPCbLRbLRbNebKtbKtbLTbLTbPDbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbNgbMsbNgbKxbNibNjbPFbNlbNmbNnbKAbNobNpbGvbPHbNrbNsbNtbGvbNubNvbNwbNxaaaaaaaaaaaabNybNzbNAbPSbNDbNCbNEbNFbNGbNHbNIbNFbNJbNKbPXbNMbNNbNObNPbPZbNRbNSbNTbNUbNUbNUbNUbDtbDtbDtbDtbMtbMtbxCbQabOabQbbMzbMvbMubOebQcbOgbOhbQdbOjbMxbMwbOmbNhbMKbOobFDbFDbNVbJObJObOobCpbMNbMObOqbOrbOsbQebOubOvbOwbOxbMObOybOzbOAbOAbzAbOBbOCbCvbzIbQgbQpbQjbQBbQubRdbQXbRvbRebRxbVFbMVbRybEnbOObOObOObOObOOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabOPbKtbPCbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLVbNgbNgbNgbRAbRzbKAbOSbRDbRBbKAbRFbOVbOWbGvbGvbGvbGvbGvbGvbOXbOYbOZbPaaaabPbbPcbPcbPdbPebPfbPgbPhbPfbPibNFbPjbPkbPlbNFbPmbNXbPobPpbPqbPrbPsbPtbPtbNSbRWbRJbPwbPxbPybDtbNYbLbbScbGFbGFbSgbDzbSibxCbSnbPEbSrbPGbwkbSubPIbwkbOkbPKbPLbOlbPNbMKbCpbCpbCpbCpbCpbCpbCpbCpbPObMObPPbQYbPRbOsbOsbOsbOsbSwbMObPTbLEbPUbPUbzAbBhbPVbPWbSEbPYbPYbSMbSObSNbSQbSPbSSbSRbSSbSVbMVbQfbSWbOObQhbTgbOpbQkaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbQlbQmbQmbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbMsbMsbMsbKxbQnbQobTAbQqbQrbKAbKAbQsbQtbTObQvbQvbQvbQvbQvbQvbQwbQxbQyaaabQzbQAbUbbQCbQDbPfbQEbQGbQFbPfbNFbQIbQJbQKbNFbQLbQMbQNbQObQPbQQbQRbPtbQSbPxbQTbNUbPxbPxbQUbDtbPnbGFbQVbUkbGFbPzbDzbLebRCbQZbPBbUobRcbRGbDEbIkbSpbOkbPLbPLbOlbRfbMKbRgbRhbPJbRjbRkbRlbPMbRnbPObMObOsbOsbRobOsbOsbOsbOsbRpbMObRqbLEbRrbRrbzAbRsbRtbRubUqbRwbUGbUwbUPbUObUWbURbVkbVjbVvbVmbVybREbVGbVzbRHbRIbQibRKaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaabLVbRMbRNbRObLVbRPbMabMbbGtbGtbRQbRQbRQbGtbGtbNxbRRbRRbRSbRSbRSbRSbNwbQyaaabRTbRUbRVbVObRXbRYbRZbSabSbbSbbWgbSdbSebWibNFbPtbPtbPtbPtbPtbWkbPtbPtbShbWobSjbNUbPxbSkbSlbDtbQHbLbbQVbSmbWMbPzbSobJAbJBbSqbRabSsbStbJzbFsbSvbIEbSxbRibRbbSAbSBbMKbRmbSDbWVbRjbSfbSGbXabRnbPObMObMObMObRobOsbOsbOsbMObMObMObSIbSJbRrbRrbzAbSKbSLbCvbzIbXcbXfbXebSQbXibXqbXpbXvbXubYabXxbMVbQfbYobOObSXbSYbSybTaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbTcbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaabLVcLebRNcLUbLVbRPbMabMbbGtbGtbRQbRQbRQbGtbGtbNxbRRbRRbRSbRSbRSbRSbNwbQyaaabRTbRUbRVbVObRXbRYbRZbSabSbbSbbWgbSdbSebWibNFbPtbPtbPtbPtbPtbWkbPtbPtbShbWobSjbNUbPxbSkbSlbDtbQHbLbbQVbSmbWMbPzbSobJAbJBbSqbRabSsbStbJzbFsbSvbIEbSxbRibRbbSAbSBbMKbRmbSDbWVbRjbSfbSGbXabRnbPObMObMObMObRobOsbOsbOsbMObMObMObSIbSJbRrbRrbzAbSKbSLbCvbzIbXcbXfbXebSQbXibXqbXpbXvbXubYabXxbMVbQfbYobOObSXbSYbSybTaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbTcbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTdbKwbTebKwbTfbYtaafaaaaaabGtbThbTibTjbGtaaabNxbTkbTlbTmbTnbTnbTnbTobQyaaabQzbTpbTqbTrbTsbPfbTtbTvbTubTwbNFbSzbTybTzbYwbTBbTBbTBbTCbTCbTDbTEbULbPxbPxbTFbNUbNUbNUbNUbDtbDtbLfbLkbLcbDtbTJbTKbTLbJFbJEbTJbQbbLlbLmbTRbTSbTJbMKbMKbMKbMKbMKbMKbTTbTUbTVbRjbTWbTXbTYbRnbPObMObTZbQWbPQbYHbYzbNWbNcbTZbUgbUhbUibIIbIJbzAbIKbSLbUjbwwbMVbMVbYMbYSbMVbMVbMVbMVbYYbSCbVFbMVbYZbUnbOObUpbZbbUrbOOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbUsbUsbUsbUsbUsbUsbUtbLTbUubUsbTcbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMZaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbUvbNxbNxbNxbNxbRSbZcbNwbUxaaabUybPcbPcbUzbUAbPfbPfbUBbPfbSFbNFbUDbSHbSTbNFbSUbSUbSUbSUbSUbSUbSUbSUbUHbUIbUJbUKbUKbUMbNUbDtbUNbSZbTxbUQbZebwabUTbUUbTMbZibTNbUTbUYbUZbVabVbbUebTPbVdbVebVgbVhbVibUlbZrbUmbRjbUCbZsbUCbRnbPObMObVnbUFbVpbVqbVrbVsbVtbVubUgbzAbZubzAbzAbVwbCxbSLbCxbVxaafbnxbZvbZzblSbVBbZBbZLbZCbZObUVbMVbVHbVIbOObVJbVKbVKbwhaaLaaLaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibLRbLRbLRbLRbLRbLRbLRbVNbLUbLTbLTbLTbLTbZPbLUbKuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVPbVQbVQbVRbVSbNxbVTbRSbVUbNxaaaaaaaaaaaabNybVVbVWbVXbVZbVYbPfbNFbWabWbbNIbNFbSUbUXbVfbVcbVDbVCbVEbSUcaqcaqcaqcaqcaqbTFbWjbZSbWlbWcbWdbZUbWpbxgbWrbWsbWtbWubWtbWvbWtbWwbWxbWybWzbWAbWBbWAbWCbWDbWEbWFbWGbWebWIbWfbWKbWLbZVbxVbMObxWcaabzlbWSbWTbWhbWSbWScanbWWbWXbWYbWZbCxbCxbSLbCxbFTaafbnxcaxcaxbXbcaJbXdcbdcaWbXgbXhbMVbVHcbebOObOObOObOObOOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbQmbQmbQmbQmbQmbQmbXkbLTbQlbQmbXlbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7563,9 +7567,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaabgaaaaaaaaaaaaaaaaaaaaacrPaafaafaaaaaqaaaaaaaafcgEcmtcmmcEgcgEcmtcmmcEgcgEcmtcmmcEhcgEaaacgEcEgcmmcEhcgEaaaaafaaacDzcEjcElcEkcEncEmcEpcEocDkcEqcEscKBcDJcEtcEvcEucExcEwcDJcKCcEAcEzcDraaaaaacAOcKDcFhcFiaaaaaabNUbPxbPxbNUcCacmUcmUcmUcCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcEEcFncuQcuQcuQcuQcuQcFocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackEcdOcdOcdOcdOcdOcdOcdOcdOcmYcmYcmYckEaaaaaacrPcrPcrPcrPcrPaaaaaaaaacmZaaaaaaaaacrPcrPcrPccMcrPaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaafaaIaaaaaaaafcgEcEGcEIcEHcgEcEMcEOcENcgEcEPcERcEQcgEaafcgEcEScEUcETcgEaaaaafaaacDzcEVcDBcEncEncEWcEYcKEcFacEZcFccFbcKFcFdcFjcFfcFlcFkcFpcFmcKGcFqcDraafaaacFJcKIcKHcAOcKJaaabNUcFMcKKcFNcFOaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrHcqvcqvcFPcFQcEfcEfcEfcFRcFPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqpbqpbqpaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafcfTaafcrPaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaaaaafaafcgEcFscFtcFscgEcFucFvcFucgEcFwcFxcFwcgEaaacgEcFwcFwcFycgEaaaaafaaacDzcCLcFzcEkcEncDCcFAcDEcDkcFBcFDcKLcDJcKMcFGcKNcFGcFHcDJcFIcFTcFScDraaLcKPcKOcKRcKQcKOcKOcKSbNUciEciDcGjaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGlcEJcEJcEJcEJcEJcGlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaaacrPaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaIaafaafaaacgEcFscKTcFscgEcFucKUcFucgEcFwcKVcFwcgEaafcgEcFwcKWcFwcgEaafaafaafcFYcFXcGacFZcGccGbcGdcDEcDkcGecKXcGfcDJcGicGmcGkcKYcGncDJcGpcGrcGqcDraaacLacKZcLccLbcLecLdcLfcGFcGGcGHbNUaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcCmcqxcqxcqxcCocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcrPcrPcrPcrPaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaIaafaafaaacgEcFscKTcFscgEcFucKUcFucgEcFwcKVcFwcgEaafcgEcFwcKWcFwcgEaafaafaafcFYcFXcGacFZcGccGbcGdcDEcDkcGecKXcGfcDJcGicGmcGkcKYcGncDJcGpcGrcGqcDraaacLacKZcLccLbcLWcLdcLfcGFcGGcGHbNUaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcCmcqxcqxcqxcCocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcrPcrPcrPcrPaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccMaaaaaacgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEaaacGscgEcgEcgEcgEaaaaaaaaaaaacBNcBNcBNcBNcBNcLgcGtcGtcGtcGtcLhcGtcGwcGycGxcGycGzcGtcGtcLicGtcGtcGtcLacKZcLkcLjcLmcLlcLnaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaacGQcGRcGRcGRcGScGBcGDcGCcGIcLocGKcGJcLpcGLcLqcGNcGTcGPcGVcGUcGXcGWcGZcGYcHbcLrcGYcGtcLacKZcLtcLscLmcLucLvaafaaacGQcHccGQcHccGQcHcaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaacGQcGRcGRcGRcGScGBcGDcGCcGIcLocGKcGJcLpcGLcLqcGNcGTcGPcGVcGUcGXcGWcGZcGYcHbcLrcGYcGtcLacKZcLtcLscLXcLucLvaafaaacGQcHccGQcHccGQcHcaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafcHncjVcHpaaacHncjVcHpaaacHncjVcHpaafaafaaaaafaafaafaafaafcHqcGRcGRcGRcGScGBcHfcHecHhcHgcLwcHicHlcHkcHocHmcHscHrcHucHtcHucHucHucHvcHucHwcHxcGtcLxcKOcKOcKOcKOcKOcLyaafaafcHycHycHycHycHycHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaabgaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacHncjWcHpaaacHncjWcHpaaacHncjWcHpaafaafaaaaafaaaaaacHKaafcGQcGRcGRcGRcGScGBcHfcHzcHBcHAcLzcHicHEcHDcHFcHbcHbcHbcHHcHGcHIcHbcHbcHDcHLcHJcHMcGtcGtcGtcHNaaaaaaaaaaaacHOaaacHPcHPcHPcHPcHPcHPaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncjWcHpaaacHncjWcHpaafcHncjWcHpaafaaaaaaaafaafcIcaaaaafcHqcGRcGRcGRcGScGBcHRcHQcHTcHScLAcHUcHXcHWcHZcHYcHYcHYcIbcIacIdcHYcHYcIecIgcIfcIicIhcIkcIjcImcIlcIlcIlcIlcIlcIlcIncIocIncIocIncHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm
index d0b1ebcfb2b..a0c8550f829 100644
--- a/maps/exodus-2.dmm
+++ b/maps/exodus-2.dmm
@@ -725,14 +725,14 @@
"nW" = (/obj/machinery/shower{pixel_y = 32},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"nX" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"nY" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"nZ" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 2; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nZ" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/supply/dock)
"oa" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"ob" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
"oc" = (/obj/machinery/door/airlock/centcom{name = "Bathroom"; opacity = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"od" = (/obj/machinery/shower{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"oe" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"of" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 15},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"og" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"og" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/supply/dock)
"oh" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oi" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
"oj" = (/obj/structure/mirror{dir = 4; pixel_x = -32; pixel_y = 0},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
@@ -758,7 +758,7 @@
"oD" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"oE" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/head/helmet/space/void/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"oF" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space)
-"oG" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"oG" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"oH" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 0; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/space)
"oJ" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -768,14 +768,14 @@
"oN" = (/turf/unsimulated/wall,/area/centcom)
"oO" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
-"oQ" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "merc_shuttle_sensor"; pixel_x = 8; pixel_y = 25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"oQ" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oR" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "merc_shuttle_pump"},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1331; id_tag = "merc_shuttle"; pixel_x = -8; pixel_y = 25; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oS" = (/obj/machinery/door/airlock/vault{name = "Armory"; req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"oT" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom)
"oU" = (/turf/unsimulated/floor{icon_state = "warnplate"; dir = 8},/area/centcom)
"oV" = (/turf/unsimulated/floor{name = "plating"},/area/centcom)
"oW" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
-"oX" = (/obj/machinery/flasher{id = "syndieflash"; pixel_x = 0; pixel_y = 28},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
+"oX" = (/obj/structure/closet/syndicate/suit{name = "suit closet"},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oY" = (/obj/item/device/radio/electropack,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
"oZ" = (/obj/machinery/door/airlock/external{density = 1; frequency = 1331; id_tag = "merc_shuttle_outer"; name = "Ship External Access"; req_access = list(150)},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "smindicate"; name = "Outer Airlock"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
"pa" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
@@ -802,7 +802,7 @@
"pv" = (/obj/item/device/multitool,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/reinforced{icon_state = "table"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"pw" = (/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/reinforced{icon_state = "table"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"px" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"py" = (/obj/machinery/vending/assist{contraband = null; name = "AntagCorpVend"; products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"py" = (/obj/structure/table,/obj/item/weapon/kitchen/utensil/knife{pixel_x = -6},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = -1},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 4},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 9},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"pz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
"pA" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
"pB" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
@@ -830,10 +830,10 @@
"pX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor,/area/centcom/living)
"pY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor,/area/centcom/living)
"pZ" = (/turf/unsimulated/wall,/area/centcom/suppy)
-"qa" = (/obj/structure/table,/obj/item/weapon/kitchen/utensil/knife{pixel_x = -6},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = -1},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 4},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 9},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"qa" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"qb" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "admin_shuttle"; pixel_x = -25; pixel_y = 0; req_one_access = list(101); tag_door = "admin_shuttle_hatch"},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
"qc" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Brig"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"qd" = (/obj/structure/closet/syndicate/suit{name = "suit closet"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"qd" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"qe" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 4},/turf/space,/area/shuttle/administration/centcom)
"qf" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom)
"qg" = (/obj/machinery/vending/snack,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
@@ -860,7 +860,7 @@
"qB" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom/suppy)
"qC" = (/obj/structure/closet{name = "custodial"},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"qD" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
-"qE" = (/obj/structure/table,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"qE" = (/obj/structure/table,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"qF" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate{pixel_x = -1; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"qG" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 4},/turf/space,/area/shuttle/administration/centcom)
"qH" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/administration/centcom)
@@ -881,7 +881,7 @@
"qW" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_bay_door"; locked = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom/living)
"qX" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/supply/dock)
"qY" = (/turf/simulated/shuttle/floor,/area/supply/dock)
-"qZ" = (/obj/machinery/sleeper,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"qZ" = (/obj/machinery/sleeper,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"ra" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"rb" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4; start_pressure = 740.5},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rc" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = -2; pixel_y = -2},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
@@ -936,7 +936,7 @@
"rZ" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock)
"sa" = (/obj/machinery/door/window{dir = 1; name = "Surgery"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"sb" = (/obj/machinery/telecomms/allinone{intercept = 1},/obj/machinery/door/window/northright{name = "Telecoms Mainframe"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"sc" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"sc" = (/obj/structure/table,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/clothing/glasses/night,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"sd" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/supply/dock)
"se" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"sf" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/latex,/obj/item/weapon/surgicaldrill,/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
@@ -954,7 +954,7 @@
"sr" = (/obj/structure/table,/obj/item/roller{pixel_y = 8},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"ss" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"st" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"su" = (/obj/item/weapon/weldingtool,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"su" = (/obj/structure/table,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/signaler{pixel_y = 2},/obj/item/clothing/glasses/night,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"sv" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "supply_shuttle"; pixel_x = 25; pixel_y = 0; req_one_access = list(13,31); tag_door = "supply_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/supply/dock)
"sw" = (/obj/machinery/door/airlock/centcom{name = "Commander Quarters"; opacity = 1; req_access = list(109)},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living)
"sx" = (/obj/structure/table,/turf/unsimulated/floor{dir = 9; icon_state = "carpetside"},/area/centcom/living)
@@ -966,7 +966,7 @@
"sD" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/kitchen/rollingpin,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
"sE" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/shuttle/floor,/area/supply/dock)
"sF" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock)
-"sG" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw{pixel_y = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"sG" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"sH" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"sI" = (/obj/machinery/chemical_dispenser/full,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
"sJ" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -1136,7 +1136,7 @@
"vR" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/security,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/security,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
"vS" = (/obj/structure/table/rack,/obj/item/rig_module/mounted,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
"vT" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
-"vU" = (/obj/structure/sign/securearea{name = "\improper CAUTION"; pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"vU" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"vV" = (/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/control)
"vW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control)
"vX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control)
@@ -1447,7 +1447,7 @@
"BQ" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors."; id = "CentComPort"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"BR" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"BS" = (/obj/machinery/computer/secure_data,/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North"; dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
-"BT" = (/obj/structure/bed/chair{dir = 4},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"BT" = (/obj/structure/sign/securearea{name = "\improper CAUTION"; pixel_x = 32},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"BU" = (/obj/structure/table/woodentable/holotable,/obj/structure/window/reinforced/holowindow,/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor{icon_state = "dark"},/area/holodeck/source_courtroom)
"BV" = (/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/shuttle/escape/centcom)
"BW" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/transport1/centcom)
@@ -1510,9 +1510,9 @@
"Db" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/centcom/holding)
"Dc" = (/obj/machinery/door/airlock/glass{name = "Arrivals Bar"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"Dd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
-"De" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle West"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"De" = (/obj/item/weapon/weldingtool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"Df" = (/obj/structure/window/shuttle{icon_state = "window1"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
-"Dg" = (/obj/structure/bed/chair{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle East"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Dg" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 2; pixel_y = 3},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"Dh" = (/turf/unsimulated/beach/sand{tag = "icon-desert3"; icon_state = "desert3"},/turf/unsimulated/floor{tag = "icon-siding4"; name = "plating"; icon_state = "siding4"},/area/centcom/holding)
"Di" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{tag = "icon-siding8"; name = "plating"; icon_state = "siding8"},/area/centcom/holding)
"Dj" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/amanita_pie,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
@@ -1522,7 +1522,7 @@
"Dn" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
"Do" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
"Dp" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "carpetside"},/area/centcom/holding)
-"Dq" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Dq" = (/obj/structure/computerframe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"Dr" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 10; icon_state = "carpetside"},/area/centcom/holding)
"Ds" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/turf/unsimulated/floor{tag = "icon-siding4"; name = "plating"; icon_state = "siding4"},/area/centcom/holding)
"Dt" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/boiledrice,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
@@ -1938,7 +1938,7 @@
"Ln" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
"Lo" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron13"},/area/shuttle/skipjack/station)
"Lp" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron12"},/area/shuttle/skipjack/station)
-"Lq" = (/obj/machinery/atmospherics/pipe/tank/air,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Lq" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"Lr" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/skipjack/station)
"Ls" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron3"},/area/shuttle/skipjack/station)
"Lt" = (/obj/structure/table,/obj/item/weapon/deck,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
@@ -1980,7 +1980,7 @@
"Md" = (/obj/structure/bed,/obj/item/weapon/bedsheet/hos,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Me" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron5"},/area/shuttle/skipjack/station)
"Mf" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron9"},/area/shuttle/skipjack/station)
-"Mg" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Mg" = (/obj/machinery/flasher{id = "syndieflash"; pixel_x = 0; pixel_y = 28},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
"Mh" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Mi" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron14"},/area/shuttle/skipjack/station)
"Mj" = (/obj/item/pizzabox/meat,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
@@ -2004,7 +2004,7 @@
"MB" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes,/obj/structure/table/reinforced{icon_state = "table"},/obj/item/weapon/flame/lighter/zippo,/obj/item/clothing/gloves/yellow,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/card/emag,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"MC" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 28},/turf/unsimulated/floor{tag = "icon-whitecorner (NORTH)"; icon_state = "whitecorner"; dir = 1},/area/centcom/holding)
"MD" = (/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"ME" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"ME" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "merc_shuttle_sensor"; pixel_x = 8; pixel_y = 25},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"MF" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"MG" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_east_sensor"; pixel_x = -25},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"MH" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron2"},/area/shuttle/skipjack/station)
@@ -2020,11 +2020,11 @@
"MR" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
"MS" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/holding)
"MT" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/holding)
-"MU" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
+"MU" = (/obj/machinery/vending/assist{contraband = null; name = "AntagCorpVend"; products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"MV" = (/turf/unsimulated/beach/sand{tag = "icon-desert2"; icon_state = "desert2"},/area/centcom/holding)
"MW" = (/obj/item/weapon/inflatable_duck,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/holding)
"MX" = (/obj/structure/sign/redcross,/turf/unsimulated/wall,/area/centcom/holding)
-"MY" = (/obj/machinery/status_display{pixel_y = 30},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"MY" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"MZ" = (/turf/unsimulated/beach/sand{tag = "icon-desert1"; icon_state = "desert1"},/area/centcom/holding)
"Na" = (/obj/structure/window/shuttle{icon_state = "window12"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
"Nb" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
@@ -2041,6 +2041,7 @@
"Nm" = (/obj/machinery/computer/med_data,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Nn" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_northeast_lock"; locked = 1; req_access = list(150)},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"No" = (/mob/living/simple_animal/crab,/turf/unsimulated/beach/sand{tag = "icon-desert3"; icon_state = "desert3"},/area/centcom/holding)
+"Np" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"Nq" = (/obj/machinery/hologram/holopad,/turf/unsimulated/floor{dir = 9; icon_state = "whitegreen"},/area/centcom/holding)
"Nr" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand{tag = "icon-desert_dug"; icon_state = "desert_dug"},/area/centcom/holding)
"Ns" = (/obj/machinery/sleeper{icon_state = "sleeper_0-r"; orient = "RIGHT"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
@@ -2053,7 +2054,7 @@
"Nz" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar West"; dir = 4},/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/holding)
"NA" = (/obj/effect/overlay/palmtree_l,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/holding)
"NB" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_southeast_lock"; locked = 1; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"NC" = (/obj/machinery/status_display{pixel_y = -30},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"NC" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"ND" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"NE" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
"NF" = (/obj/structure/closet/hydrant{pixel_x = 30; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
@@ -2066,23 +2067,23 @@
"NM" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"NN" = (/obj/machinery/door/airlock/glass_mining{name = "Shuttle Cargo"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
"NO" = (/obj/machinery/hologram/holopad,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/holding)
-"NP" = (/obj/structure/bed/roller,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
-"NQ" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"NP" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"NQ" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"NR" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"NS" = (/turf/unsimulated/beach/sand{tag = "icon-beach"; icon_state = "beach"},/area/centcom/holding)
-"NT" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"NT" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"NU" = (/obj/item/robot_parts/robot_suit,/obj/item/robot_parts/r_leg,/obj/item/robot_parts/r_arm,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"NV" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"NW" = (/turf/unsimulated/beach/sand{tag = "icon-beachcorner"; icon_state = "beachcorner"},/area/centcom/holding)
"NX" = (/turf/unsimulated/beach/sand{tag = "icon-beach (SOUTHEAST)"; icon_state = "beach"; dir = 6},/area/centcom/holding)
-"NY" = (/obj/structure/closet/crate/freezer/rations,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"NY" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
"NZ" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"Oa" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
"Ob" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac)
"Oc" = (/obj/structure/table/rack,/obj/item/weapon/rig/light/hacker,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Od" = (/obj/structure/table/rack,/obj/item/weapon/rig/industrial,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Oe" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_southwest_lock"; locked = 1; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"Of" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_east_vent"; tag_exterior_door = "vox_northeast_lock"; frequency = 1331; id_tag = "vox_east_control"; tag_interior_door = "vox_southeast_lock"; pixel_x = -24; req_access = list(150); tag_chamber_sensor = "vox_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Of" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
"Og" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"Oh" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Oi" = (/obj/item/weapon/wrench,/obj/item/weapon/mop,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
@@ -2092,12 +2093,12 @@
"Om" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Medical"; dir = 4},/turf/unsimulated/floor{dir = 4; icon_state = "whitegreencorner"},/area/centcom/holding)
"On" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
"Oo" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"Op" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
+"Op" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle West"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Oq" = (/obj/machinery/bodyscanner,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
"Or" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
"Os" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"Ot" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"Ou" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_west_vent"; tag_exterior_door = "vox_northwest_lock"; frequency = 1331; id_tag = "vox_west_control"; tag_interior_door = "vox_southwest_lock"; pixel_x = 24; req_access = list(150); tag_chamber_sensor = "vox_west_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Ou" = (/obj/structure/bed/chair{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle East"; dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Ov" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/shuttle/skipjack/station)
"Ow" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast{dir = 2; id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Ox" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
@@ -2112,13 +2113,13 @@
"OG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast{dir = 2; id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"OH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast{dir = 2; id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"OI" = (/obj/structure/table,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
-"OJ" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
-"OK" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"OJ" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"OK" = (/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"OL" = (/obj/structure/table/rack,/obj/item/weapon/melee/energy/sword/pirate,/obj/item/clothing/suit/space/pirate,/obj/item/clothing/suit/space/pirate,/obj/item/weapon/tank/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
-"OM" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
+"OM" = (/obj/machinery/atmospherics/pipe/tank/air,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"ON" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
-"OO" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/crossbow,/obj/item/stack/rods{amount = 10},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
-"OP" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"OO" = (/obj/machinery/body_scanconsole,/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
+"OP" = (/obj/machinery/atmospherics/pipe/tank/air,/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"OQ" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/vox/stealth,/obj/item/clothing/head/helmet/space/vox/stealth,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/clothing/under/vox/vox_robes,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
"OR" = (/obj/structure/bed/chair{dir = 1},/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/clothing/head/pirate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"OS" = (/obj/machinery/door/airlock/command{name = "Thunderdome Administration"; req_access = list(102)},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
@@ -2136,6 +2137,27 @@
"Pe" = (/obj/machinery/camera/network/thunder{c_tag = "Thunderdome Arena"; invisibility = 101},/turf/simulated/floor/bluegrid,/area/tdome)
"Pf" = (/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach)
"Pg" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach)
+"Ph" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
+"Pi" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Pj" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
+"Pk" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
+"Pl" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Pm" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_east_vent"; tag_exterior_door = "vox_northeast_lock"; frequency = 1331; id_tag = "vox_east_control"; tag_interior_door = "vox_southeast_lock"; pixel_x = -24; req_access = list(150); tag_chamber_sensor = "vox_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "vox_east_vent"},/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Pn" = (/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Po" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Pp" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_west_vent"; tag_exterior_door = "vox_northwest_lock"; frequency = 1331; id_tag = "vox_west_control"; tag_interior_door = "vox_southwest_lock"; pixel_x = 24; req_access = list(150); tag_chamber_sensor = "vox_west_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "vox_west_vent"},/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Pq" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Pr" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Ps" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/crossbow,/obj/item/stack/rods{amount = 10},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Pt" = (/obj/machinery/floodlight,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Pu" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Pv" = (/obj/machinery/status_display{pixel_y = -30},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"Pw" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Px" = (/obj/structure/bed/chair{dir = 4},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Py" = (/obj/structure/bed/roller,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Pz" = (/obj/machinery/iv_drip,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"PA" = (/obj/machinery/recharge_station,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"PB" = (/obj/structure/closet/crate/freezer/rations,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
(1,1,1) = {"
aaabacadaeafagahaaaiajakalamanaoagafajacadahakaeamaiaoalahajeEapaqarasatauavawaxayazaAaBaCaDaEaFaGaHaIaJaKawaxayazaAaBaCaDaEaFaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtwtwtwtwtwtwtwtwtwtwtwtwtwaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaQ
@@ -2238,31 +2260,31 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMmumumumumumuaMaMaMaMaMaMaMaMaMaMnvrPrIrIrIrBnzaMaMndnenfngnenenerlihncnjnknlihmumumumumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMnvnHnInJninLnnnHnzaMndnenmnmnenenenenCnonononpihihihihihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMmumumumuaMaMaMaMaMaMaMaMaMnHnQnRnRnSnRnRnLnHaMndnqnrnsntneneneihnonononuihbOkQbTihmumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMnHnZnRnRnRnRoanLnHaMndnenAnAnenenepaihnKnonDnEihbLkQmkihmumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHofnRnRognRnRohnHaMndnenenenenenenMihihihihihihbPkQnGihmumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMnHDgnRnRnRnRoaDqnHaMndnenAnAnenenepaihnKnonDnEihbLkQmkihmumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHofnRnRLqnRnRohnHaMndnenenenenenenMihihihihihihbPkQnGihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMomnHonnHnHnHnHnHooaMnTnananUihkdkdkdihkTkTnVnWihcikQrcihmumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoCoyoaounFnHaMaMaMaMaMaMobkdkdkdoclalaododihcikQrcihmumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoCoyNpounFnHaMaMaMaMaMaMobkdkdkdoclalaododihcikQrcihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoBoAoanRornHaMaMaMaMaMaMoikdkdkdihojlaihihihokolokihihihihmumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHoBoyoanRoGnHnzaMaMmPmKoFihkdkdkdihihihihnOnOkQkQkQnPnPpKihihmumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHNPoyoanRNCnHnzaMaMmPmKoFihkdkdkdihihihihnOnOkQkQkQnPnPpKihihmumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHnHnHnHvLoyoanRoLnHnHnHnHnzototihPakdkdkdihnYnXkQkQkQkQkQkQkQkQqKihmumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHpioXoYnHnRoHnRoJnHnHoOoQoRoZpmpnpmkdkdkdkdoSkQkQkQkQkQoDkQkQkQkQoxihmumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHpiMgoYnHnRoHnRoJnHnHoOMEoRoZpmpnpmkdkdkdkdoSkQkQkQkQkQoDkQkQkQkQoxihmumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMphoWpjoWnHnHnHpbnHnHpfoOplpooZpmpLpmkdkdkdkdihoqopkQkQkQkQkQkQkQkQoMihmumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMnHnHphpknHnHnRnRpynHnHpzptpznHoIoIihoPnanUihihihihowovkQkQkQozozoeihihmumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMnHnHphpknHnHMYnRMUnHnHpzptpznHoIoIihoPnanUihihihihowovkQkQkQozozoeihihmumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHpxnRnRpHnHnRnRnRnHrbsoOZpInHmBaMmBaMaMaMaMmumuihihihokpcokihihihihmumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVpdpepepepepApApepepepepgoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqanRnRnRpCnRnRnRpJnRnRnRqdnHmKmKmKmKaMaMaMaMmumumuihoEkQoEihmumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVpdpepepepepApApepepepepgoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHpynRnRnRpCnRnRnRpJnRnRnRoXnHmKmKmKmKaMaMaMaMmumumuihoEkQoEihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVpdpppqprpspeqbpupepvpwpepepepgoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMnHqCnRnRnRqcnRnRnRqpnRnRnRqFnHaMaMaMaMaMaMaMaMaMmumuihoEkQoEihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpdpepBpBpBpBpeqDqDpepBpBpDpEpepepgoVpFpFpFpFpFaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnvnHnHnHnHnHnHnRnRnRnHnHnHnHnHnHnzaMaMaMaMaMmAaMmBmumuihoEkQoEihmumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpepepMpNpOpPpepBpBpQpBpBpBpBpRpSpeoVpFpTpUpVpFpFpFpFpFpWpXpXpYpFpFaMaMaMaMaMaMaMaMpZpZpZpZpZpZpZpZpZpZpZaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqZrasesrqEnHrenRnRnHrfrfrfrgrgnHaMaMaMaMaMmAmBmumumuihoEkQoEihmumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpepepMpNpOpPpepBpBpQpBpBpBpBpRpSpeoVpFpTpUpVpFpFpFpFpFpWpXpXpYpFpFaMaMaMaMaMaMaMaMpZpZpZpZpZpZpZpZpZpZpZaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqZrasesrqEnHqanRqdnHsurfrfrgscnHaMaMaMaMaMmAmBmumumuihoEkQoEihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfqgpBqhqhqhpepBpBpeqiqjqkqlqmqnpeoVpFqopUpUqIqqqrqsqtquqsqvqwqxpFpFpFpFpFpFpFpFpFpFqyqzqzqzqzqzqzqzqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMnxrjrjrjrjrjnHnRnRnRnHrenRnRnRrknwaMaMaMaMaMmPaMmumumuihihyxihihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqGqfpBpBpBpBpBpQpBpBpepepepepepepeqHrdpFpFpFpFpFqqqvqsqJOaqsqvqvqvqLqMqMqMqMqMqMqMqMqNqyqOqPqPqPqPqPqQqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMnhrCrDrjrjrjrinRnRnRrqnRnRnRrGrHmiaMaMaMaMaMmAmBmBmumumuihihihmumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqRpeqSpBqSpBqSpepBpBpBqTqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqvqvqLqMqMqMqMqMqMqMqMqNqyqXqYqYqYqYqYqXqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnyrjrjrjrjrjrtnRnRnRrAnRnRnRnRrSnBaMaMaMaMaMmAaMaMmBmumumumumumumumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpepepepepepepepBpBrhpBqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqqqqpFpFpFpFpFpFpFpFpFpZqyqXqYqYqYqYqYqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHrErjrjrjscnHpzrFpznHoKoKrOnRrQnHaMaMaMaMaMaMaMaMaMmumumumumumumumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpermrnrormrppepBpBpBrRqUoVoVoVoVoVoVpFpFpFpFpFqvqvqsqJquqsqvrrrspFrTrururvpFrwrxrypZqzqXqYqYqYqYrzrZpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHspsasHssstnHsunRvUnHsbnHnHnNnHnHaMaMaMaMaMaMaMmAaMmBmumumumumumumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfrJrJrJrJrJpQpBpBpepepepepepepepgoVpFpTpUpVpFqvqvqsqJrKqsqvqqqqpFrLrLrLrLpFrMrxrNpZqzqXqYqYqYqYqYsdpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsGrjsfslnHnHnRsJsKnHnHnHnRnRLxnHaMaMaMaMaMaMaMmAmBmBmumumumumumumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpepepepepepepepBpBrhpBqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqqqqpFpFpFpFpFpFpFpFpFpZqyqXnZqYqYqYogqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHrErjrjrjoGnHpzrFpznHoQoKrOnRrQnHaMaMaMaMaMaMaMaMaMmumumumumumumumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpermrnrormrppepBpBpBrRqUoVoVoVoVoVoVpFpFpFpFpFqvqvqsqJquqsqvrrrspFrTrururvpFrwrxrypZqzqXqYqYqYqYrzrZpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHspsasHssstnHDenRBTnHsbnHnHnNnHnHaMaMaMaMaMaMaMmAaMmBmumumumumumumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfrJrJrJrJrJpQpBpBpepepepepepepepgoVpFpTpUpVpFqvqvqsqJrKqsqvqqqqpFrLrLrLrLpFrMrxrNpZqzqXqYqYqYqYqYsdpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHvUrjsfslnHnHnRsJsKnHnHnHsGnRLxnHaMaMaMaMaMaMaMmAmBmBmumumumumumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqGqfrUrJrJrJrJpepBpBpBpBpBpepBrVrWpeoVpFqopUpUqIqvqvqvqvqvqvqvqvqvpFrLrXrYrYpFpFsqpFpZqzqXqYqYqYqYsvqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsWsXsYnHaMnHsZsZsZnHaMnHnLtatbnHaMaMaMaMaMaMaMmAaMmBaMmumumumumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqRpepesgshshshpepBpNsipNpBpQpBsjskpeoVpFpFpFpFpFpFpFswpFpFpFqvqvqvsmrLsnsnrLrLrLrLrYpZqzqXqYqYqYqYqYsdpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsZsZsZnHaMomtmtntoooaMnHsZsZsZnHaMaMaMaMaMaMaMmAmBmBmBmBmBmumumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVqRperJrJrJrJpepBsipNsipBpeqSpepeqHoVpFsxsyszpFsAsBsBsBsCpFqvqvqvqvrLrLrLrLsDrLrLrYpZqzqXqYqYqYqYsEsFpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMomtmtntoooaMaMaMaMaMaMaMomtmtntoooaMaMaMaMaMaMaMmAaMmBaMmBaMaMmumumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVqRpesLsMsIpepBpBpBpBpBpepepeqHoVoVpFsOsPsQsRsBsBsBsBsSpFqvqvqvsmsTrLrLrLsUrLrLsVpZqzqXqYqYqYqYqYqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVqRpesLsMsIpepBpBpBpBpBpepepeqHoVoVpFsOsPsQsRsBsBsBsBsSpFqvqvqvsmsTrLrLrLsUrLrLsVpZqzqXnZqYqYqYogqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVqRpepepepepepepepepepeqHoVoVoVoVpFpFtctdpFpFpFtctetdpFqvqvqvpFtftgtgtgtgtgthpFpZqztitjqYqYqYtktlqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVpFtptptptptptptptptppFpFsNpFpFtptptptptptptppFpZqztrtstttttttstuqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvyhyhyhyhyhyhyhtptptptxtxtxtxtxtxpFtytztypFtxtxtxtxtxtxtxtxpZqzqztAtBtBtBtCqzqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu
@@ -2287,39 +2309,39 @@ mumumumumumumumumumumuAnAnAnAnAnAoArArArAsAnAnAnAnAnAnAnAnAnAnAnmumumumumumumumt
mumumumumumumumumumumuAnAnAnAnAnAKAZASBaAKAnAnAnAnAnAnAnAnAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzMzNzNzNzNBvBvzNzNzPaMtvBzxQxQyYyXtvzvzwzwzvAGzQDCzHCNAJDCDCDCAPCNaMaMaMaMaMaMaMaMaMaMaMaMzRzSNaNaNazTzUaMaMaMaMaMtxzVururururzWtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumumumumumumumumuAnAnAnAnAnAKBMASASAKAnAnAnAnAnAnAnAnAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYzZAaBYAcAcAdCnzNzPtvtvxcxctvtvtvzvzvzvzvAQzQDCzHCNBcBbBcBdBcCNaMaMaMaMaMaMaMaMaMaMaMzRAiNiNjNkNlNmAlzUaMaMaMaMtxtxtxtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumumumumuAnAnAnArDEArDIAnDUDEArDIEpDWArArArArArAsAnAnAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYAmAcAcAcAcAcAcEsErwoxQxQxQxQxQxOzvBezvBezFzQDCBtBfAJDCBFDCBGCNaMaMaMaMaMaMaMaMaMaMzRAiAMAvADAvADAvBOAlzUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuAnAnAnAnFYFZASASASASASASASASASASASASASASASASAKAnAnAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYAxAyAzAzAzAzAzzNAAxPxQxQxQxQxQxczvBezvBezJzQDCBtBfBPDCBRBQBSCNaMaMaMaMaMaMaMaMaMaMACADADADBNNcADADADADACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuAnAnASHkFYHkASASASASASASASASASASASASASASASASHmIJIIAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAEzNzNzNzNzNzNzNzNAAaMxkxQxQxQxQxQtvzvBezvBeAGCeCdCfCNBcCgCiChBcCNaMaMaMaMaMaMaMaMaMaMAtADBuNhNeNgNeNfCrADAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumumuAnAnAnAnFYFZASASASASASASASASASASASASASASASASAKAnAnAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYAxAyAzAzAzAzAzzNAAxPxQxQxQxQxQxczvBezvBezJzQDCBtBfBPDCBRBQBSCNaMaMaMaMaMaMaMaMaMaMACADADADBNNcOKADADADACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumumuAnAnASHkFYHkASASASASASASASASASASASASASASASASHmIJIIAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAEzNzNzNzNzNzNzNzNAAaMxkxQxQxQxQxQtvzvBezvBeAGCeCdCfCNBcCgCiChBcCNaMaMaMaMaMaMaMaMaMaMAtNTBuNhNeNgNeNfCrNQAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumuAnAnFYHkFYAnAnAnDUArArAsEpDUArILDIEpISASASASEpIUITAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHCNCNCNCNCNCNCNCNCNCjDCDCCkAPCNCNCNaMaMaMaMaMaMaMaMAtIVACATARAUARATACIVAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuAnFYFYAnAnAnAnAnAnAnAnAKASASBMAKIWASAKASASASEpIUIXAnAnISmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWAWAWAWAWAWAWAWAWAWAWAWAXAYIYJaClCmCmCmCmCmCNDyCoCpDCDCCuAPCoDyCNaMaMaMaMaMaMaMaMAtADCrAtMQCvMUAtBuADAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumumuAnFYFYAnAnAnAnAnAnAnAnAKASASBMAKIWASAKASASASEpIUIXAnAnISmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWAWAWAWAWAWAWAWAWAWAWAWAXAYIYJaClCmCmCmCmCmCNDyCoCpDCDCCuAPCoDyCNaMaMaMaMaMaMaMaMAtADCrAtNYCvOfAtBuADAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumuAnFYAnAnAnmumuAnDUArDIJcJbASAZAKJbAZAKASASASISIUIUIUJlAKmumumumumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWBlBmBnBlBmBmBoBpBqBmBrBsAYAWAWCwCmCmCmCmCmCNDyCxCpDCDCDCAPCxDyCNCNCNCNCNCNaMaMaMACADCrCCMQMRMPCCBuADACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuAnJoJoAnmumumuAnJpJqJqDWArArArDEArArJrASASASAKIUIUIUJyAKmumumumumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBlByJzBABBBCBCBCBCBCBCBDBEAYAWAWClCmCmCmCmCmCNDyCxCpDCDCDCCyCxDyDyDyDyDyDyCNaMaMzRAiADCrDfMQBwMPDfBuADAlzUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumumuAnJoJoAnmumumuAnJpJqJqDWArArArDEArArJrASASASAKIUIUIUJyAKmumumumumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBlByJzBABBBCBCBCBCBCBCBDBEAYAWAWClCmCmCmCmCmCNDyCxCpDCDCDCCyCxDyDyDyDyDyDyCNaMaMzRAiNTCrDfMQBwMPDfBuNQAlzUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumuAnFYFYFYFYAnAnmumuAnJAJBJAEpASASASASASASASASASASAKJDJCJEDUJrmumumumumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBIBJBKBJBLBJBJBJBJBJBJBJJFAWAWAWCNCNCNCNCzCACNDyCxCpDCDCDCCFCECGCGCGCGCGCGCGCGCHAtBgADCrAlACJHACAiBuADBgAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuJIFYFYFYFYJJAnmumuISJKJAJAEpASASASASASASASASASASAKAnAnAnAnAnmumumumumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBWBXJLBZBBCaCaCaCaCaCaCbCcAYAWAWCNCJCICKCPCPCNCQCLCRDCDCDCDCDDDCDCCSDCDCCTCVCmCVJNADADADMYCWADADMYADADCrACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuJOJVJUFYJWFYFYmumuHmJXJYAoArArArArArArILArDIEpDUDEILArArArArArArAsmumuaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWBWBmCsBWBmBmBoBpBqBmCtBsAYAWAWCNCYCXDbCPCPDcDCDDDCDCDCDCDCDDDCDCDCDCDCCTDdCGCHAtDeADCrCCBuADCrCCBuADDgAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumuJIFYFYFYFYJJAnmumuISJKJAJAEpASASASASASASASASASASAKAnAnAnAnAnmumumumumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBWBXJLBZBBCaCaCaCaCaCaCbCcAYAWAWCNCJCICKCPCPCNCQCLCRDCDCDCDCDDDCDCCSDCDCCTCVCmCVJNADADADOJCWADADOJADADCrACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumuJOJVJUFYJWFYFYmumuHmJXJYAoArArArArArArILArDIEpDUDEILArArArArArArAsmumuaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWBWBmCsBWBmBmBoBpBqBmCtBsAYAWAWCNCYCXDbCPCPDcDCDDDCDCDCDCDCDDDCDCDCDCDCCTDdCGCHAtOpADCrCCBuADCrCCBuADOuAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumuJZFYKaFYJUFYFYmumuAnAnAnAKASASASASASASAKKbKcKcKcKdAKASASASASASASAKmuaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWAWAWAWAWAWAWAWAWAWAWAWAXAYAWAWCNDrDpDFCPCPDcDCDDDCDCDCDCDMDLCGEcDCDCECEdCNaMaMCCBuADCrCMBuADCrCMBuADCrCCaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumuAnFYKjFYOQFYFYmumuaMaMmuAKASAZASASASASHmKcKcKuKcKcHmASASASASAZASAKmuaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNEDCOCOCPCPCNEKEEEXDCEYDCCyFlDyFxDCCTGOFGCNaMaMCMBuADCrCMBuNcCrCMBuADCrCMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumuAnKxKwFYFYKyFYmumuaMaMmuAKASASASASASASEpKcKcKzKcKcEpASASASASASASAKmuaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNGTGRGRGRHfCZDaCPCPCPHQCPCPCPCPCPCPCPCPCPCPNyCPCNDyCxIKDCDCDCCFCECGJMDCDCKvKiCNaMaMDfBuADCrCMBuADCrCMBuADCrDfaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuAnAnFYFYFYFYAnmumumAaMaMAKASASISKAKCKBISKcKLKDKcKcISKAKCKBISASASAKaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMSMSMSMSDhDiDjDkDlCPDmDnDoDlCPCPCPCPCPCPCPCPCNDyCxMTDCDCDCDCDDDCDCDCDCDCCTDdCGCHAtBTADCrDfBuADCrDfBuADDqAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuAnAnAnAnKMKNAnmumBmAaMaMHmASASHmaMaMaMDWDIKAKCKBDUJraMaMaMHmASASHmaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMVMSMSMSDsDiDtDuDlCPDmDvDwDlCPCPDxDxDxDxDxDxCNDyDzDADBDCDCDCDDDCDCDCDCDCCTCVCmCVKOADADNCADADADADADNCADCrACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumuAnAnFYFYFYFYAnmumumAaMaMAKASASISKAKCKBISKcKLKDKcKcISKAKCKBISASASAKaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMSMSMSMSDhDiDjDkDlCPDmDnDoDlCPCPCPCPCPCPCPCPCNDyCxMTDCDCDCDCDDDCDCDCDCDCCTDdCGCHAtPxADCrDfBuADCrDfBuADPwAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumuAnAnAnAnKMKNAnmumBmAaMaMHmASASHmaMaMaMDWDIKAKCKBDUJraMaMaMHmASASHmaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMVMSMSMSDsDiDtDuDlCPDmDvDwDlCPCPDxDxDxDxDxDxCNDyDzDADBDCDCDCDDDCDCDCDCDCCTCVCmCVKOADADPvADADADADADPvADCrACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumuAnAnAnAnAnAnmuaMaMaMaMaMKPKQKQKRaMaMaMaMaMaMaMaMaMaMaMaMaMKPKQKQKRaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMWMSMSMSDsDaCPCPCPNyCPCPCPCPCPDGDHDHDHDHDHDHCNCNCNCNMXKSKSCNCNCNCNDdCGCGCGCGCGCHEAACNNATzSzTKTzSzTATNNACBVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumumumumumumumuaMaMaMaMKPKVKUKRaMaMaMaMaMaMaMaMaMaMaMaMaMKPKVKUKRaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMSMZMSNdDsDiDNDODlCPDmDPDQDlCPDGDRDSDSDSDSDSCNDTDTDTNDDVDVKWDXDXCNDyDyDyDyCNaMaMAtNENFAtNHNIEaNKNJAtNLNGAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumumumumuaMaMaMaMaMKPKVKUKRaMaMaMaMaMaMaMaMaMaMaMaMaMKPKVKUKRaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNNoMSMSNrMSDsDiEeEfDlCPDmEgEhDlCPDGDSDSDSDSDSDSCNEiEjEjElDVDVDVDXDXCNCNCNCNCNCNaMaMAtNuNYAtNwNVEaEaKXAtNTNxAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumumumumuaMaMaMaMaMKYKQKQKZaMaMaMKYaMaMaMaMaMKZaMaMaMKYKQKQKZaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNNzMSMSMSMSEoDaCPCPCPCPCPCPCPCPCPDGDSDSLaEqLbLcCNEtDVDVDVEwExDVDVEyCNaMaMaMaMaMaMaMEAEBEBAtNQEaNREbNPAtEBEBBVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumumumumumumumuaMaMaMaMaMKPKVKUKRaMaMaMaMaMaMaMaMaMaMaMaMaMKPKVKUKRaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNNoMSMSNrMSDsDiEeEfDlCPDmEgEhDlCPDGDSDSDSDSDSDSCNEiEjEjElDVDVDVDXDXCNCNCNCNCNCNaMaMAtNuPBAtNwNVEaEaKXAtPANxAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumumumumumumumuaMaMaMaMaMKYKQKQKZaMaMaMKYaMaMaMaMaMKZaMaMaMKYKQKQKZaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNNzMSMSMSMSEoDaCPCPCPCPCPCPCPCPCPDGDSDSLaEqLbLcCNEtDVDVDVEwExDVDVEyCNaMaMaMaMaMaMaMEAEBEBAtPzEaNREbPyAtEBEBBVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumumumuaMaMaMaMaMaMaMaMMHLfMLMHaMaMaMLgMOMIMIMIMJLkaMaMaMMHNnLmMHaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSNANOMVNWNSEFEGEGEGEHEHEHEIEJLnELEMEHEHEHCNCNCNNvDVDVEwEPEQExERESCNaMaMaMaMaMaMaMETEVEVBVDYDZEaNtNsEAEVEVEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumumumuaMaMaMaMaMaMaMaMLsMpMwLsaMaMKYLsLrMmMnMoLrLsKZaMaMLsMGMFLsaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMSMSNWNXEZEZEZEZEZEHFaFbFcFdFeFfFgFbFaEHCNCNCNCNCNCNOmFiNqFkERESCNaMaMaMaMaMaMaMaMaMaMETATEUEUEUATEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumuaMaMaMaMaMaMaMaMLsOoOuLsaMaMLgMfMaOhOROhMaMeLkaMaMLsOfOgLsaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNPbMSNWNXEZEZEZEZEZEZEHFbFmFnFdFeFfFnFoFbEHFpFqFrFsFtCNDVFhFkDVDVEwFuaMaMaMaMaMaMaMaMaMaMaMETEVEVEVEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumumumumuaMaMaMaMaMaMaMaMLsOoPpLsaMaMLgMfPoOhOROhPnMeLkaMaMLsPmOgLsaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNPbMSNWNXEZEZEZEZEZEZEHFbFmFnFdFeFfFnFoFbEHFpFqFrFsFtCNDVFhFkDVDVEwFuaMaMaMaMaMaMaMaMaMaMaMETEVEVEVEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumumumuaMaMaMaMaMaMaMaMLyOeLpLoLpLpLXOdMaMaMaMaMaOcLyLpLpLoLpNBLXaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSNWNXEZEZEZEZEZEZEZEHFvFbFvFdFeFfFvFbFvEHFwDVDVDVDVMqDVDVDVDVDVFyFzaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumumumuaMaMaMaMaMaMaMaMLsMsMrMuMtMvLsOLMaMaMaMaMaOLLsMyMxMBMzMsLsaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNNWNXEZEZEZEZEZEZEZEZEHFAFbFbFdFeFfFbFbFBEHFCFDFEFFMCCNDVDVDVDVDVFHFIaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumuaMaMaMaMaMaMaMaMaMaMaMLsMsMDMDMDMELsOwOGOHMbOwOGOHLsOKMDMDMKMsLsaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHCNCNCNCNCNCNCNCNCNCNCNEHFJFKFKFdFeFfFLFLFMEHFNFOFPFQFRCNFSFTFUFVFWFXCNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumuaMaMaMaMaMaMaMaMaMaMaMLsMsMDMDMDPqLsOwOGOHMbOwOGOHLsPrMDMDMKMsLsaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHCNCNCNCNCNCNCNCNCNCNCNEHFJFKFKFdFeFfFLFLFMEHFNFOFPFQFRCNFSFTFUFVFWFXCNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumuaMaMaMaMaMaMaMaMaMaMaMLwMsMDMDMDMDMbMaMaMaMaMaMaMaMbMDMDMMMDMsLwaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeFeFeFeFeFeFeFeFeFeFeEHEHMNEHEHFeEHEHMNEHEHEHEHEHEHEHCNCNCNCNCNCNCNCNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuaMaMaMaMaMaMaMaMaMaMLWNbMDMDMDMDLsOOMaMaMaMaMaOPLsMDNMMDNUMsLWaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHEHEHEHNZEHEHEHFeFeFeFeFeFeEHFeEHFeFeFeFeFeFeFeFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuaMaMaMaMaMaMaMaMaMaMLeNbMDMDLgMDLoLpLkLjLiLhLgLpLoLlLkOjOiOkLeaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGaGbGbGbGbGcEHEHEHEHEHEHEHEHGdEHEHEHEHEHEHEHEHFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuaMaMaMaMaMaMaMaMaMKYLsLqOlOlLsOnOnOnLwLjLtLhLwOqOpOrLsOtOsLqLsKZaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGaGbGbGbGbGcEHGeGfGgGfGhGiGiGiGiGiGhGiGhGiGjEHFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumumuaMaMaMaMaMaMaMaMaMaMLWNbMDPtMDMDLsPsMaMaMaMaMaPuLsMDNMMDNUMsLWaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHEHEHEHNZEHEHEHFeFeFeFeFeFeEHFeEHFeFeFeFeFeFeFeFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumumuaMaMaMaMaMaMaMaMaMaMLeNbMDMDLgLlLoLpLkLjLiLhLgLpLoLlLkOjOiOkLeaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGaGbGbGbGbGcEHEHEHEHEHEHEHEHGdEHEHEHEHEHEHEHEHFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumumuaMaMaMaMaMaMaMaMaMKYLsOPOlOlLsOnPhOnLwLjLtLhLwOqOOOrLsOtOsOMLsKZaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGaGbGbGbGbGcEHGeGfGgGfGhGiGiGiGiGiGhGiGhGiGjEHFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumuaMaMaMaMmumuaMaMaMOvLdKsKsLYLXOnOnOnLWLjLiLhLWOrOrOxLyLZKsKsLdOyaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGkGbGbGbGbGlEHGiGmGmGmGmGmGiGiGiGmGmGmGmGnGoEHFeEHEHEHEHEHEHEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuaMaMaMaMmumuaMaMaMaMOvOzOzOyLsOBOAOnLeMaMaMaLeOrOrOCLsOvOzOzOyaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGkGpGqGqGbGbGrGiGiGsGtGsGiGiGiGiGiGsGtGsGuGiEHFeFeFeFeFeFeFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumumuaMaMaMaMmumuaMaMaMaMOvOzOzOyLsOBOAOnLePiMaPiLeOrOrOCLsOvOzOzOyaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGkGpGqGqGbGbGrGiGiGsGtGsGiGiGiGiGiGsGtGsGuGiEHFeFeFeFeFeFeFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumuaMaMaMaMmumuaMaMaMaMaMaMaMaMLsOnOnOnLyLpMbLpLXODOrOELsaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHEHFeEHEHEHEHEHEHEHEHGiGmGmGmGmGmGiGiGiGmGmGmGmGvGiEHEHEHEHEHEHEHFeEHEHEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMLsOnOnOFLsMcMaMdLsOrOrOILsaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAFeEHEHzazazazazaEHGxGxGxGxGxGxGxGxGxGxGxGxGxGyGxEHzbzbzbzbzbEHFeFeFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMMeLkOJOnLsMhMaMgLsONOMLgMfaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHEHEHHgHgHgHgHgEHGBGCGCGCGCGCGCGCGCGCGCGCGCGDGBEHHgHgHgHgHgEHEHEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+mumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMMeLkPjOnLsMhMaPlLsONPkLgMfaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHEHEHHgHgHgHgHgEHGBGCGCGCGCGCGCGCGCGCGCGCGCGDGBEHHgHgHgHgHgEHEHEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMOvMeLpMiMfMkMjMlMeMiLpMfOyaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGGGGGGGGGFGIGCGCGCGCGCGCGCGCGCGCGCGCGDGJGFGKGKGKGKGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumumumuaMaMaMaMmumuaMaMaMaMaMaMaMaMOvLdKsKsKsKsKsLdOyaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGMGGGMGGGFGIGCGCGCGCGCGCGCGCGCGCGCGCGDGJGFGKGNGKGNGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
mumumumumumuaMaMaMaMmumumuaMaMaMaMaMaMaMaMOvOzOzOzOzOzOyaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGGPcGGGGGFGIGCGCGCGCGCGPGQGPGCGCGCGCGDGJGFGKGKPdGKGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
From e602a7e286a1ff39ffbdafc4dd4f767a54b22ead Mon Sep 17 00:00:00 2001
From: Mloc
Date: Sat, 9 May 2015 23:00:26 +0100
Subject: [PATCH 2/9] remove the sub-area system
Removes area/list/related and area/master.
They were only used by the old lighting subarea system.
Signed-off-by: Mloc
---
.../components/unary/vent_pump.dm | 2 -
.../components/unary/vent_scrubber.dm | 2 -
code/__HELPERS/game.dm | 4 +-
code/game/area/Space Station 13 areas.dm | 3 -
code/game/area/areas.dm | 125 ++++++++----------
code/game/gamemodes/cult/hell_universe.dm | 5 +-
.../endgame/supermatter_cascade/universe.dm | 5 +-
code/game/machinery/alarm.dm | 33 ++---
.../atmoalter/area_atmos_computer.dm | 10 +-
code/game/machinery/computer3/computer.dm | 4 +-
code/game/machinery/computer3/networking.dm | 7 +-
code/game/machinery/doors/alarmlock.dm | 4 +-
code/game/machinery/hologram.dm | 3 +-
code/game/machinery/jukebox.dm | 17 +--
code/game/machinery/lightswitch.dm | 13 +-
code/game/machinery/machinery.dm | 4 +-
code/game/machinery/turret_control.dm | 10 +-
code/game/machinery/turrets.dm | 8 --
code/game/mecha/equipment/tools/tools.dm | 6 +-
code/game/objects/items/blueprints.dm | 28 ++--
.../objects/items/devices/radio/intercom.dm | 4 +-
code/modules/alarm/alarm.dm | 9 +-
code/modules/alarm/alarm_handler.dm | 3 +-
code/modules/events/infestation.dm | 9 +-
.../hydroponics/spreading/spreading.dm | 9 +-
code/modules/mob/living/silicon/ai/life.dm | 19 ++-
code/modules/power/apc.dm | 9 +-
code/modules/power/gravitygenerator.dm | 8 +-
code/modules/power/lighting.dm | 3 +-
code/modules/power/power.dm | 8 +-
code/modules/power/powernet.dm | 7 +-
31 files changed, 153 insertions(+), 228 deletions(-)
diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm
index 1920b8c6af2..e8494697dca 100644
--- a/code/ATMOSPHERICS/components/unary/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm
@@ -67,8 +67,6 @@
icon = null
initial_loc = get_area(loc)
- if (initial_loc.master)
- initial_loc = initial_loc.master
area_uid = initial_loc.uid
if (!id_tag)
assign_uid()
diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
index e5b6d3a8dc1..d09328d767d 100644
--- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
@@ -36,8 +36,6 @@
icon = null
initial_loc = get_area(loc)
- if (initial_loc.master)
- initial_loc = initial_loc.master
area_uid = initial_loc.uid
if (!id_tag)
assign_uid()
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 36282290db8..ea7dbd083c2 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -23,7 +23,7 @@
var/turf/loc = get_turf(O)
if(loc)
var/area/res = loc.loc
- .= res.master
+ .= res
/proc/get_area_name(N) //get area by its name
for(var/area/A in world)
@@ -34,7 +34,7 @@
/proc/get_area_master(const/O)
var/area/A = get_area(O)
if (isarea(A))
- return A.master
+ return A
/proc/in_range(source, user)
if(get_dist(source, user) <= 1)
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 6dcf4f93ef1..13f1b39d987 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -48,9 +48,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/has_gravity = 1
var/list/apc = list()
var/no_air = null
- var/area/master // master area used for power calcluations
- // (original area before splitting due to sd_DAL)
- var/list/related // the other areas of the same type as this
// var/list/lights // list of all lights on this area
var/list/all_doors = list() //Added by Strumpetplaya - Alarm Change - Contains a list of doors adjacent to this area
var/air_doors_activated = 0
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 176d170aae6..d3373c9d437 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -10,9 +10,7 @@
/area/New()
icon_state = ""
layer = 10
- master = src //moved outside the spawn(1) to avoid runtimes in lighting.dm when it references loc.loc.master ~Carn
uid = ++global_uid
- related = list(src)
all_areas += src
if(requires_power)
@@ -31,29 +29,24 @@
InitializeLighting()
/area/proc/get_contents()
- var/list/concat_contents = list()
- for (var/area/RA in related)
- concat_contents |= RA.contents
- return concat_contents
+ return contents
/area/proc/get_cameras()
var/list/cameras = list()
- for (var/area/RA in related)
- for (var/obj/machinery/camera/C in RA)
- cameras += C
+ for (var/obj/machinery/camera/C in src)
+ cameras += C
return cameras
/area/proc/atmosalert(danger_level, var/alarm_source)
if (danger_level == 0)
- atmosphere_alarm.clearAlarm(master, alarm_source)
+ atmosphere_alarm.clearAlarm(src, alarm_source)
else
- atmosphere_alarm.triggerAlarm(master, alarm_source, severity = danger_level)
+ atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level)
//Check all the alarms before lowering atmosalm. Raising is perfectly fine.
- for (var/area/RA in related)
- for (var/obj/machinery/alarm/AA in RA)
- if (!(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted && AA.report_danger_level)
- danger_level = max(danger_level, AA.danger_level)
+ for (var/obj/machinery/alarm/AA in src)
+ if (!(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted && AA.report_danger_level)
+ danger_level = max(danger_level, AA.danger_level)
if(danger_level != atmosalm)
if (danger_level < 1 && atmosalm >= 1)
@@ -63,17 +56,16 @@
air_doors_close()
atmosalm = danger_level
- for(var/area/RA in related)
- for (var/obj/machinery/alarm/AA in RA)
- AA.update_icon()
+ for (var/obj/machinery/alarm/AA in src)
+ AA.update_icon()
return 1
return 0
/area/proc/air_doors_close()
- if(!src.master.air_doors_activated)
- src.master.air_doors_activated = 1
- for(var/obj/machinery/door/firedoor/E in src.master.all_doors)
+ if(!air_doors_activated)
+ air_doors_activated = 1
+ for(var/obj/machinery/door/firedoor/E in all_doors)
if(!E.blocked)
if(E.operating)
E.nextstate = CLOSED
@@ -82,9 +74,9 @@
E.close()
/area/proc/air_doors_open()
- if(src.master.air_doors_activated)
- src.master.air_doors_activated = 0
- for(var/obj/machinery/door/firedoor/E in src.master.all_doors)
+ if(air_doors_activated)
+ air_doors_activated = 0
+ for(var/obj/machinery/door/firedoor/E in all_doors)
if(!E.blocked)
if(E.operating)
E.nextstate = OPEN
@@ -95,11 +87,8 @@
/area/proc/fire_alert()
if(!fire)
- master.fire = 1 //used for firedoor checks
- master.updateicon()
- for(var/area/A in related)
- A.fire = 1
- A.updateicon()
+ fire = 1 //used for firedoor checks
+ updateicon()
mouse_opacity = 0
for(var/obj/machinery/door/firedoor/D in all_doors)
if(!D.blocked)
@@ -111,11 +100,8 @@
/area/proc/fire_reset()
if (fire)
- master.fire = 0 //used for firedoor checks
- master.updateicon()
- for(var/area/A in related)
- A.fire = 0
- A.updateicon()
+ fire = 0 //used for firedoor checks
+ updateicon()
mouse_opacity = 0
for(var/obj/machinery/door/firedoor/D in all_doors)
if(!D.blocked)
@@ -183,56 +169,55 @@
/area/proc/powered(var/chan) // return true if the area has power to given channel
- if(!master.requires_power)
+ if(!requires_power)
return 1
- if(master.always_unpowered)
+ if(always_unpowered)
return 0
if(src.lighting_space)
return 0 // Nope sorry
switch(chan)
if(EQUIP)
- return master.power_equip
+ return power_equip
if(LIGHT)
- return master.power_light
+ return power_light
if(ENVIRON)
- return master.power_environ
+ return power_environ
return 0
// called when power status changes
/area/proc/power_change()
- for(var/area/RA in related)
- for(var/obj/machinery/M in RA) // for each machine in the area
- M.power_change() // reverify power status (to update icons etc.)
- if (fire || eject || party)
- RA.updateicon()
+ for(var/obj/machinery/M in src) // for each machine in the area
+ M.power_change() // reverify power status (to update icons etc.)
+ if (fire || eject || party)
+ updateicon()
/area/proc/usage(var/chan)
var/used = 0
switch(chan)
if(LIGHT)
- used += master.used_light
+ used += used_light
if(EQUIP)
- used += master.used_equip
+ used += used_equip
if(ENVIRON)
- used += master.used_environ
+ used += used_environ
if(TOTAL)
- used += master.used_light + master.used_equip + master.used_environ
+ used += used_light + used_equip + used_environ
return used
/area/proc/clear_usage()
- master.used_equip = 0
- master.used_light = 0
- master.used_environ = 0
+ used_equip = 0
+ used_light = 0
+ used_environ = 0
/area/proc/use_power(var/amount, var/chan)
switch(chan)
if(EQUIP)
- master.used_equip += amount
+ used_equip += amount
if(LIGHT)
- master.used_light += amount
+ used_light += amount
if(ENVIRON)
- master.used_environ += amount
+ used_environ += amount
var/list/mob/living/forced_ambiance_list = new
@@ -280,27 +265,23 @@ var/list/mob/living/forced_ambiance_list = new
L.client.played = world.time
/area/proc/gravitychange(var/gravitystate = 0, var/area/A)
-
A.has_gravity = gravitystate
- for(var/area/SubA in A.related)
- SubA.has_gravity = gravitystate
-
- if(gravitystate)
- for(var/mob/living/carbon/human/M in SubA)
- thunk(M)
- for(var/mob/M1 in SubA)
- M1.make_floating(0)
- else
- for(var/mob/M in SubA)
- if(M.Check_Dense_Object() && istype(src,/mob/living/carbon/human/))
- var/mob/living/carbon/human/H = src
- if(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.flags & NOSLIP)) //magboots + dense_object = no floaty effect
- H.make_floating(0)
- else
- H.make_floating(1)
+ if(gravitystate)
+ for(var/mob/living/carbon/human/M in A)
+ thunk(M)
+ for(var/mob/M1 in A)
+ M1.make_floating(0)
+ else
+ for(var/mob/M in A)
+ if(M.Check_Dense_Object() && istype(src,/mob/living/carbon/human/))
+ var/mob/living/carbon/human/H = src
+ if(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.flags & NOSLIP)) //magboots + dense_object = no floaty effect
+ H.make_floating(0)
else
- M.make_floating(1)
+ H.make_floating(1)
+ else
+ M.make_floating(1)
/area/proc/thunk(mob)
if(istype(get_turf(mob), /turf/space)) // Can't fall onto nothing.
diff --git a/code/game/gamemodes/cult/hell_universe.dm b/code/game/gamemodes/cult/hell_universe.dm
index 39f44023917..7a056deac26 100644
--- a/code/game/gamemodes/cult/hell_universe.dm
+++ b/code/game/gamemodes/cult/hell_universe.dm
@@ -54,9 +54,8 @@ In short:
runedec += 9000 //basically removing the rune cap
/datum/universal_state/hell/proc/AreaSet()
- for(var/area/ca in world)
- var/area/A = ca.master
- if(!istype(A,/area) || A.name=="Space")
+ for(var/area/A in world)
+ if(A.name=="Space")
continue
// Reset all alarms.
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
index 23729763a51..e97cf0a0a42 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
+++ b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
@@ -83,11 +83,10 @@ AUTOMATED ALERT: Link to [command_name()] lost."}
return
/datum/universal_state/supermatter_cascade/proc/AreaSet()
- for(var/area/ca in world)
- var/area/A=ca.master
+ for(var/area/A in world)
if(A.z in config.admin_levels)
continue
- if(!istype(A,/area) || istype(A,/area/space))
+ if(istype(A,/area/space))
continue
// Reset all alarms.
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 57b70f2bf93..2b8ea74117d 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -124,8 +124,6 @@
/obj/machinery/alarm/proc/first_run()
alarm_area = get_area(src)
- if (alarm_area.master)
- alarm_area = alarm_area.master
area_uid = alarm_area.uid
if (name == "alarm")
name = "[alarm_area.name] Air Alarm"
@@ -286,11 +284,10 @@
/obj/machinery/alarm/proc/elect_master()
- for (var/area/A in alarm_area.related)
- for (var/obj/machinery/alarm/AA in A)
- if (!(AA.stat & (NOPOWER|BROKEN)))
- alarm_area.master_air_alarm = AA
- return 1
+ for (var/obj/machinery/alarm/AA in alarm_area)
+ if (!(AA.stat & (NOPOWER|BROKEN)))
+ alarm_area.master_air_alarm = AA
+ return 1
return 0
/obj/machinery/alarm/proc/get_danger_level(var/current_value, var/list/danger_levels)
@@ -397,9 +394,8 @@
/obj/machinery/alarm/proc/apply_mode()
//propagate mode to other air alarms in the area
//TODO: make it so that players can choose between applying the new mode to the room they are in (related area) vs the entire alarm area
- for (var/area/RA in alarm_area.related)
- for (var/obj/machinery/alarm/AA in RA)
- AA.mode = mode
+ for (var/obj/machinery/alarm/AA in alarm_area)
+ AA.mode = mode
switch(mode)
if(AALARM_MODE_SCRUBBING)
@@ -1070,7 +1066,6 @@ FIRE ALARM
var/d2
if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon))
A = A.loc
- A = A.master
if (A.fire)
d1 = text("Reset - Lockdown", src)
@@ -1137,9 +1132,8 @@ FIRE ALARM
if (!( src.working ))
return
var/area/area = get_area(src)
- for(var/area/A in area.related)
- for(var/obj/machinery/firealarm/FA in A)
- fire_alarm.clearAlarm(loc, FA)
+ for(var/obj/machinery/firealarm/FA in area)
+ fire_alarm.clearAlarm(loc, FA)
update_icon()
return
@@ -1147,9 +1141,8 @@ FIRE ALARM
if (!( src.working))
return
var/area/area = get_area(src)
- for(var/area/A in area.related)
- for(var/obj/machinery/firealarm/FA in A)
- fire_alarm.triggerAlarm(loc, FA, duration)
+ for(var/obj/machinery/firealarm/FA in area)
+ fire_alarm.triggerAlarm(loc, FA, duration)
update_icon()
//playsound(src.loc, 'sound/ambience/signal.ogg', 75, 0)
return
@@ -1260,8 +1253,6 @@ Code shamelessly copied from apc_frame
user.machine = src
var/area/A = get_area(src)
ASSERT(isarea(A))
- if(A.master)
- A = A.master
var/d1
var/d2
if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai))
@@ -1300,8 +1291,6 @@ Code shamelessly copied from apc_frame
return
var/area/A = get_area(src)
ASSERT(isarea(A))
- if(A.master)
- A = A.master
A.partyreset()
return
@@ -1310,8 +1299,6 @@ Code shamelessly copied from apc_frame
return
var/area/A = get_area(src)
ASSERT(isarea(A))
- if(A.master)
- A = A.master
A.partyalert()
return
diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm
index 935feae3e21..e4efe662ae8 100644
--- a/code/game/machinery/atmoalter/area_atmos_computer.dm
+++ b/code/game/machinery/atmoalter/area_atmos_computer.dm
@@ -147,14 +147,10 @@
var/turf/T_src = get_turf(src)
if(!T_src.loc) return 0
var/area/A_src = T_src.loc
- if (A_src.master)
- A_src = A_src.master
var/turf/T_scrub = get_turf(scrubber)
if(!T_scrub.loc) return 0
var/area/A_scrub = T_scrub.loc
- if (A_scrub.master)
- A_scrub = A_scrub.master
if(A_scrub != A_src)
return 0
@@ -169,13 +165,11 @@
var/turf/T = get_turf(src)
if(!T.loc) return
var/area/A = T.loc
- if (A.master)
- A = A.master
for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in world )
var/turf/T2 = get_turf(scrubber)
if(T2 && T2.loc)
var/area/A2 = T2.loc
- if(istype(A2) && A2.master && A2.master == A )
+ if(istype(A2) && A2 == A)
connectedscrubbers += scrubber
found = 1
@@ -183,4 +177,4 @@
if(!found)
status = "ERROR: No scrubber found!"
- src.updateUsrDialog()
\ No newline at end of file
+ src.updateUsrDialog()
diff --git a/code/game/machinery/computer3/computer.dm b/code/game/machinery/computer3/computer.dm
index e643635dfe5..ff4b69b20f6 100644
--- a/code/game/machinery/computer3/computer.dm
+++ b/code/game/machinery/computer3/computer.dm
@@ -278,8 +278,8 @@
chan = power_channel
var/area/A = get_area(loc)
- if(istype(A) && A.master && A.master.powered(chan))
- A.master.use_power(amount, chan)
+ if(istype(A) && A.powered(chan))
+ A.use_power(amount, chan)
else if(battery && battery.charge > 0)
battery.use(amount)
diff --git a/code/game/machinery/computer3/networking.dm b/code/game/machinery/computer3/networking.dm
index 27d77890087..66d25dda5ae 100644
--- a/code/game/machinery/computer3/networking.dm
+++ b/code/game/machinery/computer3/networking.dm
@@ -143,10 +143,9 @@
if(typekey == null)
typekey = /obj/machinery
var/list/machines = list()
- for(var/area/area in A.related)
- for(var/obj/O in area.contents)
- if(istype(O,typekey))
- machines |= O
+ for(var/obj/O in A.contents)
+ if(istype(O,typekey))
+ machines |= O
return machines
verify_machine(var/obj/previous)
if(!previous) return 0
diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm
index 27033903afe..8b6ddb58344 100644
--- a/code/game/machinery/doors/alarmlock.dm
+++ b/code/game/machinery/doors/alarmlock.dm
@@ -34,8 +34,6 @@
var/alert = signal.data["alert"]
var/area/our_area = get_area(src)
- if (our_area.master)
- our_area = our_area.master
if(alarm_area == our_area.name)
switch(alert)
@@ -44,4 +42,4 @@
close()
if("minor", "clear")
autoclose = 0
- open()
\ No newline at end of file
+ open()
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 8ecbd538380..db3dd6d585a 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -152,8 +152,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
if(HOLOPAD_MODE == AREA_BASED)
var/area/holo_area = get_area(src)
var/area/eye_area = get_area(master.eyeobj)
-
- if(!(eye_area in holo_area.master.related))
+ if(eye_area != holo_area)
clear_holo(master)
continue
diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm
index 48565d0c77d..90305a7a786 100644
--- a/code/game/machinery/jukebox.dm
+++ b/code/game/machinery/jukebox.dm
@@ -188,11 +188,10 @@ datum/track/New(var/title_name, var/audio)
/obj/machinery/media/jukebox/proc/StopPlaying()
var/area/main_area = get_area(src)
// Always kill the current sound
- for(var/area/related_area in main_area.related)
- for(var/mob/living/M in mobs_in_area(related_area))
- M << sound(null, channel = 1)
+ for(var/mob/living/M in mobs_in_area(main_area))
+ M << sound(null, channel = 1)
- related_area.forced_ambience = null
+ main_area.forced_ambience = null
playing = 0
update_use_power(1)
update_icon()
@@ -204,12 +203,10 @@ datum/track/New(var/title_name, var/audio)
return
var/area/main_area = get_area(src)
- for(var/area/related_area in main_area.related)
- related_area.forced_ambience = list(current_track.sound)
-
- for(var/mob/living/M in mobs_in_area(related_area))
- if(M.mind)
- related_area.play_ambience(M)
+ main_area.forced_ambience = list(current_track.sound)
+ for(var/mob/living/M in mobs_in_area(main_area))
+ if(M.mind)
+ main_area.play_ambience(M)
playing = 1
update_use_power(2)
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index dcf66a12b7b..ded7ebc9b98 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -42,15 +42,14 @@
on = !on
- for(var/area/A in area.master.related)
- A.lightswitch = on
- A.updateicon()
+ area.lightswitch = on
+ area.updateicon()
- for(var/obj/machinery/light_switch/L in A)
- L.on = on
- L.updateicon()
+ for(var/obj/machinery/light_switch/L in area)
+ L.on = on
+ L.updateicon()
- area.master.power_change()
+ area.power_change()
/obj/machinery/light_switch/power_change()
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 0668906b707..d9b579ab038 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -264,8 +264,8 @@ Class Procs:
s.start()
if (electrocute_mob(user, get_area(src), src, 0.7))
var/area/temp_area = get_area(src)
- if(temp_area && temp_area.master)
- var/obj/machinery/power/apc/temp_apc = temp_area.master.get_apc()
+ if(temp_area)
+ var/obj/machinery/power/apc/temp_apc = temp_area.get_apc()
if(temp_apc && temp_apc.terminal && temp_apc.terminal.powernet)
temp_apc.terminal.powernet.trigger_warning()
diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm
index 0f68d16f771..223b503f4f7 100644
--- a/code/game/machinery/turret_control.dm
+++ b/code/game/machinery/turret_control.dm
@@ -46,12 +46,11 @@
/obj/machinery/turretid/initialize()
if(!control_area)
- var/area/CA = get_area(src)
- control_area = CA.master
+ control_area = get_area(src)
else if(istext(control_area))
for(var/area/A in world)
if(A.name && A.name==control_area)
- control_area = A.master
+ control_area = A
break
if(control_area)
@@ -178,9 +177,8 @@
TC.ailock = ailock
if(istype(control_area))
- for(var/area/sub_area in control_area.related)
- for (var/obj/machinery/porta_turret/aTurret in sub_area)
- aTurret.setState(TC)
+ for (var/obj/machinery/porta_turret/aTurret in control_area)
+ aTurret.setState(TC)
update_icon()
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index f69a781dd77..e3a104d21c5 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -13,9 +13,6 @@
/area/turret_protected/Entered(O)
..()
- if( master && master != src )
- return master.Entered(O)
-
if( iscarbon(O) )
turretTargets |= O
else if( istype(O, /obj/mecha) )
@@ -27,9 +24,6 @@
return 1
/area/turret_protected/Exited(O)
- if( master && master != src )
- return master.Exited(O)
-
if( ismob(O) && !issilicon(O) )
turretTargets -= O
else if( istype(O, /obj/mecha) )
@@ -148,8 +142,6 @@
/obj/machinery/turret/proc/get_protected_area()
var/area/turret_protected/TP = get_area(src)
if(istype(TP))
- if(TP.master && TP.master != TP)
- TP = TP.master
return TP
return
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index d62554c3c0d..e7bd01c1efb 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -772,7 +772,7 @@
var/pow_chan
if(A)
for(var/c in use_channels)
- if(A.master && A.master.powered(c))
+ if(A.powered(c))
pow_chan = c
break
return pow_chan
@@ -819,13 +819,13 @@
if(A)
var/pow_chan
for(var/c in list(EQUIP,ENVIRON,LIGHT))
- if(A.master.powered(c))
+ if(A.powered(c))
pow_chan = c
break
if(pow_chan)
var/delta = min(12, ER.chassis.cell.maxcharge-cur_charge)
ER.chassis.give_power(delta)
- A.master.use_power(delta*ER.coeff, pow_chan)
+ A.use_power(delta*ER.coeff, pow_chan)
return
diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm
index facafe41f25..85d34c6a28d 100644
--- a/code/game/objects/items/blueprints.dm
+++ b/code/game/objects/items/blueprints.dm
@@ -76,7 +76,6 @@ move an amendment to the drawing.
/obj/item/blueprints/proc/get_area()
var/turf/T = get_turf(usr)
var/area/A = T.loc
- A = A.master
return A
/obj/item/blueprints/proc/get_area_type(var/area/A = get_area())
@@ -161,8 +160,7 @@ move an amendment to the drawing.
usr << "\red Text too long."
return
set_area_machinery_title(A,str,prevname)
- for(var/area/RA in A.related)
- RA.name = str
+ A.name = str
usr << "\blue You set the area '[prevname]' title to '[str]'."
interact()
return
@@ -172,17 +170,17 @@ move an amendment to the drawing.
/obj/item/blueprints/proc/set_area_machinery_title(var/area/A,var/title,var/oldtitle)
if (!oldtitle) // or replacetext goes to infinite loop
return
- for(var/area/RA in A.related)
- for(var/obj/machinery/alarm/M in RA)
- M.name = replacetext(M.name,oldtitle,title)
- for(var/obj/machinery/power/apc/M in RA)
- M.name = replacetext(M.name,oldtitle,title)
- for(var/obj/machinery/atmospherics/unary/vent_scrubber/M in RA)
- M.name = replacetext(M.name,oldtitle,title)
- for(var/obj/machinery/atmospherics/unary/vent_pump/M in RA)
- M.name = replacetext(M.name,oldtitle,title)
- for(var/obj/machinery/door/M in RA)
- M.name = replacetext(M.name,oldtitle,title)
+
+ for(var/obj/machinery/alarm/M in A)
+ M.name = replacetext(M.name,oldtitle,title)
+ for(var/obj/machinery/power/apc/M in A)
+ M.name = replacetext(M.name,oldtitle,title)
+ for(var/obj/machinery/atmospherics/unary/vent_scrubber/M in A)
+ M.name = replacetext(M.name,oldtitle,title)
+ for(var/obj/machinery/atmospherics/unary/vent_pump/M in A)
+ M.name = replacetext(M.name,oldtitle,title)
+ for(var/obj/machinery/door/M in A)
+ M.name = replacetext(M.name,oldtitle,title)
//TODO: much much more. Unnamed airlocks, cameras, etc.
/obj/item/blueprints/proc/check_tile_is_border(var/turf/T2,var/dir)
@@ -247,4 +245,4 @@ move an amendment to the drawing.
if(BORDER_SPACE)
return ROOM_ERR_SPACE
found+=T
- return found
\ No newline at end of file
+ return found
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 0164806e2ca..522bef89a69 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -58,10 +58,10 @@
on = 0
else
var/area/A = src.loc.loc
- if(!A || !isarea(A) || !A.master)
+ if(!A || !isarea(A))
on = 0
else
- on = A.master.powered(EQUIP) // set "on" to the power status
+ on = A.powered(EQUIP) // set "on" to the power status
if(!on)
icon_state = "intercom-p"
diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm
index 525a5b3d214..2d53ac3d093 100644
--- a/code/modules/alarm/alarm.dm
+++ b/code/modules/alarm/alarm.dm
@@ -96,18 +96,17 @@
* Assisting procs *
******************/
/atom/proc/get_alarm_area()
- var/area/A = get_area(src)
- return A.master
+ return get_area(src)
/area/get_alarm_area()
- return src.master
+ return src
/atom/proc/get_alarm_name()
var/area/A = get_area(src)
- return A.master.name
+ return A.name
/area/get_alarm_name()
- return master.name
+ return name
/mob/get_alarm_name()
return name
diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm
index 2be4060de28..47b7f7b5719 100644
--- a/code/modules/alarm/alarm_handler.dm
+++ b/code/modules/alarm/alarm_handler.dm
@@ -84,8 +84,7 @@
return src
/turf/get_alarm_origin()
- var/area/area = get_area(src)
- return area.master // Very important to get area.master, as dynamic lightning can and will split areas.
+ return get_area(src)
/datum/alarm_handler/proc/register(var/object, var/procName)
listeners[object] = procName
diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm
index 09b1b83ef95..629579f7946 100644
--- a/code/modules/events/infestation.dm
+++ b/code/modules/events/infestation.dm
@@ -63,11 +63,10 @@
//world << " checking [areapath]"
var/area/A = locate(areapath)
//world << " A: [A], contents.len: [A.contents.len]"
- for(var/area/B in A.related)
//world << " B: [B], contents.len: [B.contents.len]"
- for(var/turf/simulated/floor/F in B.contents)
- if(!F.contents.len)
- turfs += F
+ for(var/turf/simulated/floor/F in A.contents)
+ if(!F.contents.len)
+ turfs += F
var/list/spawn_types = list()
var/max_number
@@ -116,4 +115,4 @@
#undef VERM_MICE
#undef VERM_LIZARDS
-#undef VERM_SPIDERS
\ No newline at end of file
+#undef VERM_SPIDERS
diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm
index 7edcca6303c..004baf6797b 100644
--- a/code/modules/hydroponics/spreading/spreading.dm
+++ b/code/modules/hydroponics/spreading/spreading.dm
@@ -6,10 +6,9 @@
var/list/turf/simulated/floor/turfs = list() //list of all the empty floor turfs in the hallway areas
for(var/areapath in typesof(/area/hallway))
var/area/A = locate(areapath)
- for(var/area/B in A.related)
- for(var/turf/simulated/floor/F in B.contents)
- if(!F.contents.len)
- turfs += F
+ for(var/turf/simulated/floor/F in A.contents)
+ if(!F.contents.len)
+ turfs += F
if(turfs.len) //Pick a turf to spawn at if we can
var/turf/simulated/floor/T = pick(turfs)
@@ -256,4 +255,4 @@
die_off()
/obj/effect/plant/proc/is_mature()
- return (health >= (max_health/3))
\ No newline at end of file
+ return (health >= (max_health/3))
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index 5247ae5f107..f57a96a088a 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -48,7 +48,7 @@
loc = T.loc
if (istype(loc, /area))
//stage = 4
- if (!loc.master.power_equip && !istype(src.loc,/obj/item))
+ if (!loc.power_equip && !istype(src.loc,/obj/item))
//stage = 5
blind = 1
@@ -115,7 +115,7 @@
spawn(20)
src << "Backup battery online. Scanners, camera, and radio interface offline. Beginning fault-detection."
sleep(50)
- if (loc.master.power_equip)
+ if (loc.power_equip)
if (!istype(T, /turf/space))
src << "Alert cancelled. Power has been restored without our assistance."
src:aiRestorePowerRoutine = 0
@@ -135,18 +135,17 @@
var/PRP
for (PRP=1, PRP<=4, PRP++)
- for(var/area/A in current_area.master.related)
- for (var/obj/machinery/power/apc/APC in A)
- if (!(APC.stat & BROKEN))
- theAPC = APC
- break
+ for (var/obj/machinery/power/apc/APC in current_area)
+ if (!(APC.stat & BROKEN))
+ theAPC = APC
+ break
if (!theAPC)
switch(PRP)
if (1) src << "Unable to locate APC!"
else src << "Lost connection with the APC!"
src:aiRestorePowerRoutine = 2
return
- if (loc.master.power_equip)
+ if (loc.power_equip)
if (!istype(T, /turf/space))
src << "Alert cancelled. Power has been restored without our assistance."
src:aiRestorePowerRoutine = 0
@@ -181,7 +180,7 @@
/mob/living/silicon/ai/proc/lacks_power()
var/turf/T = get_turf(src)
var/area/A = get_area(src)
- return ((!A.master.power_equip) && A.requires_power == 1 || istype(T, /turf/space)) && !istype(src.loc,/obj/item)
+ return ((!A.power_equip) && A.requires_power == 1 || istype(T, /turf/space)) && !istype(src.loc,/obj/item)
/mob/living/silicon/ai/updatehealth()
if(status_flags & GODMODE)
@@ -195,4 +194,4 @@
/mob/living/silicon/ai/rejuvenate()
..()
- add_ai_verbs(src)
\ No newline at end of file
+ add_ai_verbs(src)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 26ab2b2e98c..04cdb353e29 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -1253,11 +1253,10 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
if( cell && cell.charge>=20)
cell.use(20);
spawn(0)
- for(var/area/A in area.related)
- for(var/obj/machinery/light/L in A)
- L.on = 1
- L.broken()
- sleep(1)
+ for(var/obj/machinery/light/L in area)
+ L.on = 1
+ L.broken()
+ sleep(1)
/obj/machinery/power/apc/proc/setsubsystem(val)
if(cell && cell.charge > 0)
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index 53599073b2b..fe51b4152e1 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -50,8 +50,8 @@
for(var/area/A in range(src,effectiverange))
if(A.name == "Space")
continue // No (de)gravitizing space.
- if(A.master && !( A.master in localareas) )
- localareas += A.master
+ if(!(A in localareas))
+ localareas += A
/obj/machinery/computer/gravity_control_computer/proc/findgenerator()
var/obj/machinery/gravity_generator/foundgenerator = null
@@ -125,7 +125,7 @@
for(var/area/A in gravity_generator:localareas)
var/obj/machinery/gravity_generator/G
for(G in machines)
- if((A.master in G.localareas) && (G.on))
+ if((A in G.localareas) && (G.on))
break
if(!G)
A.gravitychange(0,A)
@@ -137,4 +137,4 @@
A.gravitychange(1,A)
src.updateUsrDialog()
- return
\ No newline at end of file
+ return
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index ea390427ce4..6004212cbc6 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -441,7 +441,7 @@
// true if area has power and lightswitch is on
/obj/machinery/light/proc/has_power()
var/area/A = src.loc.loc
- return A.master.lightswitch && A.master.power_light
+ return A.lightswitch && A.power_light
/obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
if(flickering) return
@@ -613,7 +613,6 @@
/obj/machinery/light/power_change()
spawn(10)
var/area/A = src.loc.loc
- A = A.master
seton(A.lightswitch && A.power_light)
// called when on fire
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 9c24866b39d..387a8c03d11 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -69,20 +69,20 @@
// return 1
var/area/A = src.loc.loc // make sure it's in an area
- if(!A || !isarea(A) || !A.master)
+ if(!A || !isarea(A))
return 0 // if not, then not powered
if(chan == -1)
chan = power_channel
- return A.master.powered(chan) // return power status of the area
+ return A.powered(chan) // return power status of the area
// increment the power usage stats for an area
/obj/machinery/proc/use_power(var/amount, var/chan = -1) // defaults to power_channel
var/area/A = get_area(src) // make sure it's in an area
- if(!A || !isarea(A) || !A.master)
+ if(!A || !isarea(A))
return
if(chan == -1)
chan = power_channel
- A.master.use_power(amount, chan)
+ A.use_power(amount, chan)
/obj/machinery/proc/power_change() // called whenever the power settings of the containing area change
// by default, check equipment channel & set flag
diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm
index 97d3afe572f..e8d42bd2bd2 100644
--- a/code/modules/power/powernet.dm
+++ b/code/modules/power/powernet.dm
@@ -150,7 +150,6 @@
return null
/area/proc/get_apc()
- for(var/area/RA in src.related)
- var/obj/machinery/power/apc/FINDME = locate() in RA
- if (FINDME)
- return FINDME
\ No newline at end of file
+ var/obj/machinery/power/apc/FINDME = locate() in src
+ if (FINDME)
+ return FINDME
From 5b920578909b6de2e3404a1b83579aadf1d64103 Mon Sep 17 00:00:00 2001
From: Mloc
Date: Sat, 9 May 2015 23:20:20 +0100
Subject: [PATCH 3/9] lights in areas that don't require power will now
automatically turn on
Signed-off-by: Mloc
---
code/modules/power/lighting.dm | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 6004212cbc6..755c66b6cb2 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -241,6 +241,10 @@
..()
spawn(2)
+ var/area/A = get_area(src)
+ if(A && !A.requires_power)
+ on = 1
+
switch(fitting)
if("tube")
brightness = 8
From 895e78df1e2e4897753cfa35b6b4320683670ee7 Mon Sep 17 00:00:00 2001
From: Mloc
Date: Sat, 9 May 2015 23:25:12 +0100
Subject: [PATCH 4/9] more lightweight camera caching
no loops
Signed-off-by: Mloc
---
code/game/machinery/computer/camera.dm | 12 ++++++------
code/modules/alarm/alarm.dm | 7 ++++++-
2 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index a50436346d5..8c814692978 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -1,11 +1,9 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
+/var/camera_cache_id = 1
+
/proc/invalidateCameraCache()
- for(var/obj/machinery/computer/security/s in machines)
- s.camera_cache = null
- var/datum/alarm_handler/AHandler = new /datum/alarm_handler()
- for(var/datum/alarm/A in AHandler.alarms)
- A.cameras = null
+ camera_cache_id = (++camera_cache_id % 999999)
/obj/machinery/computer/security
name = "security camera monitor"
@@ -15,6 +13,7 @@
var/last_pic = 1.0
var/list/network
var/mapping = 0//For the overview file, interesting bit of code.
+ var/cache_id = 0
circuit = /obj/item/weapon/circuitboard/security
var/camera_cache = null
@@ -43,7 +42,8 @@
data["current"] = null
- if(isnull(camera_cache))
+ if(camera_cache_id != cache_id)
+ cache_id = camera_cache_id
cameranet.process_sort()
var/cameras[0]
diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm
index 2d53ac3d093..aa88e170bf2 100644
--- a/code/modules/alarm/alarm.dm
+++ b/code/modules/alarm/alarm.dm
@@ -18,6 +18,7 @@
var/list/sources = new() //List of sources triggering the alarm. Used to determine when the alarm should be cleared.
var/list/sources_assoc = new() //Associative list of source triggers. Used to efficiently acquire the alarm source.
var/list/cameras //List of cameras that can be switched to, if the player has that capability.
+ var/cache_id //ID for camera cache, changed by invalidateCameraCache().
var/area/last_area //The last acquired area, used should origin be lost (for example a destroyed borg containing an alarming camera).
var/area/last_name //The last acquired name, used should origin be lost
var/area/last_camera_area //The last area in which cameras where fetched, used to see if the camera list should be updated.
@@ -74,8 +75,12 @@
return last_name
/datum/alarm/proc/cameras()
+ // reset camera cache
+ if(camera_cache_id != cache_id)
+ cameras = null
+ cache_id = camera_cache_id
// If the alarm origin has changed area, for example a borg containing an alarming camera, reset the list of cameras
- if(cameras && (last_camera_area != alarm_area()))
+ else if(cameras && (last_camera_area != alarm_area()))
cameras = null
// The list of cameras is also reset by /proc/invalidateCameraCache()
From 733c6a4fb533764c8d269578391e0d1fc267d316 Mon Sep 17 00:00:00 2001
From: Mloc
Date: Sun, 10 May 2015 16:55:57 +0100
Subject: [PATCH 5/9] simulated var for atoms, used to filter explosions and
other actions
kind of a stronger anchored var, used by lighting overlays
Signed-off-by: Mloc
---
code/game/atoms.dm | 1 +
code/modules/power/singularity/act.dm | 18 ++++++++++--------
2 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 152622f88e1..725d5b0a266 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -11,6 +11,7 @@
var/pass_flags = 0
var/throwpass = 0
var/germ_level = GERM_LEVEL_AMBIENT // The higher the germ level, the more germ on the atom.
+ var/simulated = 1 //filter for actions - used by lighting overlays
///Chemistry.
var/datum/reagents/reagents = null
diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm
index 8e505f107f1..30631be604f 100644
--- a/code/modules/power/singularity/act.dm
+++ b/code/modules/power/singularity/act.dm
@@ -38,17 +38,19 @@
..()
/obj/singularity_act()
- ex_act(1)
- if(src)
- qdel(src)
- return 2
+ if(simulated)
+ ex_act(1)
+ if(src)
+ qdel(src)
+ return 2
/obj/singularity_pull(S, current_size)
- if(anchored)
- if(current_size >= STAGE_FIVE)
+ if(simulated)
+ if(anchored)
+ if(current_size >= STAGE_FIVE)
+ step_towards(src, S)
+ else
step_towards(src, S)
- else
- step_towards(src, S)
/obj/effect/beam/singularity_pull()
return
From 16d50c645ddadc4c8efc6907d27cdb4b8d1be241 Mon Sep 17 00:00:00 2001
From: Mloc
Date: Sun, 10 May 2015 20:54:25 +0100
Subject: [PATCH 6/9] new object-based lighting system
Signed-off-by: Mloc
---
baystation12.dme | 12 +-
code/ZAS/Fire.dm | 12 +-
code/__HELPERS/game.dm | 12 -
code/controllers/_DynamicAreaLighting_TG.dm | 450 ------------------
code/controllers/failsafe.dm | 1 -
code/controllers/lighting_controller.dm | 130 -----
code/controllers/verbs.dm | 17 +-
code/game/area/Space Station 13 areas.dm | 16 +-
code/game/area/areas.dm | 11 +-
code/game/atoms.dm | 2 +-
code/game/atoms_movable.dm | 11 +-
code/game/gamemodes/blob/theblob.dm | 2 +-
code/game/gamemodes/cult/cult_structures.dm | 17 +-
code/game/gamemodes/cult/cultify/mob.dm | 2 +-
code/game/gamemodes/cult/hell_universe.dm | 5 +-
.../endgame/supermatter_cascade/blob.dm | 2 +-
.../endgame/supermatter_cascade/portal.dm | 4 +-
.../endgame/supermatter_cascade/universe.dm | 7 +-
code/game/machinery/bots/bots.dm | 6 +-
code/game/machinery/camera/camera.dm | 2 +-
code/game/machinery/doors/blast_door.dm | 8 +-
code/game/machinery/doors/brigdoors.dm | 6 +-
code/game/machinery/doors/door.dm | 6 +-
code/game/machinery/floodlight.dm | 6 +-
code/game/machinery/hologram.dm | 12 +-
code/game/machinery/newscaster.dm | 2 +-
code/game/machinery/requests_console.dm | 6 +-
code/game/mecha/mecha.dm | 4 +-
code/game/objects/effects/aliens.dm | 2 +-
.../objects/effects/decals/Cleanable/misc.dm | 4 +-
code/game/objects/effects/effect_system.dm | 2 +-
code/game/objects/effects/overlays.dm | 2 +-
code/game/objects/explosion.dm | 12 +-
code/game/objects/items/blueprints.dm | 4 -
code/game/objects/items/devices/PDA/PDA.dm | 15 +-
code/game/objects/items/devices/flashlight.dm | 30 +-
.../objects/items/devices/lightreplacer.dm | 8 +-
code/game/objects/items/devices/powersink.dm | 8 +-
code/game/objects/items/weapons/candle.dm | 18 +-
.../objects/items/weapons/cigs_lighters.dm | 22 +-
code/game/objects/structures.dm | 2 -
code/game/objects/structures/false_walls.dm | 8 +-
code/game/objects/structures/mineral_doors.dm | 2 +-
code/game/objects/structures/window.dm | 4 +-
code/game/supplyshuttle.dm | 8 +-
code/game/turfs/simulated/floor.dm | 14 +-
code/game/turfs/simulated/floor_types.dm | 2 +-
code/game/turfs/space/space.dm | 5 +-
code/game/turfs/turf.dm | 28 +-
code/modules/admin/verbs/massmodvar.dm | 30 +-
code/modules/admin/verbs/modifyvariables.dm | 4 +-
code/modules/clothing/clothing.dm | 38 +-
code/modules/holodeck/HolodeckObjects.dm | 2 +-
code/modules/hydroponics/grown.dm | 9 -
code/modules/hydroponics/seed.dm | 21 +-
.../hydroponics/spreading/spreading.dm | 9 +-
code/modules/hydroponics/trays/tray.dm | 13 +-
code/modules/hydroponics/trays/tray_soil.dm | 2 +-
.../hydroponics/trays/tray_update_icons.dm | 11 +-
code/modules/lighting/__lighting_docs.dm | 67 +++
code/modules/lighting/_lighting_defs.dm | 10 +
code/modules/lighting/light_source.dm | 169 +++++++
code/modules/lighting/lighting_atom.dm | 81 ++++
code/modules/lighting/lighting_overlay.dm | 48 ++
code/modules/lighting/lighting_process.dm | 29 ++
code/modules/lighting/lighting_system.dm | 47 ++
code/modules/lighting/lighting_turf.dm | 29 ++
code/modules/lighting/~lighting_undefs.dm | 10 +
code/modules/mining/machine_processing.dm | 4 +-
code/modules/mining/mine_items.dm | 2 +-
.../mob/freelook/ai/update_triggers.dm | 2 +-
code/modules/mob/living/bot/bot.dm | 6 +-
.../mob/living/carbon/alien/diona/life.dm | 10 +-
code/modules/mob/living/carbon/human/life.dm | 23 +-
code/modules/mob/living/living_defense.dm | 14 +-
code/modules/mob/living/silicon/ai/ai.dm | 16 +-
code/modules/mob/living/silicon/robot/life.dm | 2 +-
.../modules/mob/living/silicon/robot/robot.dm | 4 +-
.../simple_animal/constructs/constructs.dm | 2 +-
.../mob/living/simple_animal/friendly/crab.dm | 2 +-
code/modules/power/lighting.dm | 67 ++-
.../power/singularity/containment_field.dm | 2 +-
code/modules/power/singularity/narsie.dm | 8 +-
code/modules/power/singularity/singularity.dm | 2 +-
code/modules/shieldgen/sheldwallgen.dm | 2 +-
.../spells/aoe_turf/conjure/construct.dm | 4 +-
code/modules/supermatter/supermatter.dm | 12 +-
code/modules/vehicles/vehicle.dm | 8 +-
code/setup.dm | 2 +
icons/effects/lighting_overlay.dmi | Bin 0 -> 260 bytes
90 files changed, 790 insertions(+), 1004 deletions(-)
delete mode 100644 code/controllers/_DynamicAreaLighting_TG.dm
delete mode 100644 code/controllers/lighting_controller.dm
create mode 100644 code/modules/lighting/__lighting_docs.dm
create mode 100644 code/modules/lighting/_lighting_defs.dm
create mode 100644 code/modules/lighting/light_source.dm
create mode 100644 code/modules/lighting/lighting_atom.dm
create mode 100644 code/modules/lighting/lighting_overlay.dm
create mode 100644 code/modules/lighting/lighting_process.dm
create mode 100644 code/modules/lighting/lighting_system.dm
create mode 100644 code/modules/lighting/lighting_turf.dm
create mode 100644 code/modules/lighting/~lighting_undefs.dm
create mode 100644 icons/effects/lighting_overlay.dmi
diff --git a/baystation12.dme b/baystation12.dme
index c8173f401e7..2584fc60022 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -85,15 +85,12 @@
#include "code\ATMOSPHERICS\components\unary\unary_base.dm"
#include "code\ATMOSPHERICS\components\unary\vent_pump.dm"
#include "code\ATMOSPHERICS\components\unary\vent_scrubber.dm"
-#include "code\controllers\_DynamicAreaLighting_TG.dm"
#include "code\controllers\autotransfer.dm"
#include "code\controllers\communications.dm"
#include "code\controllers\configuration.dm"
#include "code\controllers\emergency_shuttle_controller.dm"
-#include "code\controllers\failsafe.dm"
#include "code\controllers\hooks-defs.dm"
#include "code\controllers\hooks.dm"
-#include "code\controllers\lighting_controller.dm"
#include "code\controllers\master_controller.dm"
#include "code\controllers\shuttle_controller.dm"
#include "code\controllers\subsystems.dm"
@@ -106,7 +103,6 @@
#include "code\controllers\Processes\event.dm"
#include "code\controllers\Processes\garbage.dm"
#include "code\controllers\Processes\inactivity.dm"
-#include "code\controllers\Processes\lighting.dm"
#include "code\controllers\Processes\machinery.dm"
#include "code\controllers\Processes\mob.dm"
#include "code\controllers\Processes\nanoui.dm"
@@ -1030,6 +1026,14 @@
#include "code\modules\library\lib_items.dm"
#include "code\modules\library\lib_machines.dm"
#include "code\modules\library\lib_readme.dm"
+#include "code\modules\lighting\_lighting_defs.dm"
+#include "code\modules\lighting\light_source.dm"
+#include "code\modules\lighting\lighting_atom.dm"
+#include "code\modules\lighting\lighting_overlay.dm"
+#include "code\modules\lighting\lighting_process.dm"
+#include "code\modules\lighting\lighting_system.dm"
+#include "code\modules\lighting\lighting_turf.dm"
+#include "code\modules\lighting\~lighting_undefs.dm"
#include "code\modules\liquid\splash_simulation.dm"
#include "code\modules\maps\dmm_suite.dm"
#include "code\modules\maps\reader.dm"
diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm
index 688f71985d4..50b048d75ae 100644
--- a/code/ZAS/Fire.dm
+++ b/code/ZAS/Fire.dm
@@ -95,7 +95,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
icon = 'icons/effects/fire.dmi'
icon_state = "1"
- l_color = "#ED9200"
+ light_color = "#ED9200"
layer = TURF_LAYER
var/firelevel = 10000 //Calculated by gas_mixture.calculate_firelevel()
@@ -114,13 +114,13 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
if(firelevel > 6)
icon_state = "3"
- SetLuminosity(7)
+ set_light(7)
else if(firelevel > 2.5)
icon_state = "2"
- SetLuminosity(5)
+ set_light(5)
else
icon_state = "1"
- SetLuminosity(3)
+ set_light(3)
//im not sure how to implement a version that works for every creature so for now monkeys are firesafe
for(var/mob/living/L in loc)
@@ -165,7 +165,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
qdel(src)
set_dir(pick(cardinal))
- SetLuminosity(3)
+ set_light(3)
firelevel = fl
air_master.active_hotspots.Add(src)
@@ -178,7 +178,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
/obj/fire/proc/RemoveFire()
if (istype(loc, /turf))
- SetLuminosity(0)
+ set_light(0)
loc = null
air_master.active_hotspots.Remove(src)
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index ea7dbd083c2..2654e86e79f 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -69,18 +69,6 @@
/proc/isNotAdminLevel(var/level)
return !isAdminLevel(level)
-//Magic constants obtained by using linear regression on right-angled triangles of sides 0=dy) return (k1*dx) + (k2*dy) //No sqrt or powers :)
- else return (k2*dx) + (k1*dy)
-#undef k1
-#undef k2
-
/proc/circlerange(center=usr,radius=3)
var/turf/centerturf = get_turf(center)
diff --git a/code/controllers/_DynamicAreaLighting_TG.dm b/code/controllers/_DynamicAreaLighting_TG.dm
deleted file mode 100644
index 6d3fd406dd6..00000000000
--- a/code/controllers/_DynamicAreaLighting_TG.dm
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- Modified DynamicAreaLighting for TGstation - Coded by Carnwennan
-
- This is TG's 'new' lighting system. It's basically a heavily modified combination of Forum_Account's and
- ShadowDarke's respective lighting libraries. Credits, where due, to them.
-
- Like sd_DAL (what we used to use), it changes the shading overlays of areas by splitting each type of area into sub-areas
- by using the var/tag variable and moving turfs into the contents list of the correct sub-area. This method is
- much less costly than using overlays or objects.
-
- Unlike sd_DAL however it uses a queueing system. Everytime we call a change to opacity or luminosity
- (through SetOpacity() or SetLuminosity()) we are simply updating variables and scheduling certain lights/turfs for an
- update. Actual updates are handled periodically by the lighting_controller. This carries additional overheads, however it
- means that each thing is changed only once per lighting_controller.processing_interval ticks. Allowing for greater control
- over how much priority we'd like lighting updates to have. It also makes it possible for us to simply delay updates by
- setting lighting_controller.processing = 0 at say, the start of a large explosion, waiting for it to finish, and then
- turning it back on with lighting_controller.processing = 1.
-
- Unlike our old system there are hardcoded maximum luminositys (different for certain atoms).
- This is to cap the cost of creating lighting effects.
- (without this, an atom with luminosity of 20 would have to update 41^2 turfs!) :s
-
- Also, in order for the queueing system to work, each light remembers the effect it casts on each turf. This is going to
- have larger memory requirements than our previous system but it's easily worth the hassle for the greater control we
- gain. It also reduces cost of removing lighting effects by a lot!
-
- Known Issues/TODO:
- Shuttles still do not have support for dynamic lighting (I hope to fix this at some point)
- No directional lighting support. (prototype looked ugly)
-*/
-
-#define LIGHTING_CIRCULAR 1 //comment this out to use old square lighting effects.
-#define LIGHTING_LAYER 10 //Drawing layer for lighting overlays
-#define LIGHTING_ICON 'icons/effects/ss13_dark_alpha6.dmi' //Icon used for lighting shading effects
-
-datum/light_source
- var/atom/owner
- var/changed = 1
- var/list/effect = list()
- var/__x = 0 //x coordinate at last update
- var/__y = 0 //y coordinate at last update
- var/__z = 0 //z coordinate at last update
-
- var/_l_color //do not use directly, only used as reference for updating
- var/col_r
- var/col_g
- var/col_b
-
-
- New(atom/A)
- if(!istype(A))
- CRASH("The first argument to the light object's constructor must be the atom that is the light source. Expected atom, received '[A]' instead.")
- ..()
- owner = A
- readrgb(owner.l_color)
- __x = owner.x
- __y = owner.y
- __z = owner.z
- // the lighting object maintains a list of all light sources
- lighting_controller.lights += src
-
-
- //Check a light to see if its effect needs reprocessing. If it does, remove any old effect and create a new one
- proc/check()
- if(!owner)
- remove_effect()
- return 1 //causes it to be removed from our list of lights. The garbage collector will then destroy it.
-
- // check to see if we've moved since last update
- if(owner.x != __x || owner.y != __y || owner.z != __z)
- __x = owner.x
- __y = owner.y
- __z = owner.z
- changed = 1
-
- if (owner.l_color != _l_color)
- readrgb(owner.l_color)
- changed = 1
-
- if(changed)
- changed = 0
- remove_effect()
- return add_effect()
- return 0
-
-
- proc/remove_effect()
- // before we apply the effect we remove the light's current effect.
- for(var/turf/T in effect) // negate the effect of this light source
- T.update_lumcount(-effect[T], col_r, col_g, col_b, 1)
- effect.Cut() // clear the effect list
-
- proc/add_effect()
- // only do this if the light is turned on and is on the map
- if(owner.loc && owner.luminosity > 0)
- readrgb(owner.l_color)
- effect = list()
- for(var/turf/T in view(owner.get_light_range(),get_turf(owner)))
- var/delta_lumen = lum(T)
- if(delta_lumen > 0)
- effect[T] = delta_lumen
- T.update_lumcount(delta_lumen, col_r, col_g, col_b, 0)
-
- return 0
- else
- owner.light = null
- return 1 //cause the light to be removed from the lights list and garbage collected once it's no
- //longer referenced by the queue
-
- proc/lum(turf/A)
- if (owner.trueLuminosity < 1)
- return 0
- var/dist
- if(!A)
- dist = 0
- else
-#ifdef LIGHTING_CIRCULAR
- dist = cheap_hypotenuse(A.x, A.y, __x, __y)
-#else
- dist = max(abs(A.x - __x), abs(A.y - __y))
-#endif
- if (owner.trueLuminosity > 100) // This will never happen... right?
- return sqrt(owner.trueLuminosity) - dist
- else
- return sqrtTable[owner.trueLuminosity] - dist
-
- proc/readrgb(col)
- _l_color = col
- if(col)
- col_r = GetRedPart(col)
- col_g = GetGreenPart(col)
- col_b = GetBluePart(col)
- else
- col_r = null
-
-atom
- var/datum/light_source/light
- var/trueLuminosity = 0 // Typically 'luminosity' squared. The builtin luminosity must remain linear.
- // We may read it, but NEVER set it directly.
- var/l_color
-
-//Turfs with opacity when they are constructed will trigger nearby lights to update
-//Turfs and atoms with luminosity when they are constructed will create a light_source automatically
-turf/New()
- ..()
- if(luminosity)
- if(light) WARNING("[type] - Don't set lights up manually during New(), We do it automatically.")
- trueLuminosity = luminosity * luminosity
- light = new(src)
-
-//Movable atoms with opacity when they are constructed will trigger nearby lights to update
-//Movable atoms with luminosity when they are constructed will create a light_source automatically
-atom/movable/New()
- ..()
- if(opacity)
- if(isturf(loc))
- if(loc:lighting_lumcount > 1)
- UpdateAffectingLights()
- if(luminosity)
- if(light) WARNING("[type] - Don't set lights up manually during New(), We do it automatically.")
- trueLuminosity = luminosity * luminosity
- light = new(src)
-
-//Sets our luminosity.
-//If we have no light it will create one.
-//If we are setting luminosity to 0 the light will be cleaned up by the controller and garbage collected once all its
-//queues are complete.
-//if we have a light already it is merely updated, rather than making a new one.
-atom/proc/SetLuminosity(new_luminosity, trueLum = FALSE)
- if(new_luminosity < 0)
- new_luminosity = 0
- if(!trueLum)
- new_luminosity *= new_luminosity
- if(light)
- if(trueLuminosity != new_luminosity) //non-luminous lights are removed from the lights list in add_effect()
- light.changed = 1
- else
- if(new_luminosity)
- light = new(src)
- trueLuminosity = new_luminosity
- if (trueLuminosity < 1)
- luminosity = 0
- else if (trueLuminosity <= 100)
- luminosity = sqrtTable[trueLuminosity]
- else
- luminosity = sqrt(trueLuminosity)
-
-atom/proc/AddLuminosity(delta_luminosity)
- if(delta_luminosity > 0)
- SetLuminosity(trueLuminosity + delta_luminosity*delta_luminosity, TRUE)
- else if(delta_luminosity < 0)
- SetLuminosity(trueLuminosity - delta_luminosity*delta_luminosity, TRUE)
-
-area/SetLuminosity(new_luminosity) //we don't want dynamic lighting for areas
- luminosity = !!new_luminosity
- trueLuminosity = luminosity
-
-
-//change our opacity (defaults to toggle), and then update all lights that affect us.
-atom/proc/SetOpacity(new_opacity)
- if(new_opacity == null)
- new_opacity = !opacity //default = toggle opacity
- else if(opacity == new_opacity)
- return 0 //opacity hasn't changed! don't bother doing anything
- opacity = new_opacity //update opacity, the below procs now call light updates.
- return 1
-
-turf/SetOpacity(new_opacity)
- if(..()==1) //only bother if opacity changed
- if(lighting_lumcount) //only bother with an update if our turf is currently affected by a light
- UpdateAffectingLights()
-
-/atom/movable/SetOpacity(new_opacity)
- if(..()==1) //only bother if opacity changed
- if(isturf(loc)) //only bother with an update if we're on a turf
- var/turf/T = loc
- if(T.lighting_lumcount) //only bother with an update if our turf is currently affected by a light
- UpdateAffectingLights()
-
-
-turf
- var/lighting_lumcount = 0
- var/lighting_changed = 0
- var/color_lighting_lumcount = 0
-
- var/lumcount_r = 0
- var/lumcount_g = 0
- var/lumcount_b = 0
- var/light_col_sources = 0
-
-turf/space
- lighting_lumcount = 4 //starlight
-
-turf/proc/update_lumcount(amount, col_r, col_g, col_b, removing = 0)
- lighting_lumcount += amount
-
- if(!isnull(col_r)) //col_r is the "key" var, if it's null so will the rest
- if(removing)
- light_col_sources--
- lumcount_r -= col_r
- lumcount_g -= col_g
- lumcount_b -= col_b
- else
- light_col_sources++
- lumcount_r += col_r
- lumcount_g += col_g
- lumcount_b += col_b
-
- if(light_col_sources)
- var/r_avg = max(0, min(255, round(lumcount_r / light_col_sources, 16) + 15))
- var/g_avg = max(0, min(255, round(lumcount_g / light_col_sources, 16) + 15))
- var/b_avg = max(0, min(255, round(lumcount_b / light_col_sources, 16) + 15))
- l_color = rgb(r_avg, g_avg, b_avg)
- else
- l_color = null
-
- color_lighting_lumcount = max(color_lighting_lumcount + amount, 0) // Minimum of 0.
-
- if(!lighting_changed)
- lighting_controller.changed_turfs += src
- lighting_changed = 1
-
-turf/proc/lighting_tag(const/level)
- var/area/A = loc
- return A.tagbase + "sd_L[level]"
-
-turf/proc/build_lighting_area(const/tag, const/level, const/color_light)
- var/area/Area = loc
- var/area/A = new Area.type() // create area if it wasn't found
- // replicate vars
- for(var/V in Area.vars)
- switch(V)
- if ("contents","lighting_overlay", "color_overlay", "overlays")
- continue
- else
- if(issaved(Area.vars[V])) A.vars[V] = Area.vars[V]
-
- A.tag = tag
- A.lighting_subarea = 1
- A.lighting_space = 0 // in case it was copied from a space subarea
-
- if (l_color != A.l_color)
- A.l_color = l_color
- //color_light = min(max(round(color_lighting_lumcount, 1), 0), lighting_controller.lighting_states)
- //world << "[color_light] [color_lighting_lumcount]"
-
- A.SetLightLevel(level, color_light)
- Area.related += A
- return A
-
-turf/proc/shift_to_subarea()
- lighting_changed = 0
- var/area/Area = loc
-
- if(!istype(Area) || !Area.lighting_use_dynamic) return
-
- var/level = min(max(round(lighting_lumcount,1),0),lighting_controller.lighting_states)
- var/new_tag = lighting_tag(level)
-
- // pomf - If we have a lighting color that is not null, apply the new tag to seperate the areas.
- if (l_color)
- // pomf - We append the (rounded!) color lighting lumcount so we can have colored lights.
- new_tag += "[l_color][min(max(round(color_lighting_lumcount,1),0),lighting_controller.lighting_states)]"
-
- if(Area.tag!=new_tag) //skip if already in this area
- var/area/A = locate(new_tag) // find an appropriate area
- var/color_light = min(max(round(color_lighting_lumcount,1),0),lighting_controller.lighting_states)
-
- if (!A)
- A = build_lighting_area(new_tag, level, color_light)
- else if (l_color != A.l_color)
- A.l_color = l_color
- //color_light = min(max(round(color_lighting_lumcount, 1), 0), lighting_controller.lighting_states)
- A.SetLightLevel(level, color_light)
-
- A.contents += src // move the turf into the area
- universe.OnTurfTick(src)
-
-// Dedicated lighting sublevel for space turfs
-// helps us depower things in space, remove space fire alarms,
-// and evens out space lighting
-turf/space/lighting_tag(var/level)
- var/area/A = loc
- return A.tagbase + "sd_L_space"
-turf/space/build_lighting_area(var/tag,var/level)
- var/area/A = ..(tag,4)
- A.lighting_space = 1
- A.SetLightLevel(4)
- A.icon_state = null
- return A
-
-
-area
- var/lighting_use_dynamic = 1 //Turn this flag off to prevent sd_DynamicAreaLighting from affecting this area
- var/image/lighting_overlay //tracks the darkness image of the area for easy removal
- var/lighting_subarea = 0 //tracks whether we're a lighting sub-area
- var/lighting_space = 0 // true for space-only lighting subareas
- var/tagbase
- var/image/color_overlay //Tracks the color image.
-
- proc/SetLightLevel(light, color_light = 0)
- if(!src) return
- if(light <= 0)
- light = 0
- luminosity = 0
- else
- if(light > lighting_controller.lighting_states)
- light = lighting_controller.lighting_states
- luminosity = 1
-
- if(lighting_overlay)
- overlays -= lighting_overlay
- lighting_overlay.icon_state = "[light]"
- else
- lighting_overlay = image(LIGHTING_ICON,,num2text(light),LIGHTING_LAYER)
-
- if (color_overlay)
- overlays.Remove(color_overlay)
- color_overlay.icon_state = "5"
- else
- if (l_color)
- color_overlay = image('icons/effects/effects.dmi', ,"5", 10.1)
- //color_overlay = image('icons/effects/effects.dmi', ,"white", 10.1)
-
- if (istype(color_overlay))
- color_overlay.color = l_color
-
-
- switch (color_light)
- if (6)
- color_overlay.icon_state = "5"
- //color_overlay.alpha = 180
- if (5)
- color_overlay.icon_state = "4"
- //color_overlay.alpha = 150
- if (4)
- color_overlay.icon_state = "3"
- //color_overlay.alpha = 120
- if (3)
- color_overlay.icon_state = "2"
- //color_overlay.alpha = 90
- if (2)
- color_overlay.icon_state = "1"
- //color_overlay.alpha = 60
- if (1)
- color_overlay.icon_state = "1"
- color_overlay.alpha = 200
- //color_overlay.alpha = 30
- if (-INFINITY to 0)
- //world << "Zero or below, [color_light]."
- color_overlay.alpha = 0
- else
- //world << "Setting the alpha to max... color_light [color_light]."
- color_overlay.alpha = 180
-
- color_overlay.blend_mode = BLEND_ADD
- if (color_overlay.color)
- overlays.Add(color_overlay)
-
- if (isnull(color_overlay))
- overlays.Add(lighting_overlay)
- else if (light < 6)
- overlays.Add(lighting_overlay)
-
- proc/SetDynamicLighting()
-
- src.lighting_use_dynamic = 1
- for(var/turf/T in src.contents)
- T.update_lumcount(0)
-
- proc/InitializeLighting() //TODO: could probably improve this bit ~Carn
- tagbase = "[type]"
- if(!tag) tag = tagbase
- if(!lighting_use_dynamic)
- if(!lighting_subarea) // see if this is a lighting subarea already
- //show the dark overlay so areas, not yet in a lighting subarea, won't be bright as day and look silly.
- SetLightLevel(4)
-
-//#undef LIGHTING_LAYER
-#undef LIGHTING_CIRCULAR
-//#undef LIGHTING_ICON
-
-#define LIGHTING_MAX_LUMINOSITY_STATIC 8 //Maximum luminosity to reduce lag.
-#define LIGHTING_MAX_LUMINOSITY_MOBILE 5 //Moving objects have a lower max luminosity since these update more often. (lag reduction)
-#define LIGHTING_MAX_LUMINOSITY_TURF 1 //turfs have a severely shortened range to protect from inevitable floor-lighttile spam.
-
-//set the changed status of all lights which could have possibly lit this atom.
-//We don't need to worry about lights which lit us but moved away, since they will have change status set already
-//This proc can cause lots of lights to be updated. :(
-atom/proc/UpdateAffectingLights()
- for(var/atom/A in oview(LIGHTING_MAX_LUMINOSITY_STATIC-1,src))
- if(A.light)
- A.light.changed = 1 //force it to update at next process()
-
-//caps luminosity effects max-range based on what type the light's owner is.
-atom/proc/get_light_range()
- return min(luminosity, LIGHTING_MAX_LUMINOSITY_STATIC)
-
-atom/movable/get_light_range()
- return min(luminosity, LIGHTING_MAX_LUMINOSITY_MOBILE)
-
-obj/machinery/light/get_light_range()
- return min(luminosity, LIGHTING_MAX_LUMINOSITY_STATIC)
-
-turf/get_light_range()
- return min(luminosity, LIGHTING_MAX_LUMINOSITY_TURF)
-
-#undef LIGHTING_MAX_LUMINOSITY_STATIC
-#undef LIGHTING_MAX_LUMINOSITY_MOBILE
-#undef LIGHTING_MAX_LUMINOSITY_TURF
\ No newline at end of file
diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm
index ee506c0d27f..6e379540873 100644
--- a/code/controllers/failsafe.dm
+++ b/code/controllers/failsafe.dm
@@ -25,7 +25,6 @@ var/datum/controller/failsafe/Failsafe
set background = 1
while(1) //more efficient than recursivly calling ourself over and over. background = 1 ensures we do not trigger an infinite loop
if(!master_controller) new /datum/controller/game_controller() //replace the missing master_controller! This should never happen.
- if(!lighting_controller) new /datum/controller/lighting() //replace the missing lighting_controller
if(processing)
if(lighting_controller.processing)
diff --git a/code/controllers/lighting_controller.dm b/code/controllers/lighting_controller.dm
deleted file mode 100644
index 8510af6714f..00000000000
--- a/code/controllers/lighting_controller.dm
+++ /dev/null
@@ -1,130 +0,0 @@
-var/datum/controller/lighting/lighting_controller = new ()
-
-datum/controller/lighting
- var/processing = 0
- var/processing_interval = 5 //setting this too low will probably kill the server. Don't be silly with it!
- var/process_cost = 0
- var/iteration = 0
-
- var/lighting_states = 7
-
- var/list/lights = list()
- var/lights_workload_max = 0
-
-// var/list/changed_lights() //TODO: possibly implement this to reduce on overheads?
-
- var/list/changed_turfs = list()
- var/changed_turfs_workload_max = 0
-
-
-datum/controller/lighting/New()
- lighting_states = max( 0, length(icon_states(LIGHTING_ICON))-1 )
- if(lighting_controller != src)
- if(istype(lighting_controller,/datum/controller/lighting))
- Recover() //if we are replacing an existing lighting_controller (due to a crash) we attempt to preserve as much as we can
- qdel(lighting_controller)
- lighting_controller = src
-
-
-//Workhorse of lighting. It cycles through each light to see which ones need their effects updating. It updates their
-//effects and then processes every turf in the queue, moving the turfs to the corresponing lighting sub-area.
-//All queue lists prune themselves, which will cause lights with no luminosity to be garbage collected (cheaper and safer
-//than deleting them). Processing interval should be roughly half a second for best results.
-//By using queues we are ensuring we don't perform more updates than are necessary
-datum/controller/lighting/proc/process()
- processing = 1
- spawn(0)
- set background = 1
- while(1)
- if(processing)
- iteration++
- var/started = world.timeofday
-
- lights_workload_max = max(lights_workload_max,lights.len)
- for(var/i=1, i<=lights.len, i++)
- var/datum/light_source/L = lights[i]
- if(L && !L.check())
- continue
- lights.Cut(i,i+1)
- i--
-
- sleep(-1)
-
- changed_turfs_workload_max = max(changed_turfs_workload_max,changed_turfs.len)
- for(var/i=1, i<=changed_turfs.len, i++)
- var/turf/T = changed_turfs[i]
- if(T && T.lighting_changed)
- T.shift_to_subarea()
- changed_turfs.Cut() // reset the changed list
-
- process_cost = (world.timeofday - started)
-
- sleep(processing_interval)
-
-//same as above except it attempts to shift ALL turfs in the world regardless of lighting_changed status
-//Does not loop. Should be run prior to process() being called for the first time.
-//Note: if we get additional z-levels at runtime (e.g. if the gateway thin ever gets finished) we can initialize specific
-//z-levels with the z_level argument
-datum/controller/lighting/proc/initializeLighting(var/z_level)
- processing = 0
- spawn(-1)
- set background = 1
- for(var/i=1, i<=lights.len, i++)
- var/datum/light_source/L = lights[i]
- if(L.check())
- lights.Cut(i,i+1)
- i--
-
- var/z_start = 1
- var/z_finish = world.maxz
- if(z_level)
- z_level = round(z_level,1)
- if(z_level > 0 && z_level <= world.maxz)
- z_start = z_level
- z_finish = z_level
-
- for(var/k=z_start,k<=z_finish,k++)
- for(var/i=1,i<=world.maxx,i++)
- for(var/j=1,j<=world.maxy,j++)
- var/turf/T = locate(i,j,k)
- if(T) T.shift_to_subarea()
-
- changed_turfs.Cut() // reset the changed list
-
-
-//Used to strip valid information from an existing controller and transfer it to a replacement
-//It works by using spawn(-1) to transfer the data, if there is a runtime the data does not get transfered but the loop
-//does not crash
-datum/controller/lighting/proc/Recover()
- if(!istype(lighting_controller.changed_turfs,/list))
- lighting_controller.changed_turfs = list()
- if(!istype(lighting_controller.lights,/list))
- lighting_controller.lights = list()
-
- for(var/i=1, i<=lighting_controller.lights.len, i++)
- var/datum/light_source/L = lighting_controller.lights[i]
- if(istype(L))
- spawn(-1) //so we don't crash the loop (inefficient)
- L.check()
- lights += L //If we didn't runtime then this will get transferred over
-
- for(var/i=1, i<=lighting_controller.changed_turfs.len, i++)
- var/turf/T = lighting_controller.changed_turfs[i]
- if(istype(T) && T.lighting_changed)
- spawn(-1)
- T.shift_to_subarea()
-
- var/msg = "## DEBUG: [time2text(world.timeofday)] lighting_controller restarted. Reports:\n"
- for(var/varname in lighting_controller.vars)
- switch(varname)
- if("tag","bestF","type","parent_type","vars") continue
- else
- var/varval1 = lighting_controller.vars[varname]
- var/varval2 = vars[varname]
- if(istype(varval1,/list))
- varval1 = "/list([length(varval1)])"
- varval2 = "/list([length(varval2)])"
- msg += "\t [varname] = [varval1] -> [varval2]\n"
- world.log << msg
-
-#undef LIGHTING_ICON
diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm
index d827a3a65e7..ddfd99f5d6c 100644
--- a/code/controllers/verbs.dm
+++ b/code/controllers/verbs.dm
@@ -30,7 +30,7 @@
var/tz = input("Z? (default 1)") as text|null
new map_datum(seed,tx,ty,tz)
-/client/proc/restart_controller(controller in list("Master","Failsafe","Lighting","Supply"))
+/client/proc/restart_controller(controller in list("Supply"))
set category = "Debug"
set name = "Restart Controller"
set desc = "Restart one of the various periodic loop controllers for the game (be careful!)"
@@ -39,13 +39,6 @@
usr = null
src = null
switch(controller)
- if("Failsafe")
- new /datum/controller/failsafe()
- feedback_add_details("admin_verb","RFailsafe")
- if("Lighting")
- new /datum/controller/lighting()
- lighting_controller.process()
- feedback_add_details("admin_verb","RLighting")
if("Supply")
supply_controller.process()
feedback_add_details("admin_verb","RSupply")
@@ -62,7 +55,7 @@
usr.client.debug_variables(antag)
message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.")
-/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Ticker Process","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano"))
+/client/proc/debug_controller(controller in list("Master","Ticker","Ticker Process","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano"))
set category = "Debug"
set name = "Debug Controller"
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
@@ -72,18 +65,12 @@
if("Master")
debug_variables(master_controller)
feedback_add_details("admin_verb","DMC")
- if("Failsafe")
- debug_variables(Failsafe)
- feedback_add_details("admin_verb","DFailsafe")
if("Ticker")
debug_variables(ticker)
feedback_add_details("admin_verb","DTicker")
if("Ticker Process")
debug_variables(tickerProcess)
feedback_add_details("admin_verb","DTickerProcess")
- if("Lighting")
- debug_variables(lighting_controller)
- feedback_add_details("admin_verb","DLighting")
if("Air")
debug_variables(air_master)
feedback_add_details("admin_verb","DAir")
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 13f1b39d987..21e965244bb 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -26,8 +26,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
icon = 'icons/turf/areas.dmi'
icon_state = "unknown"
layer = 10
+ luminosity = 1
mouse_opacity = 0
- invisibility = INVISIBILITY_LIGHTING
var/lightswitch = 1
var/eject = null
@@ -99,7 +99,6 @@ var/list/ghostteleportlocs = list()
icon_state = "space"
requires_power = 1
always_unpowered = 1
- lighting_use_dynamic = 1
power_light = 0
power_equip = 0
power_environ = 0
@@ -142,10 +141,8 @@ area/space/atmosalert()
//place to another. Look at escape shuttle for example.
//All shuttles should now be under shuttle since we have smooth-wall code.
-/area/shuttle //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS.
+/area/shuttle
requires_power = 0
- luminosity = 1
- lighting_use_dynamic = 0
/area/shuttle/arrival
name = "\improper Arrival Shuttle"
@@ -246,15 +243,11 @@ area/space/atmosalert()
icon_state = "shuttle"
name = "\improper Alien Shuttle Base"
requires_power = 1
- luminosity = 0
- lighting_use_dynamic = 1
/area/shuttle/alien/mine
icon_state = "shuttle"
name = "\improper Alien Shuttle Mine"
requires_power = 1
- luminosity = 0
- lighting_use_dynamic = 1
/area/shuttle/prison/
name = "\improper Prison Shuttle"
@@ -340,7 +333,6 @@ area/space/atmosalert()
name = "start area"
icon_state = "start"
requires_power = 0
- luminosity = 1
lighting_use_dynamic = 0
has_gravity = 1
@@ -358,6 +350,7 @@ area/space/atmosalert()
icon_state = "centcom"
requires_power = 0
unlimited_power = 1
+ lighting_use_dynamic = 0
/area/centcom/control
name = "\improper Centcom Control"
@@ -396,6 +389,7 @@ area/space/atmosalert()
icon_state = "syndie-ship"
requires_power = 0
unlimited_power = 1
+ lighting_use_dynamic = 0
/area/syndicate_mothership/control
name = "\improper Mercenary Control Room"
@@ -1006,7 +1000,6 @@ area/space/atmosalert()
/area/holodeck
name = "\improper Holodeck"
icon_state = "Holodeck"
- luminosity = 1
lighting_use_dynamic = 0
/area/holodeck/alphadeck
@@ -1136,7 +1129,6 @@ area/space/atmosalert()
/area/solar
requires_power = 1
always_unpowered = 1
- luminosity = 1
lighting_use_dynamic = 0
auxport
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index d3373c9d437..38452c3d5bd 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -13,20 +13,15 @@
uid = ++global_uid
all_areas += src
- if(requires_power)
- luminosity = 0
- else
+ if(!requires_power)
power_light = 0 //rastaf0
power_equip = 0 //rastaf0
power_environ = 0 //rastaf0
- luminosity = 1
- lighting_use_dynamic = 0
..()
// spawn(15)
power_change() // all machines set to current power level, also updates lighting icon
- InitializeLighting()
/area/proc/get_contents()
return contents
@@ -145,7 +140,7 @@
return
/area/proc/updateicon()
- if ((fire || eject || party) && (!requires_power||power_environ) && !lighting_space)//If it doesn't require power, can still activate this proc.
+ if ((fire || eject || party) && (!requires_power||power_environ) && !istype(src, /area/space))//If it doesn't require power, can still activate this proc.
if(fire && !eject && !party)
icon_state = "blue"
/*else if(atmosalm && !fire && !eject && !party)
@@ -173,8 +168,6 @@
return 1
if(always_unpowered)
return 0
- if(src.lighting_space)
- return 0 // Nope sorry
switch(chan)
if(EQUIP)
return power_equip
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 725d5b0a266..742c6389a95 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -26,7 +26,7 @@
/atom/Destroy()
. = ..()
density = 0
- SetOpacity(0)
+ set_opacity(0)
if(reagents)
qdel(reagents)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index b8b8bbb9f63..f86c135da40 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -30,15 +30,10 @@
..()
/atom/movable/Destroy()
- if(opacity)
- if(isturf(loc))
- if(loc:lighting_lumcount > 1)
- UpdateAffectingLights()
+ . = ..()
+
loc = null
- ..()
-
-
/atom/movable/proc/initialize()
return
@@ -215,4 +210,4 @@
/atom/movable/overlay/attack_hand(a, b, c)
if (src.master)
return src.master.attack_hand(a, b, c)
- return
\ No newline at end of file
+ return
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index 6e9c3d9b686..44486d605b5 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -3,7 +3,7 @@
name = "blob"
icon = 'icons/mob/blob.dmi'
icon_state = "blob"
- luminosity = 3
+ light_range = 3
desc = "Some blob creature thingy"
density = 1
opacity = 0
diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm
index 337ad39c0da..b5854ed9818 100644
--- a/code/game/gamemodes/cult/cult_structures.dm
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -22,8 +22,8 @@
desc = "A floating crystal that hums with an unearthly energy"
icon_state = "pylon"
var/isbroken = 0
- luminosity = 5
- l_color = "#3e0000"
+ light_range = 5
+ light_color = "#3e0000"
var/obj/item/wepon = null
/obj/structure/cult/pylon/attack_hand(mob/M as mob)
@@ -47,7 +47,7 @@
isbroken = 1
density = 0
icon_state = "pylon-broken"
- SetLuminosity(0)
+ set_light(0)
else
user << "You hit the pylon!"
playsound(get_turf(src), 'sound/effects/Glasshit.ogg', 75, 1)
@@ -66,13 +66,12 @@
isbroken = 0
density = 1
icon_state = "pylon"
- SetLuminosity(5)
+ set_light(5)
/obj/structure/cult/tome
name = "Desk"
desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl"
icon_state = "tomealtar"
-// luminosity = 5
//sprites for this no longer exist -Pete
//(they were stolen from another game anyway)
@@ -105,8 +104,8 @@
return
/obj/effect/gateway/active
- luminosity=5
- l_color="#ff0000"
+ light_range=5
+ light_color="#ff0000"
spawnable=list(
/mob/living/simple_animal/hostile/scarybat,
/mob/living/simple_animal/hostile/creature,
@@ -114,8 +113,8 @@
)
/obj/effect/gateway/active/cult
- luminosity=5
- l_color="#ff0000"
+ light_range=5
+ light_color="#ff0000"
spawnable=list(
/mob/living/simple_animal/hostile/scarybat/cult,
/mob/living/simple_animal/hostile/creature/cult,
diff --git a/code/game/gamemodes/cult/cultify/mob.dm b/code/game/gamemodes/cult/cultify/mob.dm
index 965d2548f75..154078de3d6 100644
--- a/code/game/gamemodes/cult/cultify/mob.dm
+++ b/code/game/gamemodes/cult/cultify/mob.dm
@@ -43,7 +43,7 @@
narsimage = image('icons/obj/narsie.dmi',src.loc,"narsie",9,1)
narsimage.mouse_opacity = 0
if(!narglow) //Create narglow
- narglow = image('icons/obj/narsie.dmi',narsimage.loc,"glow-narsie",LIGHTING_LAYER+2,1)
+ narglow = image('icons/obj/narsie.dmi',narsimage.loc,"glow-narsie",12,1)
narglow.mouse_opacity = 0
//Else if no dir is given, simply send them the image of narsie
var/new_x = 32 * (N.x - src.x) + N.pixel_x
diff --git a/code/game/gamemodes/cult/hell_universe.dm b/code/game/gamemodes/cult/hell_universe.dm
index 7a056deac26..9a7344f036a 100644
--- a/code/game/gamemodes/cult/hell_universe.dm
+++ b/code/game/gamemodes/cult/hell_universe.dm
@@ -73,9 +73,8 @@ In short:
spess.overlays += I
/datum/universal_state/hell/proc/AmbientSet()
- for(var/turf/T in world)
- if(istype(T, /turf/space)) continue
- T.update_lumcount(1, 255, 0, 0, 0)
+ for(var/atom/movable/lighting_overlay/L in world)
+ L.update_lumcount(1, 0, 0)
/datum/universal_state/hell/proc/MiscSet()
for(var/turf/simulated/floor/T in world)
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm
index 305205c6a05..d71ff249d10 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm
+++ b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm
@@ -8,7 +8,7 @@
//luminosity = 5
//l_color="#0066FF"
- layer = LIGHTING_LAYER+1
+ layer = 11
var/spawned=0 // DIR mask
var/next_check=0
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm
index 62c8b1aa446..8c826fe22db 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm
+++ b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm
@@ -10,7 +10,7 @@
announce=0
narnar=0
- layer=LIGHTING_LAYER+2 // ITS SO BRIGHT
+ layer=12 // ITS SO BRIGHT
consume_range = 6
@@ -65,7 +65,7 @@
/mob/proc/see_rift(var/obj/singularity/narsie/large/exit/R)
if((R.z == src.z) && (get_dist(R,src) <= (R.consume_range+10)) && !(R in view(src)))
if(!riftimage)
- riftimage = image('icons/obj/rift.dmi',src.loc,"rift",LIGHTING_LAYER+2,1)
+ riftimage = image('icons/obj/rift.dmi',src.loc,"rift",12,1)
riftimage.mouse_opacity = 0
var/new_x = 32 * (R.x - src.x) + R.pixel_x
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
index e97cf0a0a42..37b68340a8b 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
+++ b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
@@ -110,10 +110,9 @@ AUTOMATED ALERT: Link to [command_name()] lost."}
spess.overlays += "end01"
/datum/universal_state/supermatter_cascade/proc/AmbientSet()
- for(var/turf/T in world)
- if(istype(T, /turf/space)) continue
- if(!(T.z in config.admin_levels))
- T.update_lumcount(1, 160, 255, 0, 0)
+ for(var/atom/movable/lighting_overlay/L in world)
+ if(!(L.z in config.admin_levels))
+ L.update_lumcount(0.5, 1, 0)
/datum/universal_state/supermatter_cascade/proc/MiscSet()
for (var/obj/machinery/firealarm/alm in world)
diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm
index 3d54f12e30e..70740901fae 100644
--- a/code/game/machinery/bots/bots.dm
+++ b/code/game/machinery/bots/bots.dm
@@ -3,7 +3,7 @@
/obj/machinery/bot
icon = 'icons/obj/aibots.dmi'
layer = MOB_LAYER
- luminosity = 3
+ light_range = 3
use_power = 0
var/obj/item/weapon/card/id/botcard // the ID card that the bot "holds"
var/on = 1
@@ -18,12 +18,12 @@
/obj/machinery/bot/proc/turn_on()
if(stat) return 0
on = 1
- SetLuminosity(initial(luminosity))
+ set_light(initial(light_range))
return 1
/obj/machinery/bot/proc/turn_off()
on = 0
- SetLuminosity(0)
+ set_light(0)
/obj/machinery/bot/proc/explode()
qdel(src)
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 5670ef20603..4a7aed5555b 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -65,7 +65,7 @@
if(!isEmpProof())
if(prob(100/severity))
stat |= EMPED
- SetLuminosity(0)
+ set_light(0)
kick_viewers()
triggerCameraAlarm(30 / severity)
update_icon()
diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm
index 19ac77d2c77..374f0426ada 100644
--- a/code/game/machinery/doors/blast_door.dm
+++ b/code/game/machinery/doors/blast_door.dm
@@ -23,8 +23,8 @@
var/id = 1.0
dir = 1
explosion_resistance = 25
-
- //Most blast doors are infrequently toggled and sometimes used with regular doors anyways,
+
+ //Most blast doors are infrequently toggled and sometimes used with regular doors anyways,
//turning this off prevents awkward zone geometry in places like medbay lobby, for example.
block_air_zones = 0
@@ -56,7 +56,7 @@
src.density = 0
update_nearby_tiles()
src.update_icon()
- src.SetOpacity(0)
+ src.set_opacity(0)
sleep(15)
src.layer = open_layer
src.operating = 0
@@ -71,7 +71,7 @@
src.density = 1
update_nearby_tiles()
src.update_icon()
- src.SetOpacity(initial(opacity))
+ src.set_opacity(initial(opacity))
sleep(15)
src.operating = 0
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index b3dc9bf978b..27ce595a779 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -35,11 +35,11 @@
..()
spawn(20)
- for(var/obj/machinery/door/window/brigdoor/M in world)
+ for(var/obj/machinery/door/window/brigdoor/M in machines)
if (M.id == src.id)
targets += M
- for(var/obj/machinery/flasher/F in world)
+ for(var/obj/machinery/flasher/F in machines)
if(F.id == src.id)
targets += F
@@ -345,4 +345,4 @@
#undef FONT_SIZE
#undef FONT_COLOR
#undef FONT_STYLE
-#undef CHARS_PER_LINE
\ No newline at end of file
+#undef CHARS_PER_LINE
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index e02be363f4e..0f3760009d6 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -394,14 +394,14 @@
do_animate("opening")
icon_state = "door0"
- src.SetOpacity(0)
+ set_opacity(0)
sleep(3)
src.density = 0
sleep(7)
src.layer = open_layer
explosion_resistance = 0
update_icon()
- SetOpacity(0)
+ set_opacity(0)
update_nearby_tiles()
operating = 0
@@ -427,7 +427,7 @@
sleep(7)
update_icon()
if(visible && !glass)
- SetOpacity(1) //caaaaarn!
+ set_opacity(1) //caaaaarn!
operating = 0
update_nearby_tiles()
diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm
index d71b060bb07..b7272dc8294 100644
--- a/code/game/machinery/floodlight.dm
+++ b/code/game/machinery/floodlight.dm
@@ -26,7 +26,7 @@
else
on = 0
updateicon()
- SetLuminosity(0)
+ set_light(0)
src.visible_message("[src] shuts down due to lack of power!")
return
@@ -50,7 +50,7 @@
if(on)
on = 0
user << "\blue You turn off the light"
- SetLuminosity(0)
+ set_light(0)
else
if(!cell)
return
@@ -58,7 +58,7 @@
return
on = 1
user << "\blue You turn on the light"
- SetLuminosity(brightness_on)
+ set_light(brightness_on)
updateicon()
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index db3dd6d585a..28bb2be7bcc 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -37,7 +37,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED
icon_state = "holopad0"
layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them.
-
+
var/power_per_hologram = 500 //per usage per hologram
idle_power_usage = 5
use_power = 1
@@ -120,10 +120,10 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them.
hologram.anchored = 1//So space wind cannot drag it.
hologram.name = "[A.name] (Hologram)"//If someone decides to right click.
- hologram.SetLuminosity(2) //hologram lighting
+ hologram.set_light(2) //hologram lighting
hologram.color = color //painted holopad gives coloured holograms
masters[A] = hologram
- SetLuminosity(2) //pad lighting
+ set_light(2) //pad lighting
icon_state = "holopad1"
A.holo = src
return 1
@@ -134,7 +134,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
qdel(masters[user])//Get rid of user's hologram
masters -= user //Discard AI from the list of those who use holopad
if (!masters.len)//If no users left
- SetLuminosity(0) //pad lighting (hologram lighting will be handled automatically since its owner was deleted)
+ set_light(0) //pad lighting (hologram lighting will be handled automatically since its owner was deleted)
icon_state = "holopad0"
return 1
@@ -144,11 +144,11 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
if((stat & NOPOWER) || !active_ai)
clear_holo(master)
continue
-
+
if((HOLOPAD_MODE == RANGE_BASED && (get_dist(master.eyeobj, src) > holo_range)))
clear_holo(master)
continue
-
+
if(HOLOPAD_MODE == AREA_BASED)
var/area/holo_area = get_area(src)
var/area/eye_area = get_area(master.eyeobj)
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index 6d823e23fef..ff974fbe19d 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -164,7 +164,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
var/c_locked=0; //Will our new channel be locked to public submissions?
var/hitstaken = 0 //Death at 3 hits from an item with force>=15
var/datum/feed_channel/viewing_channel = null
- luminosity = 0
+ light_range = 0
anchored = 1
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index a5638067147..23aba341697 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -54,7 +54,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
var/message = "";
var/dpt = ""; //the department which will be receiving the message
var/priority = -1 ; //Priority of the message being sent
- luminosity = 0
+ light_range = 0
var/datum/announcement/announcement = new
/obj/machinery/requests_console/power_change()
@@ -176,7 +176,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
if (Console.department == department)
Console.newmessagepriority = 0
Console.icon_state = "req_comp0"
- Console.luminosity = 1
+ Console.set_light(1)
newmessagepriority = 0
icon_state = "req_comp0"
for(var/msg in messages)
@@ -320,7 +320,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
Console.messages += "Message from [department]
[message]"
screen = 6
- Console.luminosity = 2
+ Console.set_light(2)
messages += "Message sent to [dpt]
[message]"
else
for (var/mob/O in hearers(4, src.loc))
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 479d55cb8b4..b0423340e7e 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -1004,8 +1004,8 @@
set popup_menu = 0
if(usr!=occupant) return
lights = !lights
- if(lights) SetLuminosity(luminosity + lights_power)
- else SetLuminosity(luminosity - lights_power)
+ if(lights) set_light(light_range + lights_power)
+ else set_light(light_range - lights_power)
src.occupant_message("Toggled lights [lights?"on":"off"].")
log_message("Toggled lights [lights?"on":"off"].")
return
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index e6b166792f7..6882f9affa5 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -164,7 +164,7 @@
name = "purple sac"
desc = "Weird purple octopus-like thing."
layer = 3
- luminosity = NODERANGE
+ light_range = NODERANGE
var/node_range = NODERANGE
/obj/effect/alien/weeds/node/New()
diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm
index 74e2fa951f5..c70a5ab9fc6 100644
--- a/code/game/objects/effects/decals/Cleanable/misc.dm
+++ b/code/game/objects/effects/decals/Cleanable/misc.dm
@@ -58,7 +58,7 @@
density = 0
anchored = 1
layer = 2
- luminosity = 1
+ light_range = 1
icon = 'icons/effects/effects.dmi'
icon_state = "greenglow"
@@ -142,4 +142,4 @@
layer = 2
icon = 'icons/effects/blood.dmi'
icon_state = "mfloor1"
- random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")
\ No newline at end of file
+ random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index 29eb08f4875..ecd4904df7f 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -244,7 +244,7 @@ steam.start() -- spawns the effect
/obj/effect/effect/smoke/illumination/New(var/newloc, var/brightness=15, var/lifetime=10)
time_to_live=lifetime
..()
- SetLuminosity(brightness)
+ set_light(brightness)
/////////////////////////////////////////////
// Bad smoke
diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm
index 336ee0386d4..aac0b7d56a6 100644
--- a/code/game/objects/effects/overlays.dm
+++ b/code/game/objects/effects/overlays.dm
@@ -37,4 +37,4 @@
name = "Bluespace"
icon = 'icons/turf/space.dmi'
icon_state = "bluespacify"
- layer = LIGHTING_LAYER
+ layer = 10
diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm
index 32f05901b4a..58c053aa669 100644
--- a/code/game/objects/explosion.dm
+++ b/code/game/objects/explosion.dm
@@ -68,8 +68,8 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (JMP)")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
- var/lighting_controller_was_processing = lighting_controller.processing //Pause the lighting updates for a bit
- lighting_controller.processing = 0
+// var/lighting_controller_was_processing = lighting_controller.processing //Pause the lighting updates for a bit
+// lighting_controller.processing = 0
var/approximate_intensity = (devastation_range * 3) + (heavy_impact_range * 2) + light_impact_range
@@ -87,8 +87,8 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
var/y0 = epicenter.y
var/z0 = epicenter.z
- for(var/turf/T in range(epicenter, max_range))
- var/dist = cheap_pythag(T.x - x0,T.y - y0)
+ for(var/turf/T in trange(max_range, epicenter))
+ var/dist = sqrt((T.x - x0)**2 + (T.y - y0)**2)
if(dist < devastation_range) dist = 1
else if(dist < heavy_impact_range) dist = 2
@@ -99,7 +99,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
if(T)
for(var/atom_movable in T.contents) //bypass type checking since only atom/movable can be contained by turfs anyway
var/atom/movable/AM = atom_movable
- if(AM) AM.ex_act(dist)
+ if(AM && AM.simulated) AM.ex_act(dist)
var/took = (world.timeofday-start)/10
//You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
@@ -113,7 +113,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
sleep(8)
- if(!lighting_controller.processing) lighting_controller.processing = lighting_controller_was_processing
+// if(!lighting_controller.processing) lighting_controller.processing = lighting_controller_was_processing
if(!powernet_rebuild_was_deferred_already && defer_powernet_rebuild)
makepowernets()
defer_powernet_rebuild = 0
diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm
index 85d34c6a28d..57fb2d647cf 100644
--- a/code/game/objects/items/blueprints.dm
+++ b/code/game/objects/items/blueprints.dm
@@ -121,7 +121,6 @@ move an amendment to the drawing.
return
var/area/A = new
A.name = str
- A.tagbase = "[A.type]_[md5(str)]" // without this dynamic light system ruin everithing
//var/ma
//ma = A.master ? "[A.master]" : "(null)"
//world << "DEBUG: create_area:
A.name=[A.name]
A.tag=[A.tag]
A.master=[ma]"
@@ -132,9 +131,6 @@ move an amendment to the drawing.
move_turfs_to_area(turfs, A)
A.always_unpowered = 0
- for(var/turf/T in A.contents)
- T.lighting_changed = 1
- lighting_controller.changed_turfs += T
spawn(5)
//ma = A.master ? "[A.master]" : "(null)"
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index c7421f93972..9979b66ce29 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -308,15 +308,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
/*
* The Actual PDA
*/
-/obj/item/device/pda/pickup(mob/user)
- if(fon)
- SetLuminosity(0)
- user.SetLuminosity(user.luminosity + f_lum)
-
-/obj/item/device/pda/dropped(mob/user)
- if(fon)
- user.SetLuminosity(user.luminosity - f_lum)
- SetLuminosity(f_lum)
/obj/item/device/pda/New()
..()
@@ -644,12 +635,10 @@ var/global/list/obj/item/device/pda/PDAs = list()
if("Light")
if(fon)
fon = 0
- if(src in U.contents) U.SetLuminosity(U.luminosity - f_lum)
- else SetLuminosity(0)
+ set_light(0)
else
fon = 1
- if(src in U.contents) U.SetLuminosity(U.luminosity + f_lum)
- else SetLuminosity(f_lum)
+ set_light(f_lum)
if("Medical Scan")
if(scanmode == 1)
scanmode = 0
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index fb3edec8732..36cd50ce2df 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -18,24 +18,17 @@
..()
if(on)
icon_state = "[initial(icon_state)]-on"
- SetLuminosity(brightness_on)
+ set_light(brightness_on)
else
icon_state = initial(icon_state)
- SetLuminosity(0)
+ set_light(0)
/obj/item/device/flashlight/proc/update_brightness(var/mob/user = null)
if(on)
icon_state = "[initial(icon_state)]-on"
- if(loc == user)
- user.SetLuminosity(user.luminosity + brightness_on)
- else if(isturf(loc))
- SetLuminosity(brightness_on)
+ set_light(brightness_on)
else
- icon_state = initial(icon_state)
- if(loc == user)
- user.SetLuminosity(user.luminosity - brightness_on)
- else if(isturf(loc))
- SetLuminosity(0)
+ set_light(0)
/obj/item/device/flashlight/attack_self(mob/user)
if(!isturf(user.loc))
@@ -88,19 +81,6 @@
else
return ..()
-
-/obj/item/device/flashlight/pickup(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity + brightness_on)
- SetLuminosity(0)
-
-
-/obj/item/device/flashlight/dropped(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity - brightness_on)
- SetLuminosity(brightness_on)
-
-
/obj/item/device/flashlight/pen
name = "penlight"
desc = "A pen-sized light, used by medical staff."
@@ -217,7 +197,7 @@
on = 1 //Bio-luminesence has one setting, on.
/obj/item/device/flashlight/slime/New()
- SetLuminosity(brightness_on)
+ set_light(brightness_on)
spawn(1) //Might be sloppy, but seems to be necessary to prevent further runtimes and make these work as intended... don't judge me!
update_brightness()
icon_state = initial(icon_state)
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index 020b1a83f05..e9c3687fe49 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -140,7 +140,9 @@
var/obj/item/weapon/light/L1 = new target.light_type(target.loc)
L1.status = target.status
L1.rigged = target.rigged
- L1.brightness = target.brightness
+ L1.brightness_range = target.brightness_range
+ L1.brightness_power = target.brightness_power
+ L1.brightness_color = target.brightness_color
L1.switchcount = target.switchcount
target.switchcount = 0
L1.update()
@@ -153,7 +155,9 @@
target.status = L2.status
target.switchcount = L2.switchcount
target.rigged = emagged
- target.brightness = L2.brightness
+ target.brightness_range = L2.brightness_range
+ target.brightness_power = L2.brightness_power
+ target.brightness_color = L2.brightness_color
target.on = target.has_power()
target.update()
qdel(L2)
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index a8cb7076853..623c57be89d 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -52,7 +52,7 @@
anchored = 0
mode = 0
src.visible_message("[user] detaches [src] from the cable!")
- SetLuminosity(0)
+ set_light(0)
icon_state = "powersink0"
return
@@ -74,7 +74,7 @@
if(2) //This switch option wasn't originally included. It exists now. --NeoFite
src.visible_message("[user] deactivates [src]!")
mode = 1
- SetLuminosity(0)
+ set_light(0)
icon_state = "powersink0"
processing_objects.Remove(src)
@@ -91,7 +91,7 @@
if(!PN)
return
- SetLuminosity(12)
+ set_light(12)
PN.trigger_warning()
// found a powernet, so drain up to max power from it
drained = PN.draw_power(drain_rate)
@@ -124,4 +124,4 @@
if(attached && attached.powernet)
PN = attached.powernet
else
- PN = null
\ No newline at end of file
+ PN = null
diff --git a/code/game/objects/items/weapons/candle.dm b/code/game/objects/items/weapons/candle.dm
index 9bbdd1380dc..31417798847 100644
--- a/code/game/objects/items/weapons/candle.dm
+++ b/code/game/objects/items/weapons/candle.dm
@@ -48,7 +48,7 @@
//src.damtype = "fire"
for(var/mob/O in viewers(usr, null))
O.show_message(flavor_text, 1)
- SetLuminosity(CANDLE_LUM)
+ set_light(CANDLE_LUM)
processing_objects.Add(src)
@@ -66,22 +66,8 @@
var/turf/T = loc
T.hotspot_expose(700, 5)
-
/obj/item/weapon/flame/candle/attack_self(mob/user as mob)
if(lit)
lit = 0
update_icon()
- SetLuminosity(0)
- user.SetLuminosity(user.luminosity - CANDLE_LUM)
-
-
-/obj/item/weapon/flame/candle/pickup(mob/user)
- if(lit)
- SetLuminosity(0)
- user.SetLuminosity(user.luminosity + CANDLE_LUM)
-
-
-/obj/item/weapon/flame/candle/dropped(mob/user)
- if(lit)
- user.SetLuminosity(user.luminosity - CANDLE_LUM)
- SetLuminosity(CANDLE_LUM)
\ No newline at end of file
+ set_light(0)
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 15b43d63e0d..304131d7362 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -176,7 +176,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
M.update_inv_l_hand(0)
M.update_inv_r_hand(1)
processing_objects.Remove(src)
-
+
/obj/item/clothing/mask/smokable/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if(isflamesource(W))
@@ -221,7 +221,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(istype(W, /obj/item/weapon/melee/energy/sword))
var/obj/item/weapon/melee/energy/sword/S = W
if(S.active)
- light("[user] swings their [W], barely missing their nose. They light their [name] in the process.")
+ light("[user] swings their [W], barely missing their nose. They light their [name] in the process.")
return
@@ -456,7 +456,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
user.apply_damage(2,BURN,"r_hand")
user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process.")
- user.SetLuminosity(user.luminosity + 2)
+ set_light(2)
processing_objects.Add(src)
else
lit = 0
@@ -467,7 +467,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
user.visible_message("[user] quietly shuts off the [src].")
- user.SetLuminosity(user.luminosity - 2)
+ set_light(0)
processing_objects.Remove(src)
else
return ..()
@@ -496,17 +496,3 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(location)
location.hotspot_expose(700, 5)
return
-
-
-/obj/item/weapon/flame/lighter/pickup(mob/user)
- if(lit)
- SetLuminosity(0)
- user.SetLuminosity(user.luminosity+2)
- return
-
-
-/obj/item/weapon/flame/lighter/dropped(mob/user)
- if(lit)
- user.SetLuminosity(user.luminosity-2)
- SetLuminosity(2)
- return
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index a37ccd6c65b..4b0501a2d11 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -7,8 +7,6 @@
var/list/climbers = list()
/obj/structure/Destroy()
- if(opacity)
- UpdateAffectingLights()
if(parts)
new parts(loc)
..()
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 186f1debacc..7690a2d11e8 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -62,7 +62,7 @@
flick("[mineral]fwall_opening", src)
sleep(15)
src.density = 0
- SetOpacity(0)
+ set_opacity(0)
opening = 0
else
opening = 1
@@ -70,7 +70,7 @@
icon_state = "[mineral]0"
density = 1
sleep(15)
- SetOpacity(1)
+ set_opacity(1)
src.relativewall()
opening = 0
@@ -186,7 +186,7 @@
flick("frwall_opening", src)
sleep(15)
density = 0
- SetOpacity(0)
+ set_opacity(0)
opening = 0
else
opening = 1
@@ -194,7 +194,7 @@
flick("frwall_closing", src)
density = 1
sleep(15)
- SetOpacity(1)
+ set_opacity(1)
relativewall()
opening = 0
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index d0a60d2a3e5..ecd2d823dba 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -168,7 +168,7 @@
/obj/structure/mineral_door/uranium
mineralType = "uranium"
hardness = 3
- luminosity = 2
+ light_range = 2
/obj/structure/mineral_door/sandstone
mineralType = "sandstone"
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 36d5bcc657f..387c76eb698 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -479,10 +479,10 @@
/obj/structure/window/reinforced/polarized/proc/toggle()
if(opacity)
animate(src, color="#FFFFFF", time=5)
- SetOpacity(0)
+ set_opacity(0)
else
animate(src, color="#222222", time=5)
- SetOpacity(1)
+ set_opacity(1)
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index 3c6e434b8c5..0f5d49d223b 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -26,18 +26,14 @@ var/list/mechtoys = list(
/obj/item/weapon/paper/manifest
name = "supply manifest"
-/area/supply/station //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS.
+/area/supply/station
name = "Supply Shuttle"
icon_state = "shuttle3"
- luminosity = 1
- lighting_use_dynamic = 0
requires_power = 0
-/area/supply/dock //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS.
+/area/supply/dock
name = "Supply Shuttle"
icon_state = "shuttle3"
- luminosity = 1
- lighting_use_dynamic = 0
requires_power = 0
/obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 9541e671164..cefccdc46f9 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -133,19 +133,19 @@ turf/simulated/floor/proc/update_icon()
switch(get_lightfloor_state())
if(LIGHTFLOOR_STATE_OK)
icon_state = "light_on"
- SetLuminosity(5)
+ set_light(5)
if(LIGHTFLOOR_STATE_FLICKER)
var/num = pick("1","2","3","4")
icon_state = "light_on_flicker[num]"
- SetLuminosity(5)
+ set_light(5)
if(LIGHTFLOOR_STATE_BREAKING)
icon_state = "light_on_broken"
- SetLuminosity(5)
+ set_light(5)
if(LIGHTFLOOR_STATE_BROKEN)
icon_state = "light_off"
- SetLuminosity(0)
+ set_light(0)
else
- SetLuminosity(0)
+ set_light(0)
icon_state = "light_off"
else if(is_grass_floor())
if(!broken && !burnt)
@@ -339,7 +339,7 @@ turf/simulated/floor/proc/update_icon()
if(!floor_type) return
icon_plating = "plating"
- SetLuminosity(0)
+ set_light(0)
floor_type = null
intact = 0
broken = 0
@@ -355,7 +355,7 @@ turf/simulated/floor/proc/update_icon()
broken = 0
burnt = 0
intact = 1
- SetLuminosity(0)
+ set_light(0)
if(T)
if(istype(T,/obj/item/stack/tile/plasteel))
floor_type = T.type
diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm
index b036df007ac..450352f9b5b 100644
--- a/code/game/turfs/simulated/floor_types.dm
+++ b/code/game/turfs/simulated/floor_types.dm
@@ -14,7 +14,7 @@
/turf/simulated/floor/light
name = "Light floor"
- luminosity = 5
+ light_range = 5
icon_state = "light_on"
floor_type = /obj/item/stack/tile/light
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index bfd7548276d..d8db07de58f 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -6,6 +6,7 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" =
icon = 'icons/turf/space.dmi'
name = "\proper space"
icon_state = "0"
+ dynamic_lighting = 0
temperature = T20C
thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
@@ -20,9 +21,9 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" =
if(!config.starlight)
return
if(locate(/turf/simulated) in orange(src,1))
- SetLuminosity(config.starlight)
+ set_light(config.starlight)
else
- SetLuminosity(0)
+ set_light(0)
/turf/space/attackby(obj/item/C as obj, mob/user as mob)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 98f56361feb..05fc4cd2db2 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -32,6 +32,8 @@
// holy water
var/holy = 0
+ var/dynamic_lighting = 1
+
/turf/New()
..()
for(var/atom/movable/AM as mob|obj in src)
@@ -218,8 +220,10 @@
return W
///// Z-Level Stuff
- var/old_lumcount = lighting_lumcount - initial(lighting_lumcount)
var/obj/fire/old_fire = fire
+ var/old_opacity = opacity
+ var/old_dynamic_lighting = dynamic_lighting
+ var/list/old_affecting_lights = affecting_lights
//world << "Replacing [src.type] with [N]"
@@ -237,11 +241,6 @@
var/turf/simulated/W = new N( locate(src.x, src.y, src.z) )
//W.Assimilate_Air()
- W.lighting_lumcount += old_lumcount
- if((old_lumcount != W.lighting_lumcount) || (loc.name != "Space" && force_lighting_update))
- W.lighting_changed = 1
- lighting_controller.changed_turfs += W
-
if(old_fire)
fire = old_fire
@@ -258,15 +257,11 @@
S.update_starlight()
W.levelupdate()
- return W
+ . = W
else
var/turf/W = new N( locate(src.x, src.y, src.z) )
- W.lighting_lumcount += old_lumcount
- if((old_lumcount != W.lighting_lumcount) || (loc.name != "Space" && force_lighting_update))
- W.lighting_changed = 1
- lighting_controller.changed_turfs += W
if(old_fire)
old_fire.RemoveFire()
@@ -281,7 +276,16 @@
S.update_starlight()
W.levelupdate()
- return W
+ . = W
+
+ affecting_lights = old_affecting_lights
+ if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting) || force_lighting_update)
+ reconsider_lights()
+ if(dynamic_lighting != old_dynamic_lighting)
+ if(dynamic_lighting)
+ lighting_build_overlays()
+ else
+ lighting_clear_overlays()
//Commented out by SkyMarshal 5/10/13 - If you are patching up space, it should be vacuum.
diff --git a/code/modules/admin/verbs/massmodvar.dm b/code/modules/admin/verbs/massmodvar.dm
index a6b4bf7d167..87827dcf4b7 100644
--- a/code/modules/admin/verbs/massmodvar.dm
+++ b/code/modules/admin/verbs/massmodvar.dm
@@ -208,8 +208,8 @@
O.vars[variable]) as num|null
if(new_value == null) return
- if(variable=="luminosity")
- O.SetLuminosity(new_value)
+ if(variable=="light_range")
+ O.set_light(new_value)
else
O.vars[variable] = new_value
@@ -217,24 +217,24 @@
if(istype(O, /mob))
for(var/mob/M in mob_list)
if ( istype(M , O.type) )
- if(variable=="luminosity")
- M.SetLuminosity(new_value)
+ if(variable=="light_range")
+ M.set_light(new_value)
else
M.vars[variable] = O.vars[variable]
else if(istype(O, /obj))
for(var/obj/A in world)
if ( istype(A , O.type) )
- if(variable=="luminosity")
- A.SetLuminosity(new_value)
+ if(variable=="light_range")
+ A.set_light(new_value)
else
A.vars[variable] = O.vars[variable]
else if(istype(O, /turf))
for(var/turf/A in world)
if ( istype(A , O.type) )
- if(variable=="luminosity")
- A.SetLuminosity(new_value)
+ if(variable=="light_range")
+ A.set_light(new_value)
else
A.vars[variable] = O.vars[variable]
@@ -242,24 +242,24 @@
if(istype(O, /mob))
for(var/mob/M in mob_list)
if (M.type == O.type)
- if(variable=="luminosity")
- M.SetLuminosity(new_value)
+ if(variable=="light_range")
+ M.set_light(new_value)
else
M.vars[variable] = O.vars[variable]
else if(istype(O, /obj))
for(var/obj/A in world)
if (A.type == O.type)
- if(variable=="luminosity")
- A.SetLuminosity(new_value)
+ if(variable=="light_range")
+ A.set_light(new_value)
else
A.vars[variable] = O.vars[variable]
else if(istype(O, /turf))
for(var/turf/A in world)
if (A.type == O.type)
- if(variable=="luminosity")
- A.SetLuminosity(new_value)
+ if(variable=="light_range")
+ A.set_light(new_value)
else
A.vars[variable] = O.vars[variable]
@@ -372,4 +372,4 @@
A.vars[variable] = O.vars[variable]
log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]")
- message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]", 1)
\ No newline at end of file
+ message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]", 1)
diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm
index fce2aa59dc5..bdff5fb73ab 100644
--- a/code/modules/admin/verbs/modifyvariables.dm
+++ b/code/modules/admin/verbs/modifyvariables.dm
@@ -455,10 +455,10 @@ var/list/forbidden_varedit_object_types = list(
O.vars[variable] = var_new
if("num")
- if(variable=="luminosity")
+ if(variable=="light_range")
var/var_new = input("Enter new number:","Num",O.vars[variable]) as null|num
if(var_new == null) return
- O.SetLuminosity(var_new)
+ O.set_light(var_new)
else if(variable=="stat")
var/var_new = input("Enter new number:","Num",O.vars[variable]) as null|num
if(var_new == null) return
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 527f596f548..69d44bf89b7 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -264,37 +264,19 @@ BLIND // can't see anything
return
on = !on
user << "You [on ? "enable" : "disable"] the helmet light."
- update_light(user)
+ update_flashlight(user)
else
return ..(user)
-/obj/item/clothing/head/proc/update_light(var/mob/user = null)
+/obj/item/clothing/head/proc/update_flashlight(var/mob/user = null)
if(on && !light_applied)
- if(loc == user)
- user.SetLuminosity(user.luminosity + brightness_on)
- SetLuminosity(brightness_on)
+ set_light(brightness_on)
light_applied = 1
else if(!on && light_applied)
- if(loc == user)
- user.SetLuminosity(user.luminosity - brightness_on)
- SetLuminosity(0)
+ set_light(0)
light_applied = 0
update_icon(user)
-/obj/item/clothing/head/equipped(mob/user)
- ..()
- spawn(1)
- if(on && loc == user && !light_applied)
- user.SetLuminosity(user.luminosity + brightness_on)
- light_applied = 1
-
-/obj/item/clothing/head/dropped(mob/user)
- ..()
- spawn(1)
- if(on && loc != user && light_applied)
- user.SetLuminosity(user.luminosity - brightness_on)
- light_applied = 0
-
/obj/item/clothing/head/update_icon(var/mob/user)
overlays.Cut()
@@ -308,18 +290,6 @@ BLIND // can't see anything
var/mob/living/carbon/human/H = user
H.update_inv_head()
-/obj/item/clothing/head/equipped(mob/user)
- ..()
- update_light(user)
-
-/obj/item/clothing/head/pickup(mob/user)
- ..()
- update_light(user)
-
-/obj/item/clothing/head/dropped(mob/user)
- ..()
- update_light(user)
-
/obj/item/clothing/head/update_clothing_icon()
if (ismob(src.loc))
var/mob/M = src.loc
diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm
index cae036d9371..1dabe9f3452 100644
--- a/code/modules/holodeck/HolodeckObjects.dm
+++ b/code/modules/holodeck/HolodeckObjects.dm
@@ -400,7 +400,7 @@
/mob/living/simple_animal/hostile/carp/holodeck/New()
..()
- SetLuminosity(2) //hologram lighting
+ set_light(2) //hologram lighting
/mob/living/simple_animal/hostile/carp/holodeck/proc/set_safety(var/safe)
if (safe)
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 1d21c049321..2f6dc0ad738 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -341,9 +341,6 @@
..()
if(!seed)
return
- if(seed.get_trait(TRAIT_BIOLUM))
- user.SetLuminosity(user.luminosity + seed.get_trait(TRAIT_BIOLUM))
- SetLuminosity(0)
if(seed.get_trait(TRAIT_STINGS))
var/mob/living/carbon/human/H = user
if(istype(H) && H.gloves)
@@ -354,12 +351,6 @@
seed.do_thorns(H,src)
seed.do_sting(H,src,pick("r_hand","l_hand"))
-/obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user)
- ..()
- if(seed && seed.get_trait(TRAIT_BIOLUM))
- user.SetLuminosity(user.luminosity - seed.get_trait(TRAIT_BIOLUM))
- SetLuminosity(seed.get_trait(TRAIT_BIOLUM))
-
// Predefined types for placing on the map.
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap
diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm
index a92e237eeb4..9fd666fbb6d 100644
--- a/code/modules/hydroponics/seed.dm
+++ b/code/modules/hydroponics/seed.dm
@@ -165,9 +165,10 @@
if(!istype(splat)) // Plants handle their own stuff.
splat.name = "[thrown.name] [pick("smear","smudge","splatter")]"
if(get_trait(TRAIT_BIOLUM))
+ var/clr
if(get_trait(TRAIT_BIOLUM_COLOUR))
- splat.l_color = get_trait(TRAIT_BIOLUM_COLOUR)
- splat.SetLuminosity(get_trait(TRAIT_BIOLUM))
+ clr = get_trait(TRAIT_BIOLUM_COLOUR)
+ splat.set_light(get_trait(TRAIT_BIOLUM), l_color = clr)
if(get_trait(TRAIT_PRODUCT_COLOUR))
splat.color = get_trait(TRAIT_PRODUCT_COLOUR)
@@ -276,12 +277,11 @@
// Handle light requirements.
if(!light_supplied)
- var/area/A = get_area(current_turf)
- if(A)
- if(A.lighting_use_dynamic)
- light_supplied = max(0,min(10,current_turf.lighting_lumcount)-5)
- else
- light_supplied = 5
+ var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in current_turf
+ if(L)
+ light_supplied = max(0,min(10,L.lum_r + L.lum_g + L.lum_b)-5)
+ else
+ light_supplied = 5
if(light_supplied)
if(abs(light_supplied - get_trait(TRAIT_IDEAL_LIGHT)) > get_trait(TRAIT_LIGHT_TOLERANCE))
health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER
@@ -696,9 +696,10 @@
product.desc += " On second thought, something about this one looks strange."
if(get_trait(TRAIT_BIOLUM))
+ var/clr
if(get_trait(TRAIT_BIOLUM_COLOUR))
- product.l_color = get_trait(TRAIT_BIOLUM_COLOUR)
- product.SetLuminosity(get_trait(TRAIT_BIOLUM))
+ clr = get_trait(TRAIT_BIOLUM_COLOUR)
+ product.set_light(get_trait(TRAIT_BIOLUM), l_color = clr)
//Handle spawning in living, mobile products (like dionaea).
if(istype(product,/mob/living))
diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm
index 004baf6797b..09cf13bad2c 100644
--- a/code/modules/hydroponics/spreading/spreading.dm
+++ b/code/modules/hydroponics/spreading/spreading.dm
@@ -145,14 +145,13 @@
color = icon_colour
// Apply colour and light from seed datum.
if(seed.get_trait(TRAIT_BIOLUM))
- SetLuminosity(1+round(seed.get_trait(TRAIT_POTENCY)/20))
+ var/clr
if(seed.get_trait(TRAIT_BIOLUM_COLOUR))
- l_color = seed.get_trait(TRAIT_BIOLUM_COLOUR)
- else
- l_color = null
+ clr = seed.get_trait(TRAIT_BIOLUM_COLOUR)
+ set_light(1+round(seed.get_trait(TRAIT_POTENCY)/20), l_color = clr)
return
else
- SetLuminosity(0)
+ set_light(0)
/obj/effect/plant/proc/refresh_icon()
var/growth = min(max_growth,round(health/growth_threshold))
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index f8b7a82be4d..ea20f2c0e3e 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -350,7 +350,7 @@
usr << "There is no label to remove."
return
-/obj/machinery/portable_atmospherics/hydroponics/verb/set_light()
+/obj/machinery/portable_atmospherics/hydroponics/verb/setlight()
set name = "Set Light"
set category = "Object"
set src in view(1)
@@ -596,13 +596,12 @@
if(closed_system && mechanical)
light_string = "that the internal lights are set to [tray_light] lumens"
else
- var/area/A = T.loc
+ var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
var/light_available
- if(A)
- if(A.lighting_use_dynamic)
- light_available = max(0,min(10,T.lighting_lumcount)-5)
- else
- light_available = 5
+ if(L)
+ light_available = max(0,min(10,L.lum_r + L.lum_g + L.lum_b)-5)
+ else
+ light_available = 5
light_string = "a light level of [light_available] lumens"
usr << "The tray's sensor suite is reporting [light_string] and a temperature of [environment.temperature]K."
diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm
index 54c2380bcf9..1ad67c6d2ec 100644
--- a/code/modules/hydroponics/trays/tray_soil.dm
+++ b/code/modules/hydroponics/trays/tray_soil.dm
@@ -16,7 +16,7 @@
..()
verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid_verb
verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/remove_label
- verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/set_light
+ verbs -= /obj/machinery/portable_atmospherics/hydroponics/verb/setlight
/obj/machinery/portable_atmospherics/hydroponics/soil/CanPass()
return 1
diff --git a/code/modules/hydroponics/trays/tray_update_icons.dm b/code/modules/hydroponics/trays/tray_update_icons.dm
index 61e19632ea1..7f31a06477b 100644
--- a/code/modules/hydroponics/trays/tray_update_icons.dm
+++ b/code/modules/hydroponics/trays/tray_update_icons.dm
@@ -73,12 +73,11 @@
// Update bioluminescence.
if(seed)
if(seed.get_trait(TRAIT_BIOLUM))
- SetLuminosity(round(seed.get_trait(TRAIT_POTENCY)/10))
+ var/clr
if(seed.get_trait(TRAIT_BIOLUM_COLOUR))
- l_color = seed.get_trait(TRAIT_BIOLUM_COLOUR)
- else
- l_color = null
+ clr = seed.get_trait(TRAIT_BIOLUM_COLOUR)
+ set_light(round(seed.get_trait(TRAIT_POTENCY)/10), l_color = clr)
return
- SetLuminosity(0)
- return
\ No newline at end of file
+ set_light(0)
+ return
diff --git a/code/modules/lighting/__lighting_docs.dm b/code/modules/lighting/__lighting_docs.dm
new file mode 100644
index 00000000000..6ad0e32cdbc
--- /dev/null
+++ b/code/modules/lighting/__lighting_docs.dm
@@ -0,0 +1,67 @@
+/*
+BS12 object based lighting system
+*/
+
+/*
+Changes from tg DAL:
+ - Lighting is done using objects instead of subareas.
+ - Animated transitions. (newer tg DAL has this)
+ - Full colours with mixing.
+ - Support for lights on shuttles.
+
+ - Code:
+ - Instead of one flat luminosity var, light is represented by 3 atom vars:
+ - light_range; range in tiles of the light, used for calculating falloff,
+ - light_power; multiplier for the brightness of lights,
+ - light_color; hex string representing the RGB colour of the light.
+ - SetLuminosity() is now set_light() and takes the three variables above.
+ - Variables can be left as null to not update them.
+ - SetOpacity() is now set_opacity().
+ - Areas have luminosity set to 1 permanently, no hard-lighting.
+ - Objects inside other objects can have lights and they properly affect the turf. (flashlights)
+ - area/master and area/list/related have been eviscerated since subareas aren't needed.
+*/
+
+/*
+Relevant vars/procs:
+
+atom: (lighting_atom.dm)
+ - var/light_range; range in tiles of the light, used for calculating falloff
+ - var/light_power; multiplier for the brightness of lights
+ - var/light_color; hex string representing the RGB colour of the light
+
+ - var/datum/light_source/light; light source datum for this atom, only present if light_range && light_power
+ - var/list/light_sources; light sources in contents that are shining through this object, including this object
+
+ - proc/set_light(l_range, l_power, l_color):
+ - Sets light_range/power/color to non-null args and calls update_light()
+ - proc/set_opacity(new_opacity):
+ - Sets opacity to new_opacity.
+ - If opacity has changed, call turf.reconsider_lights() to fix light occlusion
+ - proc/update_light():
+ - Updates the light var on this atom, deleting or creating as needed and calling .update()
+
+
+turf: (lighting_turf.dm)
+ - var/list/affecting_lights; list of light sources that are shining onto this turf
+
+ - proc/reconsider_lights():
+ - Force all light sources shining onto this turf to update
+
+ - proc/lighting_clear_overlays():
+ - Delete (manual GC) all light overlays on this turf, used when changing turf to space
+ - proc/lighting_build_overlays():
+ - Create lighting overlays for this turf
+
+
+atom/movable/lighting_overlay: (lighting_overlay.dm)
+ - var/lum_r, var/lum_g, var/lum_b; lumcounts of each colour
+ - var/needs_update; set on update_lumcount, checked by lighting process
+
+ - var/xoffset, var/yoffset; (only present when using sub-tile overlays) fractional offset of this overlay in the tile
+
+ - proc/update_lumcount(delta_r, delta_g, delta_b):
+ - Change the lumcount vars and queue the overlay for update
+ - proc/update_overlay()
+ - Called by the lighting process to update the color of the overlay
+*/
diff --git a/code/modules/lighting/_lighting_defs.dm b/code/modules/lighting/_lighting_defs.dm
new file mode 100644
index 00000000000..a913c97e216
--- /dev/null
+++ b/code/modules/lighting/_lighting_defs.dm
@@ -0,0 +1,10 @@
+#define LIGHTING_INTERVAL 5 // frequency, in 1/10ths of a second, of the lighting process
+
+#define LIGHTING_FALLOFF 1 // type of falloff to use for lighting; 1 for circular, 2 for square
+#define LIGHTING_LAMBERTIAN 1 // use lambertian shading for light sources
+#define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone
+#define LIGHTING_TRANSITIONS 1 // smooth, animated transitions, similar to /tg/station
+
+#define LIGHTING_RESOLUTION 1 // resolution of the lighting overlays, powers of 2 only, max of 32
+#define LIGHTING_LAYER 10 // drawing layer for lighting overlays
+#define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects
diff --git a/code/modules/lighting/light_source.dm b/code/modules/lighting/light_source.dm
new file mode 100644
index 00000000000..63224462048
--- /dev/null
+++ b/code/modules/lighting/light_source.dm
@@ -0,0 +1,169 @@
+/datum/light_source
+ var/atom/top_atom
+ var/atom/source_atom
+
+ var/turf/source_turf
+ var/light_power
+ var/light_range
+ var/light_color // string, decomposed by parse_light_color()
+
+ var/lum_r
+ var/lum_g
+ var/lum_b
+
+ var/list/effect_r
+ var/list/effect_g
+ var/list/effect_b
+ var/list/effect_turf
+
+ var/applied
+
+ var/needs_update
+ var/destroyed
+ var/force_update
+
+/datum/light_source/New(atom/owner, atom/top)
+ source_atom = owner
+ if(!source_atom.light_sources) source_atom.light_sources = list()
+ source_atom.light_sources += src
+ top_atom = top
+ if(top_atom != source_atom)
+ if(!top.light_sources) top.light_sources = list()
+ top_atom.light_sources += src
+
+ source_turf = top_atom
+ light_power = source_atom.light_power
+ light_range = source_atom.light_range
+ light_color = source_atom.light_color
+
+ parse_light_color()
+
+ effect_r = list()
+ effect_g = list()
+ effect_b = list()
+ effect_turf = list()
+
+ update()
+
+ return ..()
+
+/datum/light_source/proc/destroy()
+ destroyed = 1
+ force_update()
+ if(source_atom) source_atom.light_sources -= src
+ if(top_atom) top_atom.light_sources -= src
+
+/datum/light_source/proc/update(atom/new_top_atom)
+ if(new_top_atom && new_top_atom != top_atom)
+ if(top_atom != source_atom) top_atom.light_sources -= src
+ top_atom = new_top_atom
+ if(top_atom != source_atom)
+ if(!top_atom.light_sources) top_atom.light_sources = list()
+ top_atom.light_sources += src
+ lighting_update_lights += src
+ needs_update = 1
+
+/datum/light_source/proc/force_update()
+ needs_update = 1
+ force_update = 1
+ lighting_update_lights += src
+
+/datum/light_source/proc/check()
+ if(!source_atom)
+ destroy()
+ return 1
+
+ if(!top_atom)
+ top_atom = source_atom
+ . = 1
+
+ if(istype(top_atom, /turf))
+ if(source_turf != top_atom)
+ source_turf = top_atom
+ . = 1
+ else if(top_atom.loc != source_turf)
+ source_turf = top_atom.loc
+ . = 1
+
+ if(source_atom.light_power != light_power)
+ light_power = source_atom.light_power
+ . = 1
+
+ if(source_atom.light_range != light_range)
+ light_range = source_atom.light_range
+ . = 1
+
+ if(source_atom.light_color != light_color)
+ light_color = source_atom.light_color
+ parse_light_color()
+ . = 1
+
+ if(light_range && light_power && !applied)
+ . = 1
+
+/datum/light_source/proc/parse_light_color()
+ if(light_color)
+ lum_r = GetRedPart(light_color) / 255
+ lum_g = GetGreenPart(light_color) / 255
+ lum_b = GetBluePart(light_color) / 255
+ else
+ lum_r = 1
+ lum_g = 1
+ lum_b = 1
+
+/datum/light_source/proc/falloff(atom/movable/lighting_overlay/O)
+ #if LIGHTING_FALLOFF == 1 // circular
+ #if LIGHTING_RESOLUTION == 1
+ . = (O.x - source_turf.x)**2 + (O.y - source_turf.y)**2 + LIGHTING_HEIGHT
+ #else
+ . = (O.x - source_turf.x + O.xoffset)**2 + (O.y - source_turf.y + O.yoffset)**2 + LIGHTING_HEIGHT
+ #endif
+
+ #if LIGHTING_LAMBERTIAN == 1
+ . = CLAMP01((1 - CLAMP01(sqrt(.) / light_range)) * (1 / (sqrt(. + 1))))
+ #else
+ . = 1 - CLAMP01(sqrt(.) / light_range)
+ #endif
+
+ #elif LIGHTING_FALLOFF == 2 // square
+ #if LIGHTING_RESOLUTION == 1
+ . = abs(O.x - source_turf.x) + abs(O.y - source_turf.y) + LIGHTING_HEIGHT
+ #else
+ . = abs(O.x - source_turf.x + O.xoffset) + abs(O.y - source_turf.y + O.yoffset) + LIGHTING_HEIGHT
+ #endif
+
+ #if LIGHTING_LAMBERTIAN == 1
+ . = CLAMP01((1 - CLAMP01(. / light_range)) * (1 / (sqrt(.)**2 + )))
+ #else
+ . = 1 - CLAMP01(. / light_range)
+ #endif
+ #endif
+
+/datum/light_source/proc/apply_lum()
+ applied = 1
+ if(istype(source_turf))
+ for(var/atom/movable/lighting_overlay/O in view(light_range, source_turf))
+ var/strength = light_power * falloff(O)
+
+ effect_r[O] = lum_r * strength
+ effect_g[O] = lum_g * strength
+ effect_b[O] = lum_b * strength
+
+ O.update_lumcount(lum_r * strength, lum_g * strength, lum_b * strength)
+ for(var/turf/T in view(light_range, source_turf))
+ if(!T.affecting_lights) T.affecting_lights = list()
+ T.affecting_lights += src
+ effect_turf += T
+
+/datum/light_source/proc/remove_lum()
+ applied = 0
+ for(var/atom/movable/lighting_overlay/O in effect_r)
+ O.update_lumcount(-effect_r[O], -effect_g[O], -effect_b[O])
+
+ for(var/turf/T in effect_turf)
+ if(T.affecting_lights) T.affecting_lights -= src
+
+ effect_r.Cut()
+ effect_g.Cut()
+ effect_b.Cut()
+ effect_turf.Cut()
diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm
new file mode 100644
index 00000000000..92500ecc1d9
--- /dev/null
+++ b/code/modules/lighting/lighting_atom.dm
@@ -0,0 +1,81 @@
+/atom
+ var/light_power = 1 // intensity of the light
+ var/light_range = 0 // range in tiles of the light
+ var/light_color // RGB string representing the colour of the light
+
+ var/datum/light_source/light
+ var/list/light_sources
+
+/atom/proc/set_light(l_range, l_power, l_color)
+ if(l_power != null) light_power = l_power
+ if(l_range != null) light_range = l_range
+ if(l_color != null) light_color = l_color
+
+ update_light()
+
+/atom/proc/update_light()
+ if(!light_power || !light_range)
+ if(light)
+ light.destroy()
+ light = null
+ else
+ if(!istype(loc, /atom/movable))
+ . = src
+ else
+ . = loc
+
+ if(light)
+ light.update(.)
+ else
+ light = new /datum/light_source(src, .)
+
+/atom/New()
+ . = ..()
+ if(light_power && light_range)
+ update_light()
+
+/atom/Destroy()
+ if(light)
+ light.destroy()
+ light = null
+ return ..()
+
+/atom/movable/Destroy()
+ var/turf/T = loc
+ if(opacity && istype(T))
+ T.reconsider_lights()
+ return ..()
+
+/atom/movable/Move()
+ var/turf/old_loc = loc
+ . = ..()
+
+ if(loc != old_loc)
+ for(var/datum/light_source/L in light_sources)
+ L.source_atom.update_light()
+
+ var/turf/new_loc = loc
+ if(istype(old_loc) && opacity)
+ old_loc.reconsider_lights()
+
+ if(istype(new_loc) && opacity)
+ new_loc.reconsider_lights()
+
+/atom/proc/set_opacity(new_opacity)
+ var/old_opacity = opacity
+ opacity = new_opacity
+ var/turf/T = loc
+ if(old_opacity != new_opacity && istype(T))
+ T.reconsider_lights()
+
+/obj/item/equipped()
+ . = ..()
+ update_light()
+
+/obj/item/pickup()
+ . = ..()
+ update_light()
+
+/obj/item/dropped()
+ . = ..()
+ update_light()
diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm
new file mode 100644
index 00000000000..b75d8aec7f6
--- /dev/null
+++ b/code/modules/lighting/lighting_overlay.dm
@@ -0,0 +1,48 @@
+/atom/movable/lighting_overlay
+ name = ""
+ mouse_opacity = 0
+ simulated = 0
+ anchored = 1
+
+ icon = LIGHTING_ICON
+ layer = LIGHTING_LAYER
+ invisibility = INVISIBILITY_LIGHTING
+ blend_mode = BLEND_MULTIPLY
+ color = "#000000"
+
+ var/lum_r
+ var/lum_g
+ var/lum_b
+
+ #if LIGHTING_RESOLUTION != 1
+ var/xoffset
+ var/yoffset
+ #endif
+
+ var/needs_update
+
+/atom/movable/lighting_overlay/New()
+ . = ..()
+ verbs.Cut()
+
+/atom/movable/lighting_overlay/proc/update_lumcount(delta_r, delta_g, delta_b)
+ lum_r += delta_r
+ lum_g += delta_g
+ lum_b += delta_b
+
+ needs_update = 1
+ lighting_update_overlays += src
+
+/atom/movable/lighting_overlay/proc/update_overlay()
+ var/mx = max(lum_r, lum_g, lum_b)
+ . = 1 // factor
+ if(mx > 1)
+ . = 1/mx
+ #if LIGHTING_TRANSITIONS == 1
+ animate(src,
+ color = rgb(lum_r * 255 * ., lum_g * 255 * ., lum_b * 255 * .),
+ LIGHTING_INTERVAL - 1
+ )
+ #else
+ color = rgb(lum_r * 255 * ., lum_g * 255 * ., lum_b * 255 * .)
+ #endif
diff --git a/code/modules/lighting/lighting_process.dm b/code/modules/lighting/lighting_process.dm
new file mode 100644
index 00000000000..e2e422bd60e
--- /dev/null
+++ b/code/modules/lighting/lighting_process.dm
@@ -0,0 +1,29 @@
+/datum/controller/process/lighting/setup()
+ name = "lighting"
+ schedule_interval = LIGHTING_INTERVAL
+
+ create_lighting_overlays()
+
+/datum/controller/process/lighting/doWork()
+ for(var/datum/light_source/L in lighting_update_lights)
+ if(L.needs_update)
+ if(L.destroyed)
+ L.remove_lum()
+ else if(L.check() || L.force_update)
+ L.remove_lum()
+ L.apply_lum()
+ L.force_update = 0
+ L.needs_update = 0
+
+ scheck()
+
+ lighting_update_lights.Cut()
+
+ for(var/atom/movable/lighting_overlay/O in lighting_update_overlays)
+ if(O.needs_update)
+ O.update_overlay()
+ O.needs_update = 0
+
+ scheck()
+
+ lighting_update_overlays.Cut()
diff --git a/code/modules/lighting/lighting_system.dm b/code/modules/lighting/lighting_system.dm
new file mode 100644
index 00000000000..6177c81f8ff
--- /dev/null
+++ b/code/modules/lighting/lighting_system.dm
@@ -0,0 +1,47 @@
+/var/list/lighting_update_lights = list()
+/var/list/lighting_update_overlays = list()
+
+/area/var/lighting_use_dynamic = 1
+
+// duplicates lots of code, but this proc needs to be as fast as possible.
+/proc/create_lighting_overlays(zlevel = 0)
+ var/state = "light[LIGHTING_RESOLUTION]"
+ var/area/A
+ if(zlevel == 0) // populate all zlevels
+ for(var/turf/T in world)
+ if(T.dynamic_lighting)
+ A = T.loc
+ if(A.lighting_use_dynamic)
+ #if LIGHTING_RESOLUTION == 1
+ var/atom/movable/lighting_overlay/O = new(T)
+ O.icon_state = state
+ #else
+ for(var/i = 0; i < LIGHTING_RESOLUTION; i++)
+ for(var/j = 0; j < LIGHTING_RESOLUTION; j++)
+ var/atom/movable/lighting_overlay/O = new(T)
+ O.pixel_x = i * (32 / LIGHTING_RESOLUTION)
+ O.pixel_y = j * (32 / LIGHTING_RESOLUTION)
+ O.xoffset = (((2*i + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5)
+ O.yoffset = (((2*j + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5)
+ O.icon_state = state
+ #endif
+ else
+ for(var/x = 1; x <= world.maxx; x++)
+ for(var/y = 1; y <= world.maxy; y++)
+ var/turf/T = locate(x, y, zlevel)
+ if(T.dynamic_lighting)
+ A = T.loc
+ if(A.lighting_use_dynamic)
+ #if LIGHTING_RESOLUTION == 1
+ var/atom/movable/lighting_overlay/O = new(T)
+ O.icon_state = state
+ #else
+ for(var/i = 0; i < LIGHTING_RESOLUTION; i++)
+ for(var/j = 0; j < LIGHTING_RESOLUTION; j++)
+ var/atom/movable/lighting_overlay/O = new(T)
+ O.pixel_x = i * (32 / LIGHTING_RESOLUTION)
+ O.pixel_y = j * (32 / LIGHTING_RESOLUTION)
+ O.xoffset = (((2*i + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5)
+ O.yoffset = (((2*j + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5)
+ O.icon_state = state
+ #endif
diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm
new file mode 100644
index 00000000000..266e4b1d791
--- /dev/null
+++ b/code/modules/lighting/lighting_turf.dm
@@ -0,0 +1,29 @@
+/turf
+ var/list/affecting_lights
+
+/turf/proc/reconsider_lights()
+ for(var/datum/light_source/L in affecting_lights)
+ L.force_update()
+
+/turf/proc/lighting_clear_overlays()
+ for(var/atom/movable/lighting_overlay/L in src)
+ L.loc = null
+
+/turf/proc/lighting_build_overlays()
+ if(!locate(/atom/movable/lighting_overlay) in src)
+ var/state = "light[LIGHTING_RESOLUTION]"
+ var/area/A = loc
+ if(A.lighting_use_dynamic)
+ #if LIGHTING_RESOLUTION == 1
+ var/atom/movable/lighting_overlay/O = new(src)
+ O.icon_state = state
+ #else
+ for(var/i = 0; i < LIGHTING_RESOLUTION; i++)
+ for(var/j = 0; j < LIGHTING_RESOLUTION; j++)
+ var/atom/movable/lighting_overlay/O = new(src)
+ O.pixel_x = i * (32 / LIGHTING_RESOLUTION)
+ O.pixel_y = j * (32 / LIGHTING_RESOLUTION)
+ O.xoffset = (((2*i + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5)
+ O.yoffset = (((2*j + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5)
+ O.icon_state = state
+ #endif
diff --git a/code/modules/lighting/~lighting_undefs.dm b/code/modules/lighting/~lighting_undefs.dm
new file mode 100644
index 00000000000..9308cc6b65a
--- /dev/null
+++ b/code/modules/lighting/~lighting_undefs.dm
@@ -0,0 +1,10 @@
+#undef LIGHTING_INTERVAL
+
+#undef LIGHTING_FALLOFF
+#undef LIGHTING_LAMBERTIAN
+#undef LIGHTING_HEIGHT
+#undef LIGHTING_TRANSITIONS
+
+#undef LIGHTING_RESOLUTION
+#undef LIGHTING_LAYER
+#undef LIGHTING_ICON
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index bdb70368d2e..234f1f9eccd 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -104,7 +104,7 @@
icon_state = "furnace"
density = 1
anchored = 1
- luminosity = 3
+ light_range = 3
var/obj/machinery/mineral/input = null
var/obj/machinery/mineral/output = null
var/obj/machinery/mineral/console = null
@@ -231,4 +231,4 @@
else
continue
- console.updateUsrDialog()
\ No newline at end of file
+ console.updateUsrDialog()
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index f616d57ac44..d88067108c2 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -5,7 +5,7 @@
name = "Light-emtter"
anchored = 1
unacidable = 1
- luminosity = 8
+ light_range = 8
/**********************Miner Lockers**************************/
diff --git a/code/modules/mob/freelook/ai/update_triggers.dm b/code/modules/mob/freelook/ai/update_triggers.dm
index 327b39fbf27..8a91d0540e6 100644
--- a/code/modules/mob/freelook/ai/update_triggers.dm
+++ b/code/modules/mob/freelook/ai/update_triggers.dm
@@ -28,7 +28,7 @@
if(src.can_use())
cameranet.addCamera(src)
else
- src.SetLuminosity(0)
+ src.set_light(0)
cameranet.removeCamera(src)
/obj/machinery/camera/New()
diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm
index b9f8c9b4dfd..36110c600cb 100644
--- a/code/modules/mob/living/bot/bot.dm
+++ b/code/modules/mob/living/bot/bot.dm
@@ -110,14 +110,14 @@
if(stat)
return 0
on = 1
- SetLuminosity(light_strength)
+ set_light(light_strength)
update_icons()
return 1
/mob/living/bot/proc/turn_off()
on = 0
- SetLuminosity(0)
+ set_light(0)
update_icons()
/mob/living/bot/proc/explode()
- qdel(src)
\ No newline at end of file
+ qdel(src)
diff --git a/code/modules/mob/living/carbon/alien/diona/life.dm b/code/modules/mob/living/carbon/alien/diona/life.dm
index 5a82e3f373c..ec0dd5d7e17 100644
--- a/code/modules/mob/living/carbon/alien/diona/life.dm
+++ b/code/modules/mob/living/carbon/alien/diona/life.dm
@@ -4,10 +4,12 @@
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
if(isturf(loc)) //else, there's considered to be no light
var/turf/T = loc
- var/area/A = T.loc
- if(A)
- if(A.lighting_use_dynamic) light_amount = min(10,T.lighting_lumcount) - 5 //hardcapped so it's not abused by having a ton of flashlights
- else light_amount = 5
+ var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
+ if(L)
+ light_amount = min(10,L.lum_r + L.lum_g + L.lum_b) - 5 //hardcapped so it's not abused by having a ton of flashlights
+ else
+ light_amount = 5
+
nutrition += light_amount
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index c16a03d5ca8..4bbb81612ce 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -877,10 +877,11 @@
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
if(isturf(loc)) //else, there's considered to be no light
var/turf/T = loc
- var/area/A = T.loc
- if(A)
- if(A.lighting_use_dynamic) light_amount = min(10,T.lighting_lumcount) - 5 //hardcapped so it's not abused by having a ton of flashlights
- else light_amount = 5
+ var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
+ if(L)
+ light_amount = min(10,L.lum_r + L.lum_g + L.lum_b) - 5 //hardcapped so it's not abused by having a ton of flashlights
+ else
+ light_amount = 5
nutrition += light_amount
traumatic_shock -= light_amount
@@ -898,10 +899,11 @@
var/light_amount = 0
if(isturf(loc))
var/turf/T = loc
- var/area/A = T.loc
- if(A)
- if(A.lighting_use_dynamic) light_amount = T.lighting_lumcount
- else light_amount = 10
+ var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
+ if(L)
+ light_amount = L.lum_r + L.lum_g + L.lum_b //hardcapped so it's not abused by having a ton of flashlights
+ else
+ light_amount = 10
if(light_amount > species.light_dam) //if there's enough light, start dying
take_overall_damage(1,1)
else //heal in the dark
@@ -1418,8 +1420,9 @@
//0.1% chance of playing a scary sound to someone who's in complete darkness
if(isturf(loc) && rand(1,1000) == 1)
- var/turf/currentTurf = loc
- if(!currentTurf.lighting_lumcount)
+ var/turf/T = loc
+ var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
+ if(L && L.lum_r + L.lum_g + L.lum_b == 0)
playsound_local(src,pick(scarySounds),50, 1, -1)
proc/handle_stomach()
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 1518e72ff47..4a41479e340 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -139,7 +139,7 @@
var/obj/item/I = O
mass = I.w_class/THROWNOBJ_KNOCKBACK_DIVISOR
var/momentum = speed*mass
-
+
if(O.throw_source && momentum >= THROWNOBJ_KNOCKBACK_SPEED)
var/dir = get_dir(O.throw_source, src)
@@ -200,14 +200,14 @@
/mob/living/proc/IgniteMob()
if(fire_stacks > 0 && !on_fire)
on_fire = 1
- src.AddLuminosity(3)
+ set_light(light_range + 3)
update_fire()
/mob/living/proc/ExtinguishMob()
if(on_fire)
on_fire = 0
fire_stacks = 0
- src.AddLuminosity(-3)
+ set_light(max(0, light_range - 3))
update_fire()
/mob/living/proc/update_fire()
@@ -219,18 +219,18 @@
/mob/living/proc/handle_fire()
if(fire_stacks < 0)
fire_stacks = max(0, fire_stacks++) //If we've doused ourselves in water to avoid fire, dry off slowly
-
+
if(!on_fire)
return 1
else if(fire_stacks <= 0)
ExtinguishMob() //Fire's been put out.
return 1
-
+
var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment
if(G.gas["oxygen"] < 1)
ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire
return 1
-
+
var/turf/location = get_turf(src)
location.hotspot_expose(fire_burn_temperature(), 50, 1)
@@ -242,6 +242,6 @@
/mob/living/proc/fire_burn_temperature()
if (fire_stacks <= 0)
return 0
-
+
//Scale quadratically so that single digit numbers of fire stacks don't burn ridiculously hot.
return round(FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE*(fire_stacks/FIRE_MAX_FIRESUIT_STACKS)**2)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index fe6f301dd38..f40036ae6be 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -468,13 +468,13 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/reset_view(atom/A)
if(camera)
- camera.SetLuminosity(0)
+ camera.set_light(0)
if(istype(A,/obj/machinery/camera))
camera = A
..()
if(istype(A,/obj/machinery/camera))
- if(camera_light_on) A.SetLuminosity(AI_CAMERA_LUMINOSITY)
- else A.SetLuminosity(0)
+ if(camera_light_on) A.set_light(AI_CAMERA_LUMINOSITY)
+ else A.set_light(0)
/mob/living/silicon/ai/proc/switchCamera(var/obj/machinery/camera/C)
@@ -612,7 +612,7 @@ var/list/ai_verbs_default = list(
src << "Camera lights [camera_light_on ? "activated" : "deactivated"]."
if(!camera_light_on)
if(camera)
- camera.SetLuminosity(0)
+ camera.set_light(0)
camera = null
else
lightNearbyCamera()
@@ -627,20 +627,20 @@ var/list/ai_verbs_default = list(
if(src.camera)
var/obj/machinery/camera/camera = near_range_camera(src.eyeobj)
if(camera && src.camera != camera)
- src.camera.SetLuminosity(0)
+ src.camera.set_light(0)
if(!camera.light_disabled)
src.camera = camera
- src.camera.SetLuminosity(AI_CAMERA_LUMINOSITY)
+ src.camera.set_light(AI_CAMERA_LUMINOSITY)
else
src.camera = null
else if(isnull(camera))
- src.camera.SetLuminosity(0)
+ src.camera.set_light(0)
src.camera = null
else
var/obj/machinery/camera/camera = near_range_camera(src.eyeobj)
if(camera && !camera.light_disabled)
src.camera = camera
- src.camera.SetLuminosity(AI_CAMERA_LUMINOSITY)
+ src.camera.set_light(AI_CAMERA_LUMINOSITY)
camera_light_on = world.timeofday + 1 * 20 // Update the light every 2 seconds.
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index e25bb9ff10a..615f1d3a41a 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -58,7 +58,7 @@
src.has_power = 0
if(lights_on) // Light is on but there is no power!
lights_on = 0
- SetLuminosity(0)
+ set_light(0)
/mob/living/silicon/robot/proc/handle_regular_status_updates()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 8cc67772b57..8a19607edc7 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -367,9 +367,9 @@
lights_on = !lights_on
usr << "You [lights_on ? "enable" : "disable"] your integrated light."
if(lights_on)
- SetLuminosity(integrated_light_power) // 1.5x luminosity of flashlight
+ set_light(integrated_light_power) // 1.5x luminosity of flashlight
else
- SetLuminosity(0)
+ set_light(0)
/mob/living/silicon/robot/verb/self_diagnosis_verb()
set category = "Robot Commands"
diff --git a/code/modules/mob/living/simple_animal/constructs/constructs.dm b/code/modules/mob/living/simple_animal/constructs/constructs.dm
index 1ae5bba479f..56746a51d58 100644
--- a/code/modules/mob/living/simple_animal/constructs/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs/constructs.dm
@@ -240,7 +240,7 @@
////////////////Glow//////////////////
/mob/living/simple_animal/construct/proc/add_glow()
overlays = 0
- var/overlay_layer = LIGHTING_LAYER+1
+ var/overlay_layer = 11
if(layer != MOB_LAYER)
overlay_layer=TURF_LAYER+0.2
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index a1284503e12..a68280a4302 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -94,7 +94,7 @@
emote_hear = list("clicks")
emote_see = list("clacks")
desc = "Free crabs!"
- src.sd_SetLuminosity(0)
+ src.sd_set_light(0)
inventory_head.loc = src.loc
inventory_head = null
else
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 755c66b6cb2..97b78668bff 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -199,7 +199,9 @@
power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list
var/on = 0 // 1 if on, 0 if off
var/on_gs = 0
- var/brightness = 8 // luminosity when on, also used in power calculation
+ var/brightness_range = 8 // luminosity when on, also used in power calculation
+ var/brightness_power = 3
+ var/brightness_color = null
var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN
var/flickering = 0
var/light_type = /obj/item/weapon/light/tube // the type of light item
@@ -215,7 +217,9 @@
icon_state = "bulb1"
base_state = "bulb"
fitting = "bulb"
- brightness = 4
+ brightness_range = 4
+ brightness_power = 2
+ brightness_color = "#a0a080"
desc = "A small lighting fixture."
light_type = /obj/item/weapon/light/bulb
@@ -224,7 +228,8 @@
name = "spotlight"
fitting = "large tube"
light_type = /obj/item/weapon/light/tube/large
- brightness = 12
+ brightness_range = 12
+ brightness_power = 4
/obj/machinery/light/built/New()
status = LIGHT_EMPTY
@@ -247,11 +252,14 @@
switch(fitting)
if("tube")
- brightness = 8
+ brightness_range = 8
+ brightness_power = 3
if(prob(2))
broken(1)
if("bulb")
- brightness = 4
+ brightness_range = 4
+ brightness_power = 2
+ brightness_color = "#a0a080"
if(prob(5))
broken(1)
spawn(1)
@@ -285,7 +293,7 @@
update_icon()
if(on)
- if(luminosity != brightness)
+ if(light_range != brightness_range || light_power != brightness_power || light_color != brightness_color)
switchcount++
if(rigged)
if(status == LIGHT_OK && trigger)
@@ -299,15 +307,15 @@
status = LIGHT_BURNED
icon_state = "[base_state]-burned"
on = 0
- SetLuminosity(0)
+ set_light(0)
else
use_power = 2
- SetLuminosity(brightness)
+ set_light(brightness_range, brightness_power, brightness_color)
else
use_power = 1
- SetLuminosity(0)
+ set_light(0)
- active_power_usage = (luminosity * 10)
+ active_power_usage = ((light_range + light_power) * 10)
if(on != on_gs)
on_gs = on
@@ -368,8 +376,9 @@
user << "You insert the [L.name]."
switchcount = L.switchcount
rigged = L.rigged
- brightness = L.brightness
- l_color = L.color
+ brightness_range = L.brightness_range
+ brightness_power = L.brightness_power
+ brightness_color = L.brightness_color
on = has_power()
update()
@@ -515,8 +524,9 @@
var/obj/item/weapon/light/L = new light_type()
L.status = status
L.rigged = rigged
- L.brightness = src.brightness
- L.color = l_color
+ L.brightness_range = brightness_range
+ L.brightness_power = brightness_power
+ L.brightness_color = brightness_color
// light item inherits the switchcount, then zero it
L.switchcount = switchcount
@@ -541,8 +551,9 @@
var/obj/item/weapon/light/L = new light_type()
L.status = status
L.rigged = rigged
- L.brightness = brightness
- L.color = l_color
+ L.brightness_range = brightness_range
+ L.brightness_power = brightness_power
+ L.brightness_color = brightness_color
// light item inherits the switchcount, then zero it
L.switchcount = switchcount
@@ -575,7 +586,6 @@
if(status == LIGHT_OK)
return
status = LIGHT_OK
- brightness = initial(brightness)
on = 1
update()
@@ -610,7 +620,7 @@
/obj/machinery/light/process()
if(on)
- use_power(luminosity * LIGHTING_POWER_FACTOR, LIGHT)
+ use_power(light_range * LIGHTING_POWER_FACTOR, LIGHT)
// called when area power state changes
@@ -650,7 +660,9 @@
var/switchcount = 0 // number of times switched
matter = list("metal" = 60)
var/rigged = 0 // true if rigged to explode
- var/brightness = 2 //how much light it gives off
+ var/brightness_range = 2 //how much light it gives off
+ var/brightness_power = 1
+ var/brightness_color = null
/obj/item/weapon/light/tube
name = "light tube"
@@ -659,12 +671,14 @@
base_state = "ltube"
item_state = "c_tube"
matter = list("glass" = 100)
- brightness = 8
+ brightness_range = 8
+ brightness_power = 3
/obj/item/weapon/light/tube/large
w_class = 2
name = "large light tube"
- brightness = 15
+ brightness_range = 15
+ brightness_power = 4
/obj/item/weapon/light/bulb
name = "light bulb"
@@ -673,7 +687,9 @@
base_state = "lbulb"
item_state = "contvapour"
matter = list("glass" = 100)
- brightness = 5
+ brightness_range = 5
+ brightness_power = 2
+ brightness_color = "#a0a080"
/obj/item/weapon/light/throw_impact(atom/hit_atom)
..()
@@ -686,7 +702,8 @@
base_state = "fbulb"
item_state = "egg4"
matter = list("glass" = 100)
- brightness = 5
+ brightness_range = 5
+ brightness_power = 2
// update the icon state and description of the light
@@ -707,9 +724,9 @@
..()
switch(name)
if("light tube")
- brightness = rand(6,9)
+ brightness_range = rand(6,9)
if("light bulb")
- brightness = rand(4,6)
+ brightness_range = rand(4,6)
update()
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 24758fc27e3..8b512644606 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -9,7 +9,7 @@
density = 0
unacidable = 1
use_power = 0
- luminosity = 4
+ light_range = 4
var/obj/machinery/field_generator/FG1 = null
var/obj/machinery/field_generator/FG2 = null
var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second.
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index 50093c440b5..094915047b9 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -31,8 +31,8 @@ var/global/list/narsie_list = list()
// Pixel stuff centers Narsie.
pixel_x = -236
pixel_y = -256
- luminosity = 1
- l_color = "#3e0000"
+ light_range = 1
+ light_color = "#3e0000"
current_size = 12
consume_range = 12 // How many tiles out do we eat.
@@ -144,7 +144,7 @@ var/global/list/narsie_list = list()
if(T.icon_state != "cult-narsie")
T.desc = "something that goes beyond your understanding went this way"
T.icon_state = "cult-narsie"
- T.luminosity = 1
+ T.set_light(1)
/obj/singularity/narsie/proc/narsiewall(var/turf/T)
T.desc = "An opening has been made on that wall, but who can say if what you seek truly lies on the other side?"
@@ -152,7 +152,7 @@ var/global/list/narsie_list = list()
T.icon_state = "cult-narsie"
T.opacity = 0
T.density = 0
- luminosity = 1
+ set_light(1)
/obj/singularity/narsie/large/consume(const/atom/A) //Has its own consume proc because it doesn't need energy and I don't want BoHs to explode it. --NEO
//NEW BEHAVIOUR
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index e04268e0a94..55b4fad1a47 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -8,7 +8,7 @@
anchored = 1
density = 1
layer = 6
- luminosity = 6
+ light_range = 6
unacidable = 1 //Don't comment this out.
var/current_size = 1
diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm
index d20e2743fdf..7ca422bed4e 100644
--- a/code/modules/shieldgen/sheldwallgen.dm
+++ b/code/modules/shieldgen/sheldwallgen.dm
@@ -228,7 +228,7 @@
anchored = 1
density = 1
unacidable = 1
- luminosity = 3
+ light_range = 3
var/needs_power = 0
var/active = 1
// var/power = 10
diff --git a/code/modules/spells/aoe_turf/conjure/construct.dm b/code/modules/spells/aoe_turf/conjure/construct.dm
index d5a2de92e2f..e33d1f2b3cb 100644
--- a/code/modules/spells/aoe_turf/conjure/construct.dm
+++ b/code/modules/spells/aoe_turf/conjure/construct.dm
@@ -130,8 +130,8 @@
name = "Juggerwall"
icon = 'icons/effects/effects.dmi'
icon_state = "m_shield_cult"
- l_color = "#B40000"
- luminosity = 2
+ light_color = "#B40000"
+ light_range = 2
/obj/effect/forcefield/cult/cultify()
return
diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm
index e9a23bb23b0..bf5d6957a6a 100644
--- a/code/modules/supermatter/supermatter.dm
+++ b/code/modules/supermatter/supermatter.dm
@@ -37,7 +37,7 @@
icon_state = "darkmatter"
density = 1
anchored = 0
- luminosity = 4
+ light_range = 4
var/gasefficency = 0.25
@@ -54,7 +54,7 @@
var/emergency_alert = "CRYSTAL DELAMINATION IMMINENT."
var/explosion_point = 1000
- l_color = "#8A8A00"
+ light_color = "#8A8A00"
var/warning_color = "#B8B800"
var/emergency_color = "#D9D900"
@@ -117,10 +117,8 @@
//Changes color and luminosity of the light to these values if they were not already set
/obj/machinery/power/supermatter/proc/shift_light(var/lum, var/clr)
- if(l_color != clr)
- l_color = clr
- if(luminosity != lum)
- SetLuminosity(lum)
+ if(lum != light_range || clr != light_color)
+ set_light(lum, l_color = clr)
/obj/machinery/power/supermatter/proc/announce_warning()
var/integrity = damage / explosion_point
@@ -174,7 +172,7 @@
if(!istype(L, /turf/space) && (world.timeofday - lastwarning) >= WARNING_DELAY * 10)
announce_warning()
else
- shift_light(4,initial(l_color))
+ shift_light(4,initial(light_color))
if(grav_pulling)
supermatter_pull()
diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm
index e733ad8df44..9407dc937a0 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -11,7 +11,7 @@
density = 1
anchored = 1
animate_movement=1
- luminosity = 3
+ light_range = 3
can_buckle = 1
buckle_movable = 1
@@ -181,13 +181,13 @@
if(powered && cell.charge < charge_use)
return 0
on = 1
- luminosity = initial(luminosity)
+ set_light(initial(light_range))
update_icon()
return 1
/obj/vehicle/proc/turn_off()
on = 0
- luminosity = 0
+ set_light(0)
update_icon()
/obj/vehicle/proc/Emag(mob/user as mob)
@@ -367,4 +367,4 @@
if(prob(10))
new /obj/effect/decal/cleanable/blood/oil(src.loc)
spawn(1) healthcheck()
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/setup.dm b/code/setup.dm
index 68c2b94c754..654d9c8b703 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -954,3 +954,5 @@ var/list/be_special_flags = list(
#define LANGUAGE_ROOTSPEAK "Rootspeak"
#define LANGUAGE_TRADEBAND "Tradeband"
#define LANGUAGE_GUTTER "Gutter"
+
+#define CLAMP01(x) max(0, min(1, x))
diff --git a/icons/effects/lighting_overlay.dmi b/icons/effects/lighting_overlay.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..1ff16d2b78b6a89fd525856cfee87830095ec9c0
GIT binary patch
literal 260
zcmeAS@N?(olHy`uVBq!ia0vp^2|($P6U!|9apHq}T#{LR=3VIPm}ff9=fnEkF^*
zk|4ie28U-i(tw1VBG)!
literal 0
HcmV?d00001
From e6d43c7690491d8377ba19e6bcf4772ab4d8f8c0 Mon Sep 17 00:00:00 2001
From: Mloc
Date: Sun, 10 May 2015 13:49:57 +0100
Subject: [PATCH 7/9] changelog for lighting rewrite
Signed-off-by: Mloc
---
html/changelogs/Mloc-lightwrite.yml | 6 ++++++
1 file changed, 6 insertions(+)
create mode 100644 html/changelogs/Mloc-lightwrite.yml
diff --git a/html/changelogs/Mloc-lightwrite.yml b/html/changelogs/Mloc-lightwrite.yml
new file mode 100644
index 00000000000..8ad9f27fe41
--- /dev/null
+++ b/html/changelogs/Mloc-lightwrite.yml
@@ -0,0 +1,6 @@
+author: Mloc
+delete-after: True
+changes:
+ - experiment: "Rewritten lighting system."
+ - rscadd: "Better coloured lights."
+ - rscadd: "Animated transitions."
From 7780287d3a99af1cf7951a0ee5bda6f5dcb30311 Mon Sep 17 00:00:00 2001
From: Mloc
Date: Sun, 10 May 2015 19:15:14 +0100
Subject: [PATCH 8/9] mood lighting for computers
Signed-off-by: Mloc
---
code/game/machinery/atmoalter/area_atmos_computer.dm | 1 +
code/game/machinery/computer/Operating.dm | 1 +
code/game/machinery/computer/RCON_Console.dm | 1 +
code/game/machinery/computer/aifixer.dm | 1 +
code/game/machinery/computer/atmos_alert.dm | 1 +
code/game/machinery/computer/atmos_control.dm | 1 +
code/game/machinery/computer/camera.dm | 1 +
code/game/machinery/computer/card.dm | 1 +
code/game/machinery/computer/cloning.dm | 1 +
code/game/machinery/computer/communications.dm | 1 +
code/game/machinery/computer/computer.dm | 7 +++++++
code/game/machinery/computer/crew.dm | 1 +
code/game/machinery/computer/guestpass.dm | 3 ++-
code/game/machinery/computer/medical.dm | 1 +
code/game/machinery/computer/message.dm | 1 +
code/game/machinery/computer/pod.dm | 1 +
code/game/machinery/computer/prisoner.dm | 1 +
code/game/machinery/computer/prisonshuttle.dm | 3 ++-
code/game/machinery/computer/robot.dm | 1 +
code/game/machinery/computer/security.dm | 1 +
code/game/machinery/computer/shuttle.dm | 1 +
code/game/machinery/computer/skills.dm | 3 ++-
code/game/machinery/computer/specops_shuttle.dm | 1 +
code/game/machinery/computer/station_alert.dm | 1 +
code/game/machinery/computer/supply.dm | 1 +
code/game/machinery/computer/syndicate_specops_shuttle.dm | 3 ++-
code/game/mecha/mech_bay.dm | 3 ++-
code/game/mecha/mecha_control_console.dm | 1 +
code/modules/power/sensors/sensor_monitoring.dm | 1 +
code/modules/research/rdconsole.dm | 1 +
code/modules/research/server.dm | 3 ++-
31 files changed, 43 insertions(+), 6 deletions(-)
diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm
index e4efe662ae8..984dc44782d 100644
--- a/code/game/machinery/atmoalter/area_atmos_computer.dm
+++ b/code/game/machinery/atmoalter/area_atmos_computer.dm
@@ -2,6 +2,7 @@
name = "Area Air Control"
desc = "A computer used to control the stationary scrubbers and pumps in the area."
icon_state = "area_atmos"
+ light_color = "#e6ffff"
circuit = "/obj/item/weapon/circuitboard/area_atmos"
var/list/connectedscrubbers = new()
diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm
index b35cfd95a67..3f38059618e 100644
--- a/code/game/machinery/computer/Operating.dm
+++ b/code/game/machinery/computer/Operating.dm
@@ -5,6 +5,7 @@
density = 1
anchored = 1.0
icon_state = "operating"
+ light_color = "#315ab4"
circuit = "/obj/item/weapon/circuitboard/operating"
var/mob/living/carbon/human/victim = null
var/obj/machinery/optable/table = null
diff --git a/code/game/machinery/computer/RCON_Console.dm b/code/game/machinery/computer/RCON_Console.dm
index f80f0b93c4d..cf275eb5ce8 100644
--- a/code/game/machinery/computer/RCON_Console.dm
+++ b/code/game/machinery/computer/RCON_Console.dm
@@ -9,6 +9,7 @@
desc = "Console used to remotely control machinery on the station."
icon = 'icons/obj/computer.dmi'
icon_state = "ai-fixer"
+ light_color = "#a97faa"
circuit = /obj/item/weapon/circuitboard/rcon_console
req_one_access = list(access_engine)
var/current_tag = null
diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm
index 0613c6222b4..e64708907ec 100644
--- a/code/game/machinery/computer/aifixer.dm
+++ b/code/game/machinery/computer/aifixer.dm
@@ -2,6 +2,7 @@
name = "\improper AI system integrity restorer"
icon = 'icons/obj/computer.dmi'
icon_state = "ai-fixer"
+ light_color = "#a97faa"
circuit = /obj/item/weapon/circuitboard/aifixer
req_one_access = list(access_robotics, access_heads)
var/mob/living/silicon/ai/occupant = null
diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm
index 2af213478a8..640eb9c4d26 100644
--- a/code/game/machinery/computer/atmos_alert.dm
+++ b/code/game/machinery/computer/atmos_alert.dm
@@ -9,6 +9,7 @@ var/global/list/minor_air_alarms = list()
desc = "Used to access the station's atmospheric sensors."
circuit = "/obj/item/weapon/circuitboard/atmos_alert"
icon_state = "alert:0"
+ light_color = "#e6ffff"
/obj/machinery/computer/atmos_alert/New()
..()
diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm
index 788d53323ea..c0c798f3eb8 100644
--- a/code/game/machinery/computer/atmos_control.dm
+++ b/code/game/machinery/computer/atmos_control.dm
@@ -6,6 +6,7 @@
name = "\improper Central Atmospherics Computer"
icon = 'icons/obj/computer.dmi'
icon_state = "computer_generic"
+ light_color = "#00b000"
density = 1
anchored = 1.0
circuit = "/obj/item/weapon/circuitboard/atmoscontrol"
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 8c814692978..8cc47a52eff 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -9,6 +9,7 @@
name = "security camera monitor"
desc = "Used to access the various cameras on the station."
icon_state = "cameras"
+ light_color = "#a91515"
var/obj/machinery/camera/current = null
var/last_pic = 1.0
var/list/network
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 4e975060888..9879e345654 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -4,6 +4,7 @@
name = "\improper ID card modification console"
desc = "Terminal for programming NanoTrasen employee ID cards to access parts of the station."
icon_state = "id"
+ light_color = "#0099ff"
req_access = list(access_change_ids)
circuit = "/obj/item/weapon/circuitboard/card"
var/obj/item/weapon/card/id/scan = null
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 393735caa45..6a274e4db40 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -2,6 +2,7 @@
name = "cloning control console"
icon = 'icons/obj/computer.dmi'
icon_state = "dna"
+ light_color = "#315ab4"
circuit = "/obj/item/weapon/circuitboard/cloning"
req_access = list(access_heads) //Only used for record deletion right now.
var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 1be7fae4532..686ac73af66 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -5,6 +5,7 @@
name = "command and communications console"
desc = "Used to command and control the station. Can relay long-range communications."
icon_state = "comm"
+ light_color = "#0099ff"
req_access = list(access_heads)
circuit = "/obj/item/weapon/circuitboard/communications"
var/prints_intercept = 1
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index 3efb6b41897..7ed213043dc 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -9,6 +9,9 @@
var/circuit = null //The path to the circuit board type. If circuit==null, the computer can't be disassembled.
var/processing = 0
+ var/light_range_on = 3
+ var/light_power_on = 1
+
/obj/machinery/computer/initialize()
power_change()
@@ -86,6 +89,10 @@
/obj/machinery/computer/power_change()
..()
update_icon()
+ if(stat & NOPOWER)
+ set_light(0)
+ else
+ set_light(light_range_on, light_power_on)
/obj/machinery/computer/proc/set_broken()
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index b5394328b83..6928d104ca7 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -2,6 +2,7 @@
name = "crew monitoring computer"
desc = "Used to monitor active health sensors built into most of the crew's uniforms."
icon_state = "crew"
+ light_color = "#315ab4"
use_power = 1
idle_power_usage = 250
active_power_usage = 500
diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm
index 40fc0b99145..5add587e77c 100644
--- a/code/game/machinery/computer/guestpass.dm
+++ b/code/game/machinery/computer/guestpass.dm
@@ -5,6 +5,7 @@
name = "guest pass"
desc = "Allows temporary access to station areas."
icon_state = "guest"
+ light_color = "#0099ff"
var/temp_access = list() //to prevent agent cards stealing access as permanent
var/expiration_time = 0
@@ -186,4 +187,4 @@
else
usr << "\red Cannot issue pass without issuing ID."
updateUsrDialog()
- return
\ No newline at end of file
+ return
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 35e2b186b7b..65322b741da 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -4,6 +4,7 @@
name = "medical records console"
desc = "Used to view, edit and maintain medical records."
icon_state = "medcomp"
+ light_color = "#315ab4"
req_one_access = list(access_medical, access_forensics_lockers)
circuit = "/obj/item/weapon/circuitboard/med_data"
var/obj/item/weapon/card/id/scan = null
diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm
index 94eadf7f11e..f775c5f9508 100644
--- a/code/game/machinery/computer/message.dm
+++ b/code/game/machinery/computer/message.dm
@@ -4,6 +4,7 @@
name = "messaging monitor console"
desc = "Used to access and maintain data on messaging servers. Allows you to view PDA and request console messages."
icon_state = "comm_logs"
+ light_color = "#00b000"
var/hack_icon = "comm_logsc"
var/normal_icon = "comm_logs"
circuit = "/obj/item/weapon/circuitboard/message_monitor"
diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm
index 30a39c37b13..257e76ede8b 100644
--- a/code/game/machinery/computer/pod.dm
+++ b/code/game/machinery/computer/pod.dm
@@ -4,6 +4,7 @@
name = "pod launch control console"
desc = "A control console for launching pods. Some people prefer firing Mechas."
icon_state = "computer_generic"
+ light_color = "#00b000"
circuit = /obj/item/weapon/circuitboard/pod
var/id = 1.0
var/obj/machinery/mass_driver/connected = null
diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm
index 976209305a9..93d38fabeb6 100644
--- a/code/game/machinery/computer/prisoner.dm
+++ b/code/game/machinery/computer/prisoner.dm
@@ -4,6 +4,7 @@
name = "prisoner management console"
icon = 'icons/obj/computer.dmi'
icon_state = "explosive"
+ light_color = "#a91515"
req_access = list(access_armory)
circuit = "/obj/item/weapon/circuitboard/prisoner"
var/id = 0.0
diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm
index 7b152fb7a30..0fd1a2df05e 100644
--- a/code/game/machinery/computer/prisonshuttle.dm
+++ b/code/game/machinery/computer/prisonshuttle.dm
@@ -14,6 +14,7 @@ var/prison_shuttle_timeleft = 0
name = "prison shuttle control console"
icon = 'icons/obj/computer.dmi'
icon_state = "shuttle"
+ light_color = "#00ffff"
req_access = list(access_security)
circuit = "/obj/item/weapon/circuitboard/prison_shuttle"
var/temp = null
@@ -233,4 +234,4 @@ var/prison_shuttle_timeleft = 0
pest.gib()
start_location.move_contents_to(end_location)
- return
\ No newline at end of file
+ return
diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm
index 41d73ee2ae5..84a6b7730c7 100644
--- a/code/game/machinery/computer/robot.dm
+++ b/code/game/machinery/computer/robot.dm
@@ -5,6 +5,7 @@
desc = "Used to remotely lockdown or detonate linked cyborgs."
icon = 'icons/obj/computer.dmi'
icon_state = "robot"
+ light_color = "#a97faa"
req_access = list(access_robotics)
circuit = "/obj/item/weapon/circuitboard/robotics"
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 647434b7fd1..c97be5be09e 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -4,6 +4,7 @@
name = "security records console"
desc = "Used to view, edit and maintain security records"
icon_state = "security"
+ light_color = "#a91515"
req_one_access = list(access_security, access_forensics_lockers)
circuit = "/obj/item/weapon/circuitboard/secure_data"
var/obj/item/weapon/card/id/scan = null
diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm
index 05da871ed2d..3fca14135a0 100644
--- a/code/game/machinery/computer/shuttle.dm
+++ b/code/game/machinery/computer/shuttle.dm
@@ -2,6 +2,7 @@
name = "Shuttle"
desc = "For shuttle control."
icon_state = "shuttle"
+ light_color = "#00ffff"
var/auth_need = 3.0
var/list/authorized = list( )
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index 201c834e1c5..e0c6f724abf 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -4,6 +4,7 @@
name = "employment records console"
desc = "Used to view, edit and maintain employment records."
icon_state = "medlaptop"
+ light_color = "#00b000"
req_one_access = list(access_heads)
circuit = "/obj/item/weapon/circuitboard/skills"
var/obj/item/weapon/card/id/scan = null
@@ -411,4 +412,4 @@ What a mess.*/
qdel(R)
continue
- ..(severity)
\ No newline at end of file
+ ..(severity)
diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm
index 48ba842a2f6..3d44a7a260c 100644
--- a/code/game/machinery/computer/specops_shuttle.dm
+++ b/code/game/machinery/computer/specops_shuttle.dm
@@ -15,6 +15,7 @@ var/specops_shuttle_timeleft = 0
name = "special operations shuttle control console"
icon = 'icons/obj/computer.dmi'
icon_state = "shuttle"
+ light_color = "#00ffff"
req_access = list(access_cent_specops)
// req_access = list(ACCESS_CENT_SPECOPS)
var/temp = null
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index cce12b9a43d..696273d2ab8 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -3,6 +3,7 @@
name = "Station Alert Console"
desc = "Used to access the station's automated alert system."
icon_state = "alert:0"
+ light_color = "#e6ffff"
circuit = /obj/item/weapon/circuitboard/stationalert_engineering
var/obj/nano_module/alarm_monitor/alarm_monitor
var/monitor_type = /obj/nano_module/alarm_monitor/engineering
diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm
index 233a2711085..b5df1127c95 100644
--- a/code/game/machinery/computer/supply.dm
+++ b/code/game/machinery/computer/supply.dm
@@ -2,6 +2,7 @@
name = "supply control console"
icon = 'icons/obj/computer.dmi'
icon_state = "supply"
+ light_color = "#b88b2e"
req_access = list(access_cargo)
circuit = "/obj/item/weapon/circuitboard/supplycomp"
var/temp = null
diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm
index f526ead65ba..dd921abf090 100644
--- a/code/game/machinery/computer/syndicate_specops_shuttle.dm
+++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm
@@ -14,6 +14,7 @@ var/syndicate_elite_shuttle_timeleft = 0
name = "elite syndicate squad shuttle control console"
icon = 'icons/obj/computer.dmi'
icon_state = "syndishuttle"
+ light_color = "#00ffff"
req_access = list(access_cent_specops)
var/temp = null
var/hacked = 0
@@ -256,4 +257,4 @@ var/syndicate_elite_shuttle_timeleft = 0
add_fingerprint(usr)
updateUsrDialog()
- return
\ No newline at end of file
+ return
diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm
index d3c249b7473..615261bc5f9 100644
--- a/code/game/mecha/mech_bay.dm
+++ b/code/game/mecha/mech_bay.dm
@@ -139,6 +139,7 @@
anchored = 1
icon = 'icons/obj/computer.dmi'
icon_state = "recharge_comp"
+ light_color = "#a97faa"
circuit = "/obj/item/weapon/circuitboard/mech_bay_power_console"
var/autostart = 1
var/voltage = 45
@@ -214,4 +215,4 @@
// open the new ui window
ui.open()
// auto update every Master Controller tick
- ui.set_auto_update(1)
\ No newline at end of file
+ ui.set_auto_update(1)
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index ef254d5914f..92d7f6ee665 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -2,6 +2,7 @@
name = "Exosuit Control"
icon = 'icons/obj/computer.dmi'
icon_state = "mecha"
+ light_color = "#a97faa"
req_access = list(access_robotics)
circuit = "/obj/item/weapon/circuitboard/mecha_control"
var/list/located = list()
diff --git a/code/modules/power/sensors/sensor_monitoring.dm b/code/modules/power/sensors/sensor_monitoring.dm
index 5f561fcde61..c4e9a191e93 100644
--- a/code/modules/power/sensors/sensor_monitoring.dm
+++ b/code/modules/power/sensors/sensor_monitoring.dm
@@ -8,6 +8,7 @@
desc = "Computer designed to remotely monitor power levels around the station"
icon = 'icons/obj/computer.dmi'
icon_state = "power"
+ light_color = "#ffcc33"
//computer stuff
density = 1
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 6f47ca5bb2f..7ba0192a853 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -30,6 +30,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
/obj/machinery/computer/rdconsole
name = "R&D control console"
icon_state = "rdcomp"
+ light_color = "#a97faa"
circuit = /obj/item/weapon/circuitboard/rdconsole
var/datum/research/files //Stores all the collected research data.
var/obj/item/weapon/disk/tech_disk/t_disk = null //Stores the technology disk.
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 62da7ef49bd..d57c9957552 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -196,6 +196,7 @@
/obj/machinery/computer/rdservercontrol
name = "R&D Server Controller"
icon_state = "rdcomp"
+ light_color = "#a97faa"
circuit = /obj/item/weapon/circuitboard/rdservercontrol
var/screen = 0
var/obj/machinery/r_n_d/server/temp_server
@@ -355,4 +356,4 @@
name = "Core R&D Server"
id_with_upload_string = "1"
id_with_download_string = "1"
- server_id = 1
\ No newline at end of file
+ server_id = 1
From 79a191a2b57c211af2f8e72f8d5463602d4bfb26 Mon Sep 17 00:00:00 2001
From: Mloc
Date: Sun, 10 May 2015 20:17:57 +0100
Subject: [PATCH 9/9] dynamic fire colours
Fire colour + light colour changes with temperature.
Signed-off-by: Mloc
---
code/ZAS/Fire.dm | 17 ++++++++++++-----
icons/effects/fire.dmi | Bin 279579 -> 323434 bytes
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm
index 50b048d75ae..ebfd0292280 100644
--- a/code/ZAS/Fire.dm
+++ b/code/ZAS/Fire.dm
@@ -91,7 +91,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
anchored = 1
mouse_opacity = 0
- //luminosity = 3
+ blend_mode = BLEND_ADD
icon = 'icons/effects/fire.dmi'
icon_state = "1"
@@ -114,13 +114,13 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
if(firelevel > 6)
icon_state = "3"
- set_light(7)
+ set_light(7, 3)
else if(firelevel > 2.5)
icon_state = "2"
- set_light(5)
+ set_light(5, 2)
else
icon_state = "1"
- set_light(3)
+ set_light(3, 1)
//im not sure how to implement a version that works for every creature so for now monkeys are firesafe
for(var/mob/living/L in loc)
@@ -158,6 +158,9 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
else
enemy_tile.adjacent_fire_act(loc, air_contents, air_contents.temperature, air_contents.volume)
+ animate(src, color = heat2color(air_contents.temperature), 5)
+ set_light(l_color = color)
+
/obj/fire/New(newLoc,fl)
..()
@@ -165,7 +168,11 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
qdel(src)
set_dir(pick(cardinal))
- set_light(3)
+
+ var/datum/gas_mixture/air_contents = loc.return_air()
+ color = heat2color(air_contents.temperature)
+ set_light(3, 1, color)
+
firelevel = fl
air_master.active_hotspots.Add(src)
diff --git a/icons/effects/fire.dmi b/icons/effects/fire.dmi
index 9e5c0d2db8346ef360fd3404e4b940cd2ea081ba..90e3bb4125991d19ab8a3e249e386a1e378efbe1 100644
GIT binary patch
literal 323434
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