From c6673bea70e577fe5d031af6d74633a405a9b3eb Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sun, 30 Nov 2014 11:45:02 +0100 Subject: [PATCH 01/20] Minor Map Stuff Moves the atmospherics powernet sensor into the small maintenance room. Looked a bit odd on-top of the floor. Adds some lights to the new maintenance arm between xeno/viro. Shuffle some maintenance lights around. Sorts out a dimly lit room on the research outpost. --- maps/exodus-1.dmm | 101 ++++++++++++++++++++++------------------------ maps/exodus-5.dmm | 8 ++-- 2 files changed, 53 insertions(+), 56 deletions(-) diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index 5ee52569bd..2a9a82e85b 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -982,7 +982,7 @@ "asT" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/dormitory) "asU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/dormitory) "asV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/dormitory) -"asW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/dormitory) +"asW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/dormitory) "asX" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/plating,/area/maintenance/dormitory) "asY" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/dormitory) "asZ" = (/turf/simulated/wall/r_wall,/area/maintenance/dormitory) @@ -5131,7 +5131,7 @@ "bUI" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/engineering) "bUJ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/engineering) "bUK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) -"bUL" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"bUL" = (/obj/effect/decal/cleanable/dirt,/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/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engineering) "bUM" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/engineering) "bUN" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/medical/sleeper) "bUO" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/medical/sleeper) @@ -5361,7 +5361,7 @@ "bZe" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/engine/engineering_supply) "bZf" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light,/obj/machinery/camera{c_tag = "Engineering Supplies"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/engine/engineering_supply) "bZg" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/engine/engineering_supply) -"bZh" = (/obj/effect/decal/cleanable/dirt,/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,/turf/simulated/floor/plating,/area/maintenance/engineering) +"bZh" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/engineering) "bZi" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Medbay Diagnostics Maintenance Access"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/medical/sleeper) "bZj" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/medical/sleeper) "bZk" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/medical/sleeper) @@ -5642,7 +5642,7 @@ "cez" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) "ceA" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = 28; pixel_y = 5},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) "ceB" = (/obj/machinery/door/airlock/medical{autoclose = 0; icon_state = "door_open"; id_tag = "engineering_cubicle"; name = "Restroom"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash) -"ceC" = (/obj/machinery/light/small{dir = 4},/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,/turf/simulated/floor/plating,/area/maintenance/engineering) +"ceC" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless,/area/space) "ceD" = (/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/surgeryobs) "ceE" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/medical/surgeryobs) "ceF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "bluecorner"},/area/medical/surgeryobs) @@ -6082,7 +6082,7 @@ "cmX" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port) "cmY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "cmZ" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "10;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"cna" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/engineering) +"cna" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area/space) "cnb" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) "cnc" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) "cnd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) @@ -6244,7 +6244,7 @@ "cqd" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/engine/hallway) "cqe" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engine/workshop) "cqf" = (/obj/machinery/shield_capacitor,/turf/simulated/floor/plating,/area/engine/storage_hard) -"cqg" = (/obj/machinery/light/small{dir = 4},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/engineering) +"cqg" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless,/area/space) "cqh" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery) "cqi" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery) "cqj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery) @@ -6286,7 +6286,7 @@ "cqT" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/security/prison) "cqU" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor,/area/atmos) "cqV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) -"cqW" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless,/area/rnd/xenobiology) +"cqW" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/simulated/floor/plating/airless,/area/space) "cqX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/engine/drone_fabrication) "cqY" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor,/area/atmos) "cqZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/drone_fabrication) @@ -6334,13 +6334,13 @@ "crP" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) "crQ" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless/catwalk{icon_state = "catwalk3"},/area/solar/starboard) "crR" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor,/area/atmos) -"crS" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless,/area/rnd/xenobiology) -"crT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area/rnd/xenobiology) -"crU" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless,/area/rnd/xenobiology) +"crS" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/power/sensor{name = "Powernet Sensor - Atmospherics Subgrid"; name_tag = "Atmospherics Subgrid"},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/structure/cable/cyan,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/atmos) +"crT" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 5},/turf/simulated/floor/plating/airless,/area/space) +"crU" = (/obj/structure/disposalpipe/junction,/turf/simulated/floor/plating/airless,/area/space) "crV" = (/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/engine/drone_fabrication) "crW" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 8},/turf/simulated/floor,/area/atmos) "crX" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 1},/turf/simulated/floor,/area/atmos) -"crY" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/simulated/floor/plating/airless,/area/rnd/xenobiology) +"crY" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) "crZ" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple,/turf/simulated/floor,/area/atmos) "csa" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/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/engine/drone_fabrication) "csb" = (/turf/space,/area/syndicate_station/maint_dock) @@ -6734,7 +6734,7 @@ "czz" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance Access"; req_access_txt = "12;24"},/obj/structure/disposalpipe/segment,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/atmos) "czA" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor{dir = 10; icon_state = "yellow"},/area/atmos) "czB" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/atmos) -"czC" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless,/area/medical/virology) +"czC" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/engineering) "czD" = (/obj/structure/table,/obj/item/device/multitool{pixel_x = 5},/obj/item/device/t_scanner,/turf/simulated/floor,/area/engine/workshop) "czE" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor,/area/engine/workshop) "czF" = (/obj/structure/table,/obj/machinery/light,/obj/item/weapon/wrench,/obj/item/device/flashlight,/obj/machinery/cell_charger,/turf/simulated/floor,/area/engine/workshop) @@ -6776,8 +6776,8 @@ "cAp" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cAq" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cAr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/xenobiology) -"cAs" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 5},/turf/simulated/floor/plating/airless,/area/medical/virology) -"cAt" = (/turf/simulated/floor/plating/airless,/area/medical/virology) +"cAs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering) +"cAt" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/research_port) "cAu" = (/obj/structure/disposalpipe/segment,/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/engine/drone_fabrication) "cAv" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/atmos) "cAw" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/atmos) @@ -6790,7 +6790,7 @@ "cAD" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cAE" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cAF" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) -"cAG" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/atmos) +"cAG" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics"; req_access_txt = "24"},/turf/simulated/floor,/area/atmos) "cAH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/atmos) "cAI" = (/turf/simulated/wall/r_wall,/area/engine/hallway) "cAJ" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/turf/simulated/floor,/area/engine/hallway) @@ -6835,13 +6835,13 @@ "cBw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/research_port) "cBx" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/structure/lattice,/turf/space,/area/space) "cBy" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 0; pressure_checks_default = 0},/turf/simulated/floor/plating,/area/atmos) -"cBz" = (/obj/structure/disposalpipe/junction,/turf/simulated/floor/plating/airless,/area/rnd/xenobiology) +"cBz" = (/obj/machinery/power/apc/super{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/atmos) "cBA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port) "cBB" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cBC" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cBD" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cBE" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) -"cBF" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area/medical/virology) +"cBF" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/engineering) "cBG" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/atmos) "cBH" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "10;24"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engine/engine_hallway) "cBI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_hallway) @@ -6873,7 +6873,7 @@ "cCi" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cCj" = (/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/medical/virology) "cCk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/status_display,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology) -"cCl" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless,/area/medical/virology) +"cCl" = (/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "cCm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology) "cCn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/status_display,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor/plating,/area/medical/virology) "cCo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology) @@ -7202,10 +7202,10 @@ "cIz" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/atmos) "cIA" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "cIB" = (/obj/machinery/atmospherics/valve/digital{dir = 4},/turf/simulated/floor,/area/atmos) -"cIC" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics"; req_access_txt = "24"},/turf/simulated/floor,/area/atmos) +"cIC" = (/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "cID" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor,/area/atmos) "cIE" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/turf/simulated/wall/r_wall,/area/atmos) -"cIF" = (/obj/machinery/power/apc/super{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Atmospherics Subgrid"; name_tag = "Atmospherics Subgrid"},/turf/simulated/floor,/area/atmos) +"cIF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 8},/turf/simulated/floor/plating,/area/atmos) "cIG" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "cIH" = (/obj/machinery/power/smes/buildable{charge = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "cII" = (/turf/simulated/floor/plating,/area/maintenance/substation/engineering) @@ -7296,14 +7296,14 @@ "cKp" = (/obj/item/weapon/wrench,/turf/space,/area/space) "cKq" = (/turf/space,/area/vox_station/southwest_solars) "cKr" = (/obj/machinery/power/solar{id = "auxsolarnorth"; name = "Fore Solar Array"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/fore) -"cKs" = (/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"cKt" = (/obj/machinery/power/terminal,/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"cKs" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/atmos) +"cKt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 8},/turf/simulated/floor/plating,/area/atmos) "cKu" = (/obj/machinery/computer/general_air_control{frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Waste Loop")},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/engine/atmos_monitoring) "cKv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor/plating,/area/atmos) -"cKw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/turf/simulated/floor/plating,/area/atmos) -"cKx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/atmos) -"cKy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/turf/simulated/floor/plating,/area/atmos) -"cKz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/turf/simulated/floor/plating,/area/atmos) +"cKw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/atmos) +"cKx" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "nukemaint_sensor"; pixel_x = 0; pixel_y = 24},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/research_port) +"cKy" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/research_port) +"cKz" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "nukemaint_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 0; req_access_txt = "10;13"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/research_port) "cKA" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/space,/area/space) "cKB" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/space,/area/space) "cKC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/research_port) @@ -7312,15 +7312,12 @@ "cKF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/research_port) "cKG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/research_port) "cKH" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/research_port) -"cKI" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "nukemaint_sensor"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/research_port) "cKJ" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "nukemaint_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/research_port) "cKK" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "nukemaint_airlock"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"; tag_airpump = "nukemaint_pump"; tag_chamber_sensor = "nukemaint_sensor"; tag_exterior_door = "nukemaint_outer"; tag_interior_door = "nukemaint_inner"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "nukemaint_pump"},/turf/simulated/floor/plating,/area/maintenance/research_port) "cKL" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "9;12;47"},/turf/simulated/floor/plating,/area/maintenance/research_port) -"cKM" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/plating,/area/maintenance/research_port) "cKN" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port) "cKO" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/camera{c_tag = "South Maintenance Airlock"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/research_port) "cKP" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating,/area/maintenance/research_port) -"cKQ" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "nukemaint_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 0; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/maintenance/research_port) "cKR" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_port) "cKS" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/research_port) "cKT" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/plating,/area/engine/engine_room) @@ -7484,50 +7481,50 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLVbNgbNgbNgbOQbORbKAbOSbOTbOUbKAbKAbOVbOWbGvbGvbGvbGvbGvbGvbOXbOYbOZbPaaaabPbbPcbPcbPdbPebPfbPgbPhbPfbPibNFbPjbPkbPlbNFbPmbPnbPobPpbPqbPrbPsbPtbPtbNSbPubPvbPwbPxbPybDtbMsbPzbGFbGFbPAbPBbDzbPCbxCbPDbPEbPFbPGbwkbPHbPIbwkbPJbPKbPLbPMbPNbMKbCpbCpbCpbCpbCpbCpbCpbCpbPObMObPPbPQbPRbOsbOsbOsbOsbPSbMObPTbLEbPUbPUbzAbBhbPVbPWbPXbPYbPYbPYbPYbPZbQabQabQbbQcbQdbMVbQebQfbQgbOObQhbQibQjbQkaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbQlbQmbQmbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbNhbNhbNhbKxbQnbQobQpbQqbQrbKAbKAbQsbQtbQubQvbQvbQvbQvbQvbQvbQwbQxbQyaaabQzbQAbQBbQCbQDbPfbQEbQFbQGbQHbNFbQIbQJbQKbNFbQLbQMbQNbQObQPbQQbQRbPtbQSbPxbQTbNUbPxbPxbQUbDtbKZbQVbLabLbbGFbQWbQXbLebQYbQZbRabRbbRcbRdbDEbIkbRebPJbPLbPLbPMbRfbMKbRgbRhbRibRjbRkbRlbRmbRnbPObMObOsbOsbRobOsbOsbOsbOsbRpbMObRqbLEbRrbRrbzAbRsbRtbRubRvbRwbRxbRybRybRzbRAbRybRybRybRBbRCbRDbREbRFbRGbRHbRIbRJbRKaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaabLVbRMbRNbRObLVbRPbMabMbbGtbGtbRQbRQbRQbGtbGtbNxbRRbRRbRSbRSbRSbRSbNwbQyaaabRTbRUbRVbRWbRXbRYbRZbSabSbbSbbScbSdbSebSfbNFbPtbPtbPtbPtbPtbSgbPtbPtbShbSibSjbNUbPxbSkbSlbDtbJxbQVbGFbSmbSnbQWbSobJAbSpbSqbSrbSsbStbSubFsbSvbSwbSxbSybSzbSAbSBbMKbSCbSDbSEbRjbSFbSGbSHbRnbPObMObMObMObRobOsbOsbOsbMObMObMObSIbSJbRrbRrbzAbSKbSLbCvbzIbSMbSNbSObSPbSQbSRbSSbQabSTbSUbMVbSVbQfbSWbOObSXbSYbSZbTaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbTcbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTdbKwbTebKwbTfbTgaafaaaaaabGtbThbTibTjbGtaaabNxbTkbTlbTmbTnbTnbTnbTobQyaaabQzbTpbTqbTrbTsbPfbTtbTubTvbTwbNFbTxbTybTzbTAbTBbTBbTBbTCbTCbTDbTEbPxbPxbPxbTFbNUbNUbNUbNUbDtbDtbTGbTHbTIbDtbTJbTKbTLbTMbTNbTJbTObTPbTQbTRbTSbTJbMKbMKbMKbMKbMKbMKbTTbTUbTVbRjbTWbTXbTYbRnbPObMObTZbUabUbbUcbUdbUebUfbTZbUgbUhbUibIIbIJbzAbIKbSLbUjbwwbMVbMVbMVbMVbMVbUkbMVbUlbQabUmbMVbUnbUobUnbOObUpbUqbUrbOOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbUsbUsbUsbUsbUsbUsbUtbLTbUubUsbTcbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbUvbNxbNxbNxbNxbRSbUwbNwbUxaaabUybPcbPcbUzbUAbPfbPfbUBbPfbUCbNFbUDbUEbUFbNFbUGbUGbUGbUGbUGbUGbUGbUGbUHbUIbUJbUKbULbUMbNUbDtbUNbUObUPbUQbURbUSbUTbUUbUVbUWbUXbUTbUYbUZbVabVbbVcbVdbVebVfbVgbVhbVibVjbVkbVjbRjbVlbVmbVlbRnbPObMObVnbVobVpbVqbVrbVsbVtbVubUgbzAbVvbzAbzAbVwbCxbSLbCxbVxaafbVybVzbVAbVBbVCbVBbVDbVEbVFbMVbVGbVHbVIbOObVJbVKbVKbVLaaLaaLaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVMbLRbLRbLRbLRbLRbLRbLRbVNbLUbLTbLTbLTbLTbVObLUbKuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTdbKwbTebKwbTfbTgaafaaaaaabGtbThbTibTjbGtaaabNxbTkbTlbTmbTnbTnbTnbTobQyaaabQzbTpbTqbTrbTsbPfbTtbTubTvbTwbNFbTxbTybTzbTAbTBbTBbTBbTCbTCbTDbTEbZhbPxbPxbTFbNUbNUbNUbNUbDtbDtbTGbTHbTIbDtbTJbTKbTLbTMbTNbTJbTObTPbTQbTRbTSbTJbMKbMKbMKbMKbMKbMKbTTbTUbTVbRjbTWbTXbTYbRnbPObMObTZbUabUbbUcbUdbUebUfbTZbUgbUhbUibIIbIJbzAbIKbSLbUjbwwbMVbMVbMVbMVbMVbUkbMVbUlbQabUmbMVbUnbUobUnbOObUpbUqbUrbOOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbUsbUsbUsbUsbUsbUsbUtbLTbUubUsbTcbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbUvbNxbNxbNxbNxbRSbUwbNwbUxaaabUybPcbPcbUzbUAbPfbPfbUBbPfbUCbNFbUDbUEbUFbNFbUGbUGbUGbUGbUGbUGbUGbUGbUHbUIbUJbUKbUKbUMbNUbDtbUNbUObUPbUQbURbUSbUTbUUbUVbUWbUXbUTbUYbUZbVabVbbVcbVdbVebVfbVgbVhbVibVjbVkbVjbRjbVlbVmbVlbRnbPObMObVnbVobVpbVqbVrbVsbVtbVubUgbzAbVvbzAbzAbVwbCxbSLbCxbVxaafbVybVzbVAbVBbVCbVBbVDbVEbVFbMVbVGbVHbVIbOObVJbVKbVKbVLaaLaaLaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVMbLRbLRbLRbLRbLRbLRbLRbVNbLUbLTbLTbLTbLTbVObLUbKuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVPbVQbVQbVRbVSbNxbVTbRSbVUbNxaaaaaaaaaaaabNybVVbVWbVXbVYbVZbPfbNFbWabWbbNIbNFbUGbWcbWdbWebWfbWgbWhbUGbWibWibWibWibWibTFbWjbWkbWlbWmbWnbWobWpbWqbWrbWsbWtbWubWtbWvbWtbWwbWxbWybWzbWAbWBbWAbWCbWDbWEbWFbWGbWHbWIbWJbWKbWLbWMbWNbWObWPbWQbWRbWSbWTbWUbWSbWSbWVbWWbWXbWYbWZbCxbCxbSLbCxbFTaafbVybXabXbbXcbXdbXebXfbXgbXhbMVbXibVHbXjbOObOObOObOObOOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbQmbQmbQmbQmbQmbQmbXkbLTbQlbQmbXlbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXmbXnbXobXpbRSbXqbXrbRSbXsbNxaaKaaaaaaaaabNybNybNybNybNybNybNFbNFbUDbUEbXtbNFbNFbXubXvbXwbXwbXvbXxbUGbXybXzbXzbXAbWibXBbDtbDtbXCbXDbXEbXFbXGbXHbXIbXJbXKbXLbXMbXNbXObXPbXQbXRbXSbXTbXUbXVbXUbXWbXXbXYbXZbYabYbbYcbYdbYebYfbYgbIwbYhbYhbYibYjbYkbYlbYmbYnbYobYpbYqbYrbYsbYtbYrbYubYvbILaafbVybXabYwbVBbYxbVBbYybYzbYAbMVbXjbVHbYBbYCbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbXlbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYDbVQbVQbVRbYEbYFbYGbNxbYHbNxbYIbYJbYKbYIbYIbYLbYMbYNbYObYPbYQbYRbYSbYTbYUbYVbYWbXvbYXbYYbYZbZabZbbZcbZdbZebZfbZgbWibZhbNSbZibZjbZkbZlbZlbZmbZnbZobZpbTJbTJbZqbZrbTJbTJbZsbZtbZubVibZvbZwbZxbZybZzbZybZAbZBbZCbZBbZAbZDbYfbMNbIwbZEbZFbZGbZHbZIbZJbZKbMObMObwwbwwbwwbwwbwwbZLbZMbZNbwwbMVbMVbMVbMVbMVbUkbMVbMVbMVbMVbMVbZObZPbZQbZRbUnaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYDbVQbVQbVRbYEbYFbYGbNxbYHbNxbYIbYJbYKbYIbYIbYLbYMbYNbYObYPbYQbYRbYSbYTbYUbYVbYWbXvbYXbYYbYZbZabZbbZcbZdbZebZfbZgbWibULbNSbZibZjbZkbZlbZlbZmbZnbZobZpbTJbTJbZqbZrbTJbTJbZsbZtbZubVibZvbZwbZxbZybZzbZybZAbZBbZCbZBbZAbZDbYfbMNbIwbZEbZFbZGbZHbZIbZJbZKbMObMObwwbwwbwwbwwbwwbZLbZMbZNbwwbMVbMVbMVbMVbMVbUkbMVbMVbMVbMVbMVbZObZPbZQbZRbUnaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaambZSaamaamaamaamaamaaaaaaaaaaaaaaaaaaaafaafaaabZTbZUbZUbZUbZVbZUbZUbZWbZXbYIbZYbZZbYIcaacabcaccadcaecafcagcahcaicajcakcalcambXvbYXcancaobZacapbUGcaqcaqcaqcaqcaqcarbNSbDtcascatcaucavcawcaxcaycazbTJcaAcaBcaCcaDcaEcaFcaGcaHcaIbZxbZwcaJbZycaKcaLbZAcaMcaNcaObZAcaPbYfbPObIwbIwcaQcaQcaQcaQcaQcaQbIwcaRcaScaTcaUcaVbwwbwwcaWbwwbwwcaXcaYcaZcbabXjcbbbXjbXjcbccbdcbecbfcbgcbhbUnbUnbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbUubUsbUsbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcbicbjcbkcblcbmcbncbocbpcbqbYIcbrcbsbYIbYIcbtcbucbvcbwcbxcbycbzbYSbYTbYUcbAcbBbXvbXvcbCcbDbXvcbEbUGcbFcbGcaqcbHcaqbTFcbIcbIcbIcbIcbIcbIcbIbTJcbJcbKbTJcbLcbMcbNcbOcaEcbPcbQcbRcaIbZxbZwbZxbZycbScbTbZAcbUcbVcbWbZAcbXcbYcbZccaccbcccccdcceccfccgcchcciccjcckcclccmccjccnccoccpccqccrccscctcctcctcctccucctcctcctcctcctccvccwccxccycczbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaaaaaabOPbKtbNdbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafccAccAcbkccBccCcbnccDccEccFbYIccGccHccIccJccKccLccMccNccOccPccQccRbTyccSccTccUccVccWccXccYccZcdacdbcdccddcdecdfcaqbTFcbIcdgcdhcdicdjcdkcdlcdmcdncdocdpcdqcdrcdscdtcaEcducdvcdwcaIbZxbZwbZxbZycdxcdybZAcdzcdAcdBbZAcdCbYfbYfcdDcdEcdFcdGcdHcdHcdIcdJcdKcdLcdLcdMcdNcdLcdOcdPcdQcdRcdOcdScdTcdUcdVcdScdScdScdScdWcdUcdVcdScdSbXjcdXcdYcdZceacebceccedceeceeceeceeceeceeceeceeceeceeceeceeceeceeceeceecefcegcegcehbKtbKtbLTbLTceibLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejcejcejcejcekcelcemcemcemcemcemcenceocepcepcepceqcerbYSbYTbYUcesbYWcetceucevcewcexceybUGcezceAcaqceBcaqceCcbIceDceEceEceEceFceGbTJceHceIbTJcbLcbNceJcbOcaEceKceLceMcaIbZxbZwceNbZyceOcePbZAbZAbZAbZAbZAceQceRbYfcdDceSceTceUceTceVceWceXceYcdLceZcfacfbcfccdOcfdcfecffcdOcfgcfhcfhcfhcficfjcfkcflcfmcfncfocfpcdScfqcfrcfsbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcftcfucfvbNebKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejcejcejcejcekcelcemcemcemcemcemcenceocepcepcepceqcerbYSbYTbYUcesbYWcetceucevcewcexceybUGcezceAcaqceBcaqbTFcbIceDceEceEceEceFceGbTJceHceIbTJcbLcbNceJcbOcaEceKceLceMcaIbZxbZwceNbZyceOcePbZAbZAbZAbZAbZAceQceRbYfcdDceSceTceUceTceVceWceXceYcdLceZcfacfbcfccdOcfdcfecffcdOcfgcfhcfhcfhcficfjcfkcflcfmcfncfocfpcdScfqcfrcfsbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcftcfucfvbNebKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejcfwcfxcfycfzcfAcejcfBcfCcfDcfEcfFcfGcfHcfHcamcfIcfIcfJcfKcbzbYSbYTbYUcfLcamcfMcfNcfOcfPcfQcfRbUGcfScfTcaqcfUcaqbTFcbIcfVcfWcfWcfWcfXcbIcfYcfZcgacfYcgbcgccgdcgecaEcgfceLcggcaIcghcgicgjbZycgkcglbZycgmbLvbVicgncgocgpcgqcgrcgscgtcdGcguceVcgvcgwcdDcdLcgxcgycgycgzcgAcgBcgCcgBcgDcgEcgFcgGcgGcgHcgIcgIcgJcgKcgLcgLcgMcdScgNcgOcgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcgQbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRaaaaaacgScgTcgTcgTcgUcgVcejcgWcgXcgYcgZchachbchcchdchechfchgchhchichjchkchlchmchnbNFbUGbUGbUGbUGbUGbUGbUGcaqcaqcaqcaqcaqbTFcbIcbIchochpchqcbIcbIchrchschtcfYcaEcaEcaEcaEcaEcaIchuchvcaIchwchxchwbZychychzbZychAchBbVichCbVichDbYfcdDbYfchEchFchGcdHchHcgwcdDcdLchIchJchJchKchLchMchNchOchPchQchRchSchTchUchVchWcgIcgIcgIchXchYcdSchZciacibcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRciccidciccgRciecifciecgRcigcihcigcgRaaaaaaciicgTcgTcgUcgUcijcejcikcilcemcimcinciocipciqcirbQJbQJcisbQJcbzbYScitbYUciucivciwcixciycixcizciAciBciCciDciEciFciAbTFciGciHciIciIciJciKciLciMciNciOciPciQciRciSciSciTciUcaIcaIcaIciVciWciXbZybZybZybZychBchBbViciYbViciZbYfcdDbYfcjacjbcjbcjccjdcjecjfcdLcjgcjhcjhcjicjjcjkcjlcjmcjncjocjpcjqcgIcgIcjrcjscgIcjtcgIchXcjucdScjvcjwcjxcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRciccjyciccgRciecjzciecgRcigcjAcigcgRaaaaaaciicgTcgUcgUcgUcjBcjCcjDcjEcemcjFcjGcjHcjIcjJcivcjKcjLcjMcjNcbzbYScjOchmcjPcjQcjRcjScjScjScjTcjUcjVcjWcjXcjYcjZciAbTFciGckaciIckbckcckdckeckfckgckhckickjckkcklciSckmciUcknckockpckqckrckqckscktcktckucktckvbVibVibVibVibYfckwbYfckxckyckzckAckBcchcjfcdLckCckDckDckDckEcdOckFcdOckGckHckIckJckJckKckLckLckMckJckJckNckOcdSckPckQckRcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRckSckTckUcgRckXckWckVcgRclackZckYcgRaaaaafciiclbcgTcgUcgUcgUcejclccldclecleclfclecleclecleclgbQJclhclicbzcljclkcllclmclncloclpclpclpclqciAcKtcKscIIcluclvclwclxciGclyciIclzclAclBclCclDclEclFclGclHclIclJciSclKciUclLclMclNclOclPclQclNclRclSclTbYfclUcktcktcktcktcktclVclWclXclYcktcktcktcktclZcdLcmacmbcmccmdcdOcmecmfcmgcdScmhcmicmicmicmjcmkcmlcmmcmicmicmicmncdScmocmpcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcgRcmscmtcmucgRcCpcmtcmwcgRcCpcmtcmwcgRaaaaafcmzcgTcgTcgUcgUcmAcejcmBcmCcmDcmEcmFcmGcmHcmHcmIcmJcmHcmKcmLcbzcmMcmNcmOcmPcivcmQcmQcmRcmScmTciAcmUcIHcIIcIGcmYcmZcnaciGcnbciIcnccndcneciGcnfciNcngcfYcnhcnicnjciScnkciUclLclMclNcnlcnmcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfbYfbYfcIOcIOcdOcdOcdOcdOcdOcdOcdOcdOcdOcnocnpcnqcdScdScnrcnscntcdScdScdScdScnucnscntcdScdScnvcnwcnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgRckSckTckUcgRckXckWckVcgRclackZckYcgRaaaaafciiclbcgTcgUcgUcgUcejclccldclecleclfclecleclecleclgbQJclhclicbzcljclkcllclmclncloclpclpclpclqciAcICcClcIIcluclvclwclxciGclyciIclzclAclBclCclDclEclFclGclHclIclJciSclKciUclLclMclNclOclPclQclNclRclSclTbYfclUcktcktcktcktcktclVclWclXclYcktcktcktcktclZcdLcmacmbcmccmdcdOcmecmfcmgcdScmhcmicmicmicmjcmkcmlcmmcmicmicmicmncdScmocmpcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcgRcmscmtcmucgRcCpcmtcmwcgRcCpcmtcmwcgRaaaaafcmzcgTcgTcgUcgUcmAcejcmBcmCcmDcmEcmFcmGcmHcmHcmIcmJcmHcmKcmLcbzcmMcmNcmOcmPcivcmQcmQcmRcmScmTciAcmUcIHcIIcIGcmYcmZcBFciGcnbciIcnccndcneciGcnfciNcngcfYcnhcnicnjciScnkciUclLclMclNcnlcnmcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfbYfbYfcIOcIOcdOcdOcdOcdOcdOcdOcdOcdOcdOcnocnpcnqcdScdScnrcnscntcdScdScdScdScnucnscntcdScdScnvcnwcnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaafaafaafaaaaafcnxaafcnxaafcKBaafcKAaafcKBaafcKAaafaafaaacejcnAcnBcgUcgUcnCcnDcnEcnFclecnGcnHcleclecnIcleclecnJcivclecnKcnLcnMcnNcnKclecnOcnOcnOcnPcnQcnOcnRcnRcnRcnRcnRcnRcnSciGcnTcnUcnccnVcnWciGcnfciNcnXciUcnYcnZcnjcoacobciUclLclMclNcoccodcoeclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacKCchBchBcdOcofcogcohcoicojcokcolcomconcoocopcoqcoraaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcoscotcosaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafcoucovcowcoxcowcovcKvcoxcKwcKxcKvcoAcKycKzcoBcoCcoCcoCcoCcoCcoCcoCcoCcoDcoEcoFcoGcoHcoIcKucoKcoLcoMcoNcoOcoPcoMcoQcoRcoScnOcoTcoUcoVcoWcoXcoYcnOcoZcoZcpacpbcpbcnRbTFciGciGcpccpdciGciGciGcpeciNcpfciUciUciUcpgcphciUciUclLcpiclNcpjcpkcpjclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacGXchBchBcdOcplcpmcplcpncpocppcpqcomcomcprcomcdOcdOaaaaaaaaaaafaafaaaaacaaaaaaaaaaaaaafaaacpsaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaaaaaaaafcptcuicpvcHhcGYcuicHFcHDcHEcHBcHCcHvcHAcHucpucHscpHcHrcpJcHlcpLcpMcpNcpOcpPcpQcGtcGWcpTcpUcpVcpWcpXcpYcpZcqacqbcoQcqccqdcnOcoXcoXcoXcoXcoXcqecnOcqfcqfcqfcpbcpbcnRbTFcqgciGcqhcqicqjcqkciGcqlciNcqmciUcqncqocqpcqqciUcqrclLcpiclNcqscqtcquclNaaaaaaaaaaaaaaaaaacqvcqwcqxcqycqvaafaaacGXchBchBcdOcplcplcplcqzcqAcqBcqCcqDcqEcqFcqGcqHcdOaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacqIaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafcqJcpucFtcGmcFVcpucymcpucrRczxcymcpucrRczxcpucpucpucpucpucqRcpucpucpucGWcGIcGtcqYcymcpTcracrbcrccrdcrecrfcrgcrhcoQcqccricnOcrjcoXcoXcrkcoXcrlcnOcrmcrncrocrncrpcnRbTFcrqciGcrrcrscrtcrucrvcrwcrxcrycrzcrAcrBcrCcrDciUcrEcrFcrGcrHcqvcrIcqvcrHaaaaaaaafaaaaaaaaacqvcrJcrKcrLcqvaafaafcFschBchBcdOcomcomcomcomcrMcppcrNcrNcrNcnpcrNcrOcdOaaaaaaaaaaaaaaacrPcrPcrPbZSaafaafaafaafcrQaafaafaafaafaafaaqcrPcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafcoucovcowcoxcowcovcKvcoxcIFcKscKvcoAcKtcKwcoBcoCcoCcoCcoCcoCcoCcoCcoCcoDcoEcoFcoGcoHcoIcKucoKcoLcoMcoNcoOcoPcoMcoQcoRcoScnOcoTcoUcoVcoWcoXcoYcnOcoZcoZcpacpbcpbcnRbTFciGciGcpccpdciGciGciGcpeciNcpfciUciUciUcpgcphciUciUclLcpiclNcpjcpkcpjclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacGXchBchBcdOcplcpmcplcpncpocppcpqcomcomcprcomcdOcdOaaaaaaaaaaafaafaaaaacaaaaaaaaaaaaaafaaacpsaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaaaaaaaafcptcuicpvcHhcGYcuicHFcHDcHEcHBcHCcHvcHAcHucpucHscpHcHrcpJcHlcpLcpMcpNcpOcpPcpQcGtcGWcpTcpUcpVcpWcpXcpYcpZcqacqbcoQcqccqdcnOcoXcoXcoXcoXcoXcqecnOcqfcqfcqfcpbcpbcnRbTFczCciGcqhcqicqjcqkciGcqlciNcqmciUcqncqocqpcqqciUcqrclLcpiclNcqscqtcquclNaaaaaaaaaaaaaaaaaacqvcqwcqxcqycqvaafaaacGXchBchBcdOcplcplcplcqzcqAcqBcqCcqDcqEcqFcqGcqHcdOaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacqIaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafcqJcpucFtcGmcFVcpucymcpucrRczxcymcpucrRczxcpucpucpucpucpucqRcpucpucpucGWcGIcGtcqYcymcpTcracrbcrccrdcrecrfcrgcrhcoQcqccricnOcrjcoXcoXcrkcoXcrlcnOcrmcrncrocrncrpcnRbTFcrqciGcrrcrscrtcrucrvcrwcrxcrycrzcrAcrBcrCcrDciUcrEcrFcrGcrHcqvcrIcqvcrHaaaaaaaafaaaaaaaaacqvcrJcrKcrLcqvaafaafcFschBcrYcdOcomcomcomcomcrMcppcrNcrNcrNcnpcrNcrOcdOaaaaaaaaaaaaaaacrPcrPcrPbZSaafaafaafaafcrQaafaafaafaafaafaaqcrPcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcptcpucqYcpucqYcpucymcpucIicqMcyucqMcIjcqMcqMcyscIhcpucpucqScqPcqPcqPcrZcIdcsdcsdcIgcpTcHYcHXcsicoMcsjcskcslcoMcsmcsncsocspcsqcsrcsscstcoXcsucnOcsvcrncswcrncsxcnRbTFcsyciGcszcsAcsBcsCciGcfYcsDcfYciUcsEcsFcsGcsHciUcsIcrGcrGcqvcsJcsKcsLcqvcqvcqvcsMcqvcqvcqvcqvcsNcsOcsPcqvcqvcqvcrHchBchBcdOcofcogcohcsQcsRcqBcrNcrNcrNcnpcrNcsScdOaaaaaaaaaaaaaaacrPaaaaafaaaaafaaaaaaaaacsTaaaaafaafaaaaaaaaaaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaacptcpucqYcpucsUcsXcHTcsWcHUcHVcyucqMcHWcqMcqMcyscHRcpucpucHScGmcHPcwpcqUcHOcqYcqYcHQctictjcHHcoCcoMctlcoMcoMcoMctmctncsoctoctpctqctrctscoXcttcnOctucrncswcrncrncnRctvctwciGciGctxciGciGciGctyctzctAciUciUciUctBciUciUcsIcrGaaacqvctCctDctEctFctGctHctIctJctKctLcqvctMctDctNcqvctOctPcqvchBchBcdOcplcplcplctQcpoctRctSctTctUctVcrNctWcdOcdOcdOcdOaaaaaacrPaaactXctXctXctXctXaafcsTaafctXctXctXctXctXaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpucsUcsXcsXcsXcHTcsXcsXcsXcHTcsXcsXcsXcsXcsXcIncsXcsXcHTcsXcIvcsXcsXcsXcIpctgcthcuicpucIzcukculcumcuncuocupcuncuqcurcuscutcuucuucuvcuucuwcuxcuycuzcuAcuBcuBcnRcuCcuDcuEcuFcuFcuGcuHcuIcuJcuJcuJcuJcuJcuJcuJcuJcuKcrFcrGaaactFcuLcuMcuNctFcuOcuPcuQcuQcuRcuQcuScuTcuUcuVcuWcuXcuQcqvchBchBcdOcplcplcplcsQcuYcuZcvacvbcvccvdcrNcrNcvecvfcvgcdOaafaafcrPaafcvhcvicvicvicvicvjcvkcvlcvmcvmcvmcvmcvnaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpucpucpucpucpucymcpucpucpucymcpucpucpucpucpucrRcpucpucymcpucIlcpucpucvucvvcIkcvwcvxcvycvxcvAcvBcvCcvDcvEcvBcvBcvFcvGcnPcvHcoXcvIcvJcoXcoXcvKcrncrncvLcuBcuBcnRbPxcvMcvNcvNcvNcvNcvOcvNcvNcvNcvNclMcvPcrGcrGcrGcrGcrGcrGaaactFctFcvQctFctFcvRcvScvTcvUcvVcvWcvVcvXcvYcvZcwacwbcwccqvchBchBcdOcomcomcomcomcwdcppcvacwecwfcwgcrNcrNcwhcrNcwicdOaaaaaacrPaafcwjcwjcwjcwjcwjaaacsTaaacwjcwjcwjcwjcwjaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaabZSaaaaaaaaaaaacptcpucpucpucpucpucymcpucpucpucymcpucpucpucpucpucrRcpucpucymcpucvpcpucpucvpcvpcvpcpucpucwtcIFcoCcoCcoCcoCcwvcwwcoQcwxcwycspcwzcoXcwAcvJcoXcwBcnOcwCcrncwEcwFcwGcnRcwHcvMcvNcwIcwJcwKcwLcwMcwNcwOcvNcwPcwQcrGaaaaaaaaaaaaaaaaaacqvcwRcwScwTcwUcwVcwWcwXcwYcwZcxacvZcxbcxccxdcuWcqvcxecqvchBchBcdOcofcogcohcxfcsRcuZcxgcxhcxhcxicxjcxkcxlcxmcxncdOaaaaaacrPaaaaafaaaaafaafaafaaacsTaaaaafaaaaafaaaaafaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpucpucpucpucpucyocpucpucpucyocpucpucpucpucpucrRcpucpucrWcGmcxpcuecuecxpcykcxpcIBcIAcIDcuecICcuecxAcxBcIEcwwcoQcxDcoQcxEcxFcoXcoXcxGcoXcxHcnOcxIcxIcxJcwFcwGcnRbPxcvMcvNcxKcxLcxMcxNcxOcxNcxPcvNcxQcxRcrGaaaaaaaaaaaaaaaaaacqvcxScxTcxUcxVcxWcxXcxYcxZcuTcyacuScybcuTcyccuVcqvcqvcqvchBchBcdOcplcpmcplcydcpocppcrNcrNcyecyfcrNcygcomcomcomcdOaaaaaacrPaaactXctXctXctXctXaafcsTaafctXctXctXctXctXaafcrPaaaaaaaaaaaaaaaaaaaaaaaacyhaaaaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpucpucpucpucpucymcpucpucpucymcpucpucpucpucpucrRcpucpucymcpucIlcpucpucvucvvcIkcvwcvxcvycvxcvAcvBcvCcvDcvEcvBcvBcvFcvGcnPcvHcoXcvIcvJcoXcoXcvKcrncrncvLcuBcuBcnRbPxcAscvNcvNcvNcvNcvOcvNcvNcvNcvNclMcvPcrGcrGcrGcrGcrGcrGaaactFctFcvQctFctFcvRcvScvTcvUcvVcvWcvVcvXcvYcvZcwacwbcwccqvchBchBcdOcomcomcomcomcwdcppcvacwecwfcwgcrNcrNcwhcrNcwicdOaaaaaacrPaafcwjcwjcwjcwjcwjaaacsTaaacwjcwjcwjcwjcwjaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaabZSaaaaaaaaaaaacptcpucpucpucpucpucymcpucpucpucymcpucpucpucpucpucrRcpucpucymcpucvpcpucpucvpcvpcvpcpucpucwtcBzcoCcoCcoCcoCcwvcwwcoQcwxcwycspcwzcoXcwAcvJcoXcwBcnOcwCcrncwEcwFcwGcnRcwHcvMcvNcwIcwJcwKcwLcwMcwNcwOcvNcwPcwQcrGaaaaaaaaaaaaaaaaaacqvcwRcwScwTcwUcwVcwWcwXcwYcwZcxacvZcxbcxccxdcuWcqvcxecqvchBchBcdOcofcogcohcxfcsRcuZcxgcxhcxhcxicxjcxkcxlcxmcxncdOaaaaaacrPaaaaafaaaaafaafaafaaacsTaaaaafaaaaafaaaaafaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpucpucpucpucpucyocpucpucpucyocpucpucpucpucpucrRcpucpucrWcGmcxpcuecuecxpcykcxpcIBcIAcIDcuecAGcuecxAcxBcIEcwwcoQcxDcoQcxEcxFcoXcoXcxGcoXcxHcnOcxIcxIcxJcwFcwGcnRbPxcvMcvNcxKcxLcxMcxNcxOcxNcxPcvNcxQcxRcrGaaaaaaaaaaaaaaaaaacqvcxScxTcxUcxVcxWcxXcxYcxZcuTcyacuScybcuTcyccuVcqvcqvcqvcAtchBcdOcplcpmcplcydcpocppcrNcrNcyecyfcrNcygcomcomcomcdOaaaaaacrPaaactXctXctXctXctXaafcsTaafctXctXctXctXctXaafcrPaaaaaaaaaaaaaaaaaaaaaaaacyhaaaaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaaaaaaaaaaamaafaaaaaaaaacptcpucqScqPcqPcxwcxycqPcxwcqPcxxcxwcqPcqPcqPcqPcxvcqPcrXcxucqQcvpcpucpucyvcwscywcxtcyycyzcpucxscpucxqcxqcxrcyGcoQcxDcyHcnOcyIcoXcyJcoXcyKcyLcnOcnRcnRcnRcnRcnRcnRbPxcvMcvNcyMcyNcxLcyOcxLcxNcyPcvNcyQcyRcrGaaaaaaaaaaaaaaaaaacqvcuVcySctFctFcyTcyUcyVcyWctMctDctNcyXctMctDcyYcqvaaacxzchBchBcdOcplcplcplcxfcyZczacrNcrNcrNcyfcrNczbcrNczccrNczdaafaafcrPaafcvhcvicvicvicvicvjcvkcvlcvmcvmcvmcvmcvnaafcrPaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaacrPaafaafaafaamaafaafaafaafcptcpucymcpucpucpucyocpucpucpucyocpucpucpucpucpucrRcpucywcpucyncvpcpucpucylcykcuhcyjcoCczzcoCcoCcpucyiczBcxCcyGcoQcxDcoQcnOczDczEczFczGczHcoXcnOczIczJczJczKczLczMczNczOcvNcxNczPczQcxNczRczSczTcvNczUczVcrGaaaaaaaaaaaaaaaaaacqvczWcuMczXcuVczYczZcAactFcAbcAccsPcyXczWcAdcAecqvaaacypchBchBckEcdOcAfcAgcAgcAhcAicAjcAkcAlcAmcAncAocApcAqcokcAraaaaaacrPaafcwjcwjcwjcwjcwjaaacsTaafcwjcwjcwjcwjcwjaaacrPaaacyhaaaaaacyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaaaaaaaaaaamaaaaaaaaacyxcpucymcpucqKcqMcyucqMcuacqMcyucqMcuacqMcqMcqMcyqcytcyqcyscyrcuhcyBcyCcACcADcAEcAFcoCcAGcyAcoCcoCcoCcoCcoCcAIcAJcAKcAJcnOcnOcnOcnOcnOcnOcnOcnOcALczJczJcAMcANcAObPxcAPcvNcAQcARcAScATcAUcAVcAWcvNcAXcAYcrGaaaaaaaaaaaaaaaaaacqvcuQcAZcAectFcBacBbcBcctFcBdcBecBfcBgcBhcBicBjcqvaafcypchBchBcxzaaacqWaaacdOcBlcBmcBncBocBpcBmcBqcBrcBpcBmcBscdOaaaaaabZSaaaaafaaaaafaaaaafaaacsTaaaaafaaaaafaafaafaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafcyDcpucymcpucywcwscymcpucywcwscymcpucywcwscpucpucyvcpucywcwscyEczfczhczecBBcBCcBDcBEcoCcyFcBGcBHcBIcBJcBKcBLcBMcBKcBNcBKcBOcBPcBQcBRcBScBScBTcBUcBVcBWcBWcBXcBYcAObPxcBZcvNcvNcCacCbcCccCbcCacCdcvNcrGcCecrGaaaaaaaaaaaaaaaaaacqvctFcCfcuVctFcCgcChcCictFcCjcCkcqyczicCmcCncCocrHaaacypchBchBcypaaacqWaafcdOcCqcCrcCscomcCtcCucCvcomcCwcCxcCycdOaaaaaacrPaaactXctXctXctXctXaafcsTaafctXctXctXctXctXaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaaaaaaaamaaaaaaaaacyDczwczAczyczgczsczqczpczkcznczmczlczoczscpuczwczvczuczrczncztcoCcoCcoCcCzcCzcCzcCzcCzczjcCzcCBcCCcCDcCEcCFcCEcCEcCGcCEcCEcCHcCEcCDcCIcCJcCKcCLcCMcCNcCOcCPcCQcAObPwcCRcCScCTcCacCUcAVcCVcCacCWaafcCXcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaaczCcAtcAscDgaaaaaacypchBchBcypaaacqWaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafcvhcvicvicvicvicvjcvkcvlcvmcvmcvmcvmcvnaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaafaaaaamaaaaaaaaacAzcAvcAwcAxcAycABcAAcAHcAycABcAAcAHcAycABcBucBucBvcAHcAycABcBtcoCaaacDvcDwcDxcDycDzcDAcAucDCcDDcDDcDEcDFcDGcDHcDIcDJcDHcDIcDGcDKcDLcDMcDKcCBcCBcAOcDNcDOcDPcDQcAObNUcDRcDScDTcCacCbcDUcCbcCacCWaafaaaaafaaaaaaaaaaaaaaaaaaaaacqvcCZcDVcDWcDXcDXcDWcsPcDYcqvaaaaaaczCaaaaaaaaaaaaaaacBwchBchBcBwaaacqWaaacdOcDZcplcplcomcEacplcplcomcEacplcplcdOaaaaaacrPaafcwjcwjcwjcwjcwjaaacsTaaacwjcwjcwjcwjcwjaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaamaaaaaaaaaaaaaaacBxaaacnyaaacBxaaacnyaaacBxaaacnyaaaaaaaaacnzaaacnyaaacByaafaaacEicEjcEkcElcEmcEncAucEocDDcEpcEqcErcEscEtcEucEvcEwcExcEscEycEzcEAcDKaaaaafcAOcEBcECcEDaafaaabNUbPxbPxbSkcCacEEcEFcEGcCacCWaafaafaaaaaaaaaaaaaaaaaaaaaaaacqvcEHcuXcEIcEJcEJcEIcuQcEKcqvaaaaaacClcBFcBFcBFcBFcBFcbYcBAcBAcbYcrTcBzaaacdOcplcplcplcomcELcplcplcomcELcplcplcdOaacaaacrPaaaaaaaafaafaafaaaaaacEMaafaaaaaaaafaafaaaaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaqaaaaaaaaaaafcgRcCpcmtcmvcgRcCpcmtcmvcgRcCpcmtcmxcgRaaacgRcmycmtcmxcgRaaaaafaaacEicEQcERcEScEQcCAcDBcEUcDDcEVcEWcEXcEscEYcEZcFacFbcFccEscFdcFecFfcDKaaaaaacAOcFgcFhcFiaaaaaabNUbPxbPxbNUcCacFjcFjcFjcCacFkcFlaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcFmcFncuQcuQcuQcuQcuQcFocqvaaaaaaaaaaaaaaaaaaaaaaaacETchBchBcETaaacqWaafckEcdOcdOcdOcdOcdOcdOcdOcdOcFpcFpcFpckEaaaaaacrPcrPcrPcrPcrPaaaaaaaaacqIaaaaaaaaacrPcrPcrPbZScrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafcgRcDjcDkcDlcgRcDmcDncDocgRcDpcDqcDrcgRaafcgRcDscDtcDucgRaaaaafaaacEicFrcEkcEQcEQcqZcqXcFucFvcFwcFxcFycFzcFAcFBcFCcFDcFEcFFcFGcFHcFIcDKaafaaacFJcDNcFKcAOcFLaaabNUcFMbPxcFNcFOaafaafaafaaacBkaafaafaaaaaaaaaaaaaaaaaaaaaaaacrHcqvcqvcFPcFQcEIcEIcEIcFRcFPaaaaaaaaaaaaaaaaaaaaaaaacqVchBchBcqVaaacqWaaaaaaaafaaaaaaaaaaaaaaaaaaaaacFScFScFSaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafcFTaafcrPaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcgRcEbcEccEbcgRcEdcEecEdcgRcEfcEgcEfcgRaaacgRcEfcEfcEhcgRaaaaafaaacEicFUcEkcEScEQcEncrVcEocDDcFWcFXcFYcEscFZcGacGbcGacGccEscGdcGecGfcDKaaLcGgcGgcGgcGgcGgcGgcGgbNUcGhcGicGjaafaaaaaaaafcGkcDfaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGlcEJcEJcEJcEJcEJcGlaaaaaaaaaaaaaaaaaaaaaaaacqVchBchBcqVaafcrUcrTcrTcrTcrSaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaaacrPaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaamaaaaafaafaaacgRcEbcENcEbcgRcEdcEOcEdcgRcEfcEPcEfcgRaafcgRcEfcEfcEfcgRaafaafaafcGncGocGpcGqcGrcGscsacEocDDcGucGvcGwcEscGxcGycGzcGAcGBcEscGCcGDcGEcDKaaacGgcGgcGgcGgcGgcGgcGgcGFcGGcGHbNUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcCmcqxcqxcqxcCocqvaaaaaaaaaaaaaaaaaaaaaaaacqVchBchBcqVaaaaaaaafaaaaaacrYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcrPcrPcrPcrPaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaaaaaaaaaaamaaaaaaaaacyxcpucymcpucqKcqMcyucqMcuacqMcyucqMcuacqMcqMcqMcyqcytcyqcyscyrcuhcyBcyCcACcADcAEcAFcoCcrScyAcoCcoCcoCcoCcoCcAIcAJcAKcAJcnOcnOcnOcnOcnOcnOcnOcnOcALczJczJcAMcANcAObPxcAPcvNcAQcARcAScATcAUcAVcAWcvNcAXcAYcrGaaaaaaaaaaaaaaaaaacqvcuQcAZcAectFcBacBbcBcctFcBdcBecBfcBgcBhcBicBjcqvaafcypchBchBcxzaaacBkaaacdOcBlcBmcBncBocBpcBmcBqcBrcBpcBmcBscdOaaaaaabZSaaaaafaaaaafaaaaafaaacsTaaaaafaaaaafaafaafaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafcyDcpucymcpucywcwscymcpucywcwscymcpucywcwscpucpucyvcpucywcwscyEczfczhczecBBcBCcBDcBEcoCcyFcBGcBHcBIcBJcBKcBLcBMcBKcBNcBKcBOcBPcBQcBRcBScBScBTcBUcBVcBWcBWcBXcBYcAObPxcBZcvNcvNcCacCbcCccCbcCacCdcvNcrGcCecrGaaaaaaaaaaaaaaaaaacqvctFcCfcuVctFcCgcChcCictFcCjcCkcqyczicCmcCncCocrHaaacypchBchBcypaaacBkaafcdOcCqcCrcCscomcCtcCucCvcomcCwcCxcCycdOaaaaaacrPaaactXctXctXctXctXaafcsTaafctXctXctXctXctXaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaaaaaaaamaaaaaaaaacyDczwczAczyczgczsczqczpczkcznczmczlczoczscpuczwczvczuczrczncztcoCcoCcoCcCzcCzcCzcCzcCzczjcCzcCBcCCcCDcCEcCFcCEcCEcCGcCEcCEcCHcCEcCDcCIcCJcCKcCLcCMcCNcCOcCPcCQcAObPwcCRcCScCTcCacCUcAVcCVcCacCWaafcCXcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaacBkaaLcrTcDgaaaaaacypchBchBcypaaacBkaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafcvhcvicvicvicvicvjcvkcvlcvmcvmcvmcvmcvnaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaafaaaaamaaaaaaaaacAzcAvcAwcAxcAycABcAAcAHcAycABcAAcAHcAycABcBucBucBvcAHcAycABcBtcoCaaacDvcDwcDxcDycDzcDAcAucDCcDDcDDcDEcDFcDGcDHcDIcDJcDHcDIcDGcDKcDLcDMcDKcCBcCBcAOcDNcDOcDPcDQcAObNUcDRcDScDTcCacCbcDUcCbcCacCWaafaaaaafaaaaaaaaaaaaaaaaaaaaacqvcCZcDVcDWcDXcDXcDWcsPcDYcqvaaaaaacBkaaaaaaaaaaaaaaacBwchBchBcBwaaacBkaaacdOcDZcplcplcomcEacplcplcomcEacplcplcdOaaaaaacrPaafcwjcwjcwjcwjcwjaaacsTaaacwjcwjcwjcwjcwjaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaamaaaaaaaaaaaaaaacBxaaacnyaaacBxaaacnyaaacBxaaacnyaaaaaaaaacnzaaacnyaaacByaafaaacEicEjcEkcElcEmcEncAucEocDDcEpcEqcErcEscEtcEucEvcEwcExcEscEycEzcEAcDKaaaaafcAOcEBcECcEDaafaaabNUbPxbPxbSkcCacEEcEFcEGcCacCWaafaafaaaaaaaaaaaaaaaaaaaaaaaacqvcEHcuXcEIcEJcEJcEIcuQcEKcqvaaaaaacqgcnacnacnacnacnacbYcBAcBAcbYcnacrUaaacdOcplcplcplcomcELcplcplcomcELcplcplcdOaacaaacrPaaaaaaaafaafaafaaaaaacEMaafaaaaaaaafaafaaaaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaqaaaaaaaaaaafcgRcCpcmtcmvcgRcCpcmtcmvcgRcCpcmtcmxcgRaaacgRcmycmtcmxcgRaaaaafaaacEicEQcERcEScEQcCAcDBcEUcDDcEVcEWcEXcEscEYcEZcFacFbcFccEscFdcFecFfcDKaaaaaacAOcFgcFhcFiaaaaaabNUbPxbPxbNUcCacFjcFjcFjcCacFkcFlaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcFmcFncuQcuQcuQcuQcuQcFocqvaaaaaaaaaaaaaaaaaaaaaaaacETchBcrYcETaaacBkaafckEcdOcdOcdOcdOcdOcdOcdOcdOcFpcFpcFpckEaaaaaacrPcrPcrPcrPcrPaaaaaaaaacqIaaaaaaaaacrPcrPcrPbZScrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafcgRcDjcDkcDlcgRcDmcDncDocgRcDpcDqcDrcgRaafcgRcDscDtcDucgRaaaaafaaacEicFrcEkcEQcEQcqZcqXcFucFvcFwcFxcFycFzcFAcFBcFCcFDcFEcFFcFGcFHcFIcDKaafaaacFJcDNcFKcAOcFLaaabNUcFMbPxcFNcFOaafaafaafaaacBkaafaafaaaaaaaaaaaaaaaaaaaaaaaacrHcqvcqvcFPcFQcEIcEIcEIcFRcFPaaaaaaaaaaaaaaaaaaaaaaaacqVchBchBcqVaaacBkaaaaaaaafaaaaaaaaaaaaaaaaaaaaacFScFScFSaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafcFTaafcrPaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcgRcEbcEccEbcgRcEdcEecEdcgRcEfcEgcEfcgRaaacgRcEfcEfcEhcgRaaaaafaaacEicFUcEkcEScEQcEncrVcEocDDcFWcFXcFYcEscFZcGacGbcGacGccEscGdcGecGfcDKaaLcGgcGgcGgcGgcGgcGgcGgbNUcGhcGicGjaafaaaaaaaafcGkcDfaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGlcEJcEJcEJcEJcEJcGlaaaaaaaaaaaaaaaaaaaaaaaacqVchBchBcqVaafcqgcnacnacnaceCaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaaacrPaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaamaaaaafaafaaacgRcEbcENcEbcgRcEdcEOcEdcgRcEfcEPcEfcgRaafcgRcEfcEfcEfcgRaafaafaafcGncGocGpcGqcGrcGscsacEocDDcGucGvcGwcEscGxcGycGzcGAcGBcEscGCcGDcGEcDKaaacGgcGgcGgcGgcGgcGgcGgcGFcGGcGHbNUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcCmcqxcqxcqxcCocqvaaaaaaaaaaaaaaaaaaaaaaaacqVchBchBcqVaaaaaaaafaaaaaacqWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcrPcrPcrPcrPaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaacgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRaaacFqcgRcgRcgRcgRaaaaaaaaaaaacCzcCzcCzcCzcCzcsccGJcGJcGJcGJcGKcGJcGLcGMcGNcGMcGOcGJcGJcGPcGJcGJcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbcsbcsbaaaaaacqVchBchBcqVaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaacGQcGRcGRcGRcGScGTcGUcsecsfcsgcshcGZcHacHbcHccHdcHecHfcsZcsYctacHgcHicHjcHkcsVcHmcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbcsbcsbcsbcsbaaacqVchBchBcqVaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacHncHocHpaaacHncHocHpaaacHncHocHpaafaafaaaaafaafaafaafaafcHqcGRcGRcGRcGScGTcHLctfcHtctecubcHwcHxcHjcHycHzctkctZctdctccHjcHjcHjcHjcHGctbcHIcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbcsbcsbcsbcsbaaacqVchBchBcqVaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacHncHJcHpaaacHncHJcHpaaacHncHJcHpaafaafaafaafaaaaaacHKaafcGQcGRcGRcGRcGScGTcHLcHMcHNcuccudcHwcHxcHjcufcHjcugcujcvqcvocvrcHjcHjcHjcHGcHZcIacGJcIbaafaaIaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbcsbcsbcsbcsbaaacqVchBchBcqVaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncHJcHpaaacHncHJcHpaafcHncHJcHpaafaaaaaaaafaafcIcaaaaafcHqcGRcGRcGRcGScGTcwmcIecIfcwlcwqcwrcwncwocxocwocwucwDcvzcImcvtcIocIocIocwkcHZcIqcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbcsbcsbcsbcsbaaacvschBchBcvsaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacHncHJcHpaafcHncHJcHpaaacHncHJcHpaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaafcIrcGVcIscItcIucLacGZcIwcHjcIxcIycKYcLbcKWcIycKUcKVcKYcKZcKXcHZcKTcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbcsbcsbaaaaaabYfcKSchBbYfcKGcKHbYfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaaacHncHJcHpaafcHncHJcHpaaacHncHJcHpaafaaaaaaaaaaaaaafaafcIJcIKcIKcIKcIKcILcILcILcILcILcIMcILcGJcHjcHjcINcGJcGJcGJcIQcIPcIQcGJcGJcGJcIRcIScHzcGJaafaaabZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbbYfcKGcKHbYfcKQchBbYfcKRcKPcxzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcITaafaafaafcITaafaaaaafcITaafaaaaaaaaaaaaaaacIUcIVcIWcIXcIYcIZcJacJbcJccJdcJecJfcJgcJecGJcJhcHjcJicJjcJkcJlcJmcJncJocJlcJpcJjcJqcHjcJrcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbcKFcKKcKIcKJcKNcKOcKLcKMcKPcBwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaaacHncHJcHpaafcHncHJcHpaaacHncHJcHpaafaaaaaaaaaaaaaafaafcIJcIKcIKcIKcIKcILcILcILcILcILcIMcILcGJcHjcHjcINcGJcGJcGJcIQcIPcIQcGJcGJcGJcIRcIScHzcGJaafaaabZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbbYfcKGcKHbYfcKzchBbYfcKRcKPcxzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcITaafaafaafcITaafaaaaafcITaafaaaaaaaaaaaaaaacIUcIVcIWcIXcIYcIZcJacJbcJccJdcJecJfcJgcJecGJcJhcHjcJicJjcJkcJlcJmcJncJocJlcJpcJjcJqcHjcJrcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbcKFcKKcKxcKJcKNcKOcKLcKycKPcBwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcJscJtcJucJvcJwcJvcJvcJvcJwcJvcJvcJvcJwcJvcJxcJtcJtcJtcJycJzcJAcJBcJCcJDcJEcJFcJGcJHcJHcJHcJIcJJcJKcGJcHjcHjcJicJjcJkcJLcJMcJNcJOcJLcJpcJjcJqcHjcJPcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbbYfcKEcKFbYfcKGcKHbYfcKGcKHbYfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcJQaafaaaaafcJQaafaaaaafcJQaafaaaaaaaaaaaaaaacIUcIVcJRcJScJTcJUcIKcJVcJWcJecJecJXcJXcJYcGJcHjcHjcJZcJjcJkcKacJMcKbcKccKacJpcJjcKdcHjcHjcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbcsbcsbcsbcsbcsbcsbcsbcsbcKDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaafcHncKecHpaaacHncKecHpaaacHncKecHpaafaaaaaaaaaaaaaafaafcKfcIKcIKcIKcIKcKgcKhcKicKicKjcKgcKgcGJcGJcGZcGJcGJcGJcGJcGJcKkcGJcGJcGJcGJcGJcGZcGJcGJaafaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsbcsbcsbcsbcsbcsbcsbcsbcsbcsbcsbcsbcsbcsbcsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/exodus-5.dmm b/maps/exodus-5.dmm index 511f491668..6fb89c02ca 100644 --- a/maps/exodus-5.dmm +++ b/maps/exodus-5.dmm @@ -643,7 +643,7 @@ "ms" = (/obj/machinery/conveyor_switch{id = "anosample"; pixel_x = -8; pixel_y = 8},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/research_outpost/maint) "mt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; nitrogen = 0.01; oxygen = 0.01},/area/research_outpost/filtering) "mu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/research_outpost/filtering) -"mv" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/research_outpost/filtering) +"mv" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the isolation room cameras."; layer = 4; name = "Isolation Room Telescreen"; network = list("Anomaly Isolation"); pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/obj/machinery/computer/atmoscontrol/laptop{monitored_alarm_ids = list("isolation_one","isolation_two","isolation_three"); req_access = null; req_one_access = list(47,24,11)},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/research_outpost/filtering) "mw" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/computer/security/telescreen{desc = "Used for watching the isolation room cameras."; layer = 4; name = "Isolation Room Telescreen"; network = list("Anomaly Isolation"); pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/research_outpost/iso1_access) "mx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/research_outpost/iso1_access) "my" = (/obj/machinery/camera{c_tag = "Isolation Room Access One"; dir = 8; network = list("Research")},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Supply drain"},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/research_outpost/iso1_access) @@ -680,7 +680,7 @@ "nd" = (/obj/structure/plasticflaps/mining,/obj/machinery/conveyor{dir = 2; id = "anotempload"},/turf/simulated/floor/plating,/area/research_outpost/maint) "ne" = (/obj/machinery/conveyor{dir = 1; id = "anosample"},/obj/structure/plasticflaps/mining,/turf/simulated/floor/plating,/area/research_outpost/maint) "nf" = (/obj/machinery/camera{c_tag = "Research Outpost Filtering"; dir = 4; network = list("Research","SS13")},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/research_outpost/filtering) -"ng" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the isolation room cameras."; layer = 4; name = "Isolation Room Telescreen"; network = list("Anomaly Isolation"); pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/obj/machinery/computer/atmoscontrol/laptop{monitored_alarm_ids = list("isolation_one","isolation_two","isolation_three"); req_access = null; req_one_access = list(47,24,11)},/turf/simulated/floor,/area/research_outpost/filtering) +"ng" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/research_outpost/filtering) "nh" = (/obj/machinery/atmospherics/unary/heater{dir = 4},/turf/simulated/floor,/area/research_outpost/iso1_access) "ni" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/turf/simulated/floor,/area/research_outpost/iso1_access) "nj" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor,/area/research_outpost/iso1_access) @@ -1432,8 +1432,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaejzjAjBgBiJjChhjDhijEewjFjGewjHgFjIjJewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababababababaaaaaaaajKjLhZhZjMhZjNjOhZjPhZjQjRjSijjajTjUjVjWjXjYjZkakbkckdkekfkckdkdkgkhkikjkkklkmknkokpkqkrksktkukviDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaebkbkewgEkwkxkyjBkzkAhjkBbOdVkCewjHfAgFjJewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababesesesesesesababababababkDkEaaaaaakFkGhZkHkIkJkKidkLkMkNkOkPkQijkRkSkTkUkUaMaMkVkWkWkXkWkYkYkZkYlalalblaaMlcaMldleiDlflgiDlhlikuljiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewewewewewewgDhilkkwhiiKllkBkBhlgFjFewjHeWlmjJewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesesgygygygyesesesabablnlolphRaaaaaalqlrhqhrlslslslslsltlsbcbcbcijlukUlvlwlxlylzlAkWlBlClDkYlElFlGlalHlIlJlalKlLldlMldiDiDiDlNlOlPjyiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewlQdVhjlRewlSlTlUewiLewlVlWlXewdVlYcqlZeWfzcqewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababesesgygygygygygygygyesesabmambbimcaBaBaBdrdsaeaemdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvkWmwmxmykYmzmAmBlamCmDmElamFmGldmHmImJmKiDiDiDiDiDmLcTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkewlQeWdVhhiLlYkwmMkwmNdVdVmOgFdVeWeWewcqmPeWdVewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesgygygygygygygygygygymQmRmSmRaaaaaaaaaaaaaaaaaemdmTmUmVmWmXmYmZnananbnckUndnelylynfngkWnhninjkYnknlnmlannnonplanqnrldnsntntnuldnvagaBaBnwnxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewlQdVhjlRewlSlTlUewiLewlVlWlXewdVlYcqlZeWfzcqewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababesesgygygygygygygygyesesabmambbimcaBaBaBdrdsaeaemdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmungkWmwmxmykYmzmAmBlamCmDmElamFmGldmHmImJmKiDiDiDiDiDmLcTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkewlQeWdVhhiLlYkwmMkwmNdVdVmOgFdVeWeWewcqmPeWdVewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesgygygygygygygygygygymQmRmSmRaaaaaaaaaaaaaaaaaemdmTmUmVmWmXmYmZnananbnckUndnelylynfmvkWnhninjkYnknlnmlannnonplanqnrldnsntntnuldnvagaBaBnwnxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkewnynzeWeWiLeWlmggeWnAmNlmkCnBeWnCfAewkwcqlYdVewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmRgygygygygygygygygygygynDnEnFnGaaaaaaaaaaaaaaaaaemdmTmUnHnInJnKmUnLnanMijijnNnOlynPnQnRkWnSnTnUkYnVnWnXlanYnZoalaobocldodoeoeoeldofogbkaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkewnyohhhgDewoiewojokewhjewojokewhilYewmOolcqjFewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesomgygygygygygygygygygygygyonoonGaaaaaaaaaaaaaaaaaemdopmUoqmhorosotounaovijowoxoylyozoAoBoCoCoDoCoEoEoFoEoGoGoHoGoGoIoJoKldldldldoLoMabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkewewewewewewoiewoNgFhjjFfAhikzhiiNhhewojoOoPoQewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmQgygygygygygygygygygygygyonnFnGaaaaaaaaaaaaaaaeaemdoRoSoTmWoUosoVoWnaoXijoYoxoylylylylyoCoZpapboEpcpdpeoGpfpgphoGpipjoKabbkabpkplpmabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 8857365c1c5c147f70facceb77bfc9d4fa169af8 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sun, 30 Nov 2014 14:41:32 +0100 Subject: [PATCH 02/20] Fixes exploit that lets AIs use machinery even after cameras are disabled. --- code/game/dna/dna_modifier.dm | 1 + code/game/machinery/Sleeper.dm | 2 +- code/game/machinery/cryo.dm | 1 + code/game/machinery/cryopod.dm | 1 + code/game/machinery/machinery.dm | 78 +++++++++++++++------- code/modules/mob/living/silicon/ai/ai.dm | 1 + code/modules/mob/living/silicon/ai/life.dm | 2 + 7 files changed, 62 insertions(+), 24 deletions(-) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 01ef334ce7..322e65202f 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -46,6 +46,7 @@ use_power = 1 idle_power_usage = 50 active_power_usage = 300 + interact_offline = 1 var/locked = 0 var/mob/living/carbon/occupant = null var/obj/item/weapon/reagent_containers/glass/beaker = null diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index f5474c927d..9e52c28133 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -13,7 +13,7 @@ use_power = 1 idle_power_usage = 40 - + interact_offline = 1 /obj/machinery/sleep_console/process() if(stat & (NOPOWER|BROKEN)) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 3974ebdd50..32543822b9 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -7,6 +7,7 @@ density = 1 anchored = 1.0 layer = 2.8 + interact_offline = 1 var/on = 0 use_power = 1 diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index d9c40ce64e..c2a6d996a1 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -15,6 +15,7 @@ icon = 'icons/obj/Cryogenic2.dmi' icon_state = "cellconsole" circuit = "/obj/item/weapon/circuitboard/cryopodcontrol" + interact_offline = 1 var/mode = null //Used for logging people entering cryosleep and important items they are carrying. diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index fab5bbea6e..74799aa672 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -109,6 +109,7 @@ Class Procs: var/list/component_parts = list() //list of all the parts used to build it, if made from certain kinds of frames. var/uid var/manual = 0 + var/interact_offline = 0 // Can the machine be interacted with while de-powered. var/global/gl_uid = 1 /obj/machinery/drain_power(var/drain_check) @@ -197,35 +198,66 @@ Class Procs: /obj/machinery/proc/inoperable(var/additional_flags = 0) return (stat & (NOPOWER|BROKEN|additional_flags)) + /obj/machinery/Topic(href, href_list, var/nowindow = 0, var/checkrange = 1) if(..()) return 1 - if(inoperable()) + if(!can_be_used_by(usr, be_close = checkrange)) return 1 - if(usr.restrained() || usr.lying || usr.stat) - return 1 - if ( ! (istype(usr, /mob/living/carbon/human) || \ - istype(usr, /mob/living/silicon) || \ - istype(usr, /mob/living/carbon/monkey)) ) - usr << "\red You don't have the dexterity to do this!" - return 1 - - var/norange = 0 - if(istype(usr, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = usr - if(istype(H.l_hand, /obj/item/tk_grab)) - norange = 1 - else if(istype(H.r_hand, /obj/item/tk_grab)) - norange = 1 - - if(checkrange && !norange) - if ((!in_range(src, usr) || !istype(src.loc, /turf)) && !istype(usr, /mob/living/silicon)) - return 1 - - src.add_fingerprint(usr) - + add_fingerprint(usr) return 0 +/obj/machinery/proc/can_be_used_by(mob/user, be_close = 1) + if(!interact_offline && stat & (NOPOWER|BROKEN)) + return 0 + if(!user.canUseTopic(src, be_close)) + return 0 + return 1 + +//////////////////////////////////////////////////////////////////////////////////////////// + +/mob/proc/canUseTopic(atom/movable/M, be_close = 1) + return + +/mob/dead/observer/canUseTopic(atom/movable/M, be_close = 1) + if(check_rights(R_ADMIN, 0)) + return + +/mob/living/canUseTopic(atom/movable/M, be_close = 1, no_dextery = 0) + if(no_dextery) + src << "You don't have the dexterity to do this!" + return 0 + return be_close && !in_range(M, src) + +/mob/living/carbon/human/canUseTopic(atom/movable/M, be_close = 1) + if(restrained() || lying || stat || stunned || weakened) + return + if(be_close && !in_range(M, src)) + if(TK in mutations) + var/mob/living/carbon/human/H = M + if(istype(H.l_hand, /obj/item/tk_grab) || istype(H.r_hand, /obj/item/tk_grab)) + return 1 + return + if(!isturf(M.loc) && M.loc != src) + return + return 1 + +/mob/living/silicon/ai/canUseTopic(atom/movable/M) + if(stat) + return + //stop AIs from leaving windows open and using then after they lose vision + //apc_override is needed here because AIs use their own APC when powerless + if(cameranet && !cameranet.checkTurfVis(get_turf(M)) && !apc_override) + return + return 1 + +/mob/living/silicon/robot/canUseTopic(atom/movable/M) + if(stat || lockcharge || stunned || weakened) + return + return 1 + +//////////////////////////////////////////////////////////////////////////////////////////// + /obj/machinery/attack_ai(mob/user as mob) if(isrobot(user)) // For some reason attack_robot doesn't work diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 16d42b07de..e1fa6caa6c 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -72,6 +72,7 @@ var/list/ai_verbs_default = list( var/mob/living/silicon/ai/parent = null + var/apc_override = 0 //hack for letting the AI use its APC even when visionless var/camera_light_on = 0 //Defines if the AI toggled the light on the camera it's looking through. var/datum/trackable/track = null var/last_announcement = "" diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 5047f87d0d..cf11f2d211 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -166,7 +166,9 @@ src << "Receiving control information from APC." sleep(2) //bring up APC dialog + apc_override = 1 theAPC.attack_ai(src) + apc_override = 0 src:aiRestorePowerRoutine = 3 src << "Here are your current laws:" src.show_laws() From 493465453e0878cd22c0b1d897706660defa7bc4 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sun, 30 Nov 2014 15:24:04 +0100 Subject: [PATCH 03/20] Turret controls now affects all aspects of slaved turrets. --- code/_onclick/ai.dm | 4 +- code/game/machinery/bots/secbot.dm | 12 ++- code/game/machinery/machinery.dm | 10 +- code/game/machinery/portable_tag_turret.dm | 10 +- code/game/machinery/portable_turret.dm | 90 ++++++++++++------ code/game/machinery/turret_control.dm | 101 +++++++++++++++++---- maps/exodus-1.dmm | 16 ++-- maps/exodus-3.dmm | 10 +- 8 files changed, 181 insertions(+), 72 deletions(-) diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 020efa396f..0a8ea086a1 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -124,7 +124,7 @@ Topic(src, list("src"= "\ref[src]", "breaker"="1"), 1) // 1 meaning no window (consistency!) /obj/machinery/turretid/AICtrlClick() //turns off/on Turrets - Topic(src, list("src"= "\ref[src]", "toggleOn"="1", 1)) // 1 meaning no window (consistency!) + Topic(src, list("src"= "\ref[src]", "operation"="toggleon"), 1) // 1 meaning no window (consistency!) /atom/proc/AIAltClick(var/atom/A) AltClick(A) @@ -139,7 +139,7 @@ return /obj/machinery/turretid/AIAltClick() //toggles lethal on turrets - Topic(src, list("src"= "\ref[src]", "toggleLethal"="1", 1)) // 1 meaning no window (consistency!) + Topic(src, list("src"= "\ref[src]", "operation"="togglelethal"), 1) // 1 meaning no window (consistency!) /atom/proc/AIMiddleClick() return diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 84f3efb167..9e80d176c5 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -20,7 +20,8 @@ var/frustration = 0 var/idcheck = 0 //If false, all station IDs are authorized for weapons. - var/check_records = 1 //Does it check security records? + var/check_records = 0 //Does it check security records? + var/check_arrest = 1 //Does it check arrest status? var/arrest_type = 0 //If true, don't handcuff var/declare_arrests = 0 //When making an arrest, should it notify everyone wearing sechuds? @@ -97,6 +98,7 @@ radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS) if(lasercolor) shot_delay = 6 //Longer shot delay because JESUS CHRIST + check_arrest = 0 check_records = 0 //Don't actively target people set to arrest arrest_type = 1 //Don't even try to cuff req_access = list(access_maint_tunnels) @@ -150,12 +152,14 @@ Maintenance panel is [src.open ? "opened" : "closed"]"}, dat += text({"
Check for Weapon Authorization: []
Check Security Records: []
+Check Arrest Status: []
Operating Mode: []
Report Arrests: []
Auto Patrol: []"}, "[src.idcheck ? "Yes" : "No"]", "[src.check_records ? "Yes" : "No"]", +"[src.check_arrest ? "Yes" : "No"]", "[src.arrest_type ? "Detain" : "Arrest"]", "[src.declare_arrests ? "Yes" : "No"]", "[auto_patrol ? "On" : "Off"]" ) @@ -189,6 +193,8 @@ Auto Patrol: []"}, src.idcheck = !src.idcheck if("ignorerec") src.check_records = !src.check_records + if("ignorearr") + src.check_arrest = !src.check_arrest if("switchmode") src.arrest_type = !src.arrest_type if("patrol") @@ -262,7 +268,7 @@ Auto Patrol: []"}, // We re-assess human targets, before bashing their head in, in case their credentials change if(target && istype(target, /mob/living/carbon/human)) - var/threat = src.assess_perp(target, idcheck, check_records) + var/threat = src.assess_perp(target, idcheck, check_records, check_arrest) if(threat < 4) target = null @@ -649,7 +655,7 @@ Auto Patrol: []"}, continue if(istype(C, /mob/living/carbon/human)) - src.threatlevel = src.assess_perp(C, idcheck, check_records) + src.threatlevel = src.assess_perp(C, idcheck, check_records, check_arrest) else if(istype(M, /mob/living/simple_animal/hostile)) if(M.stat == DEAD) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index fab5bbea6e..845cd27716 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -318,7 +318,7 @@ Class Procs: /obj/machinery/proc/is_assess_emagged() return emagged -/obj/machinery/proc/assess_perp(mob/living/carbon/human/perp, var/auth_weapons, var/check_records) +/obj/machinery/proc/assess_perp(mob/living/carbon/human/perp, var/auth_weapons, var/check_records, var/check_arrest) var/threatcount = 0 //the integer returned if(is_assess_emagged()) @@ -345,13 +345,17 @@ Class Procs: if(perp.dna && perp.dna.mutantrace && perp.dna.mutantrace != "none") threatcount += 2 - if(check_records) + + if(check_records || check_arrest) var/perpname = perp.name if(id) perpname = id.registered_name var/datum/data/record/R = find_security_record("name", perpname) - if(R && (R.fields["criminal"] == "*Arrest*")) + if(check_records && !R) + threatcount += 4 + + if(check_arrest && R && (R.fields["criminal"] == "*Arrest*")) threatcount += 4 return threatcount diff --git a/code/game/machinery/portable_tag_turret.dm b/code/game/machinery/portable_tag_turret.dm index fa4e75bfc5..13f7032aa3 100644 --- a/code/game/machinery/portable_tag_turret.dm +++ b/code/game/machinery/portable_tag_turret.dm @@ -23,9 +23,10 @@ eprojectile = /obj/item/weapon/gun/energy/laser/bluetag lasercolor = "b" req_access = list(access_maint_tunnels, access_theatre) + check_arrest = 0 check_records = 0 - auth_weapons = 1 - stun_all = 0 + check_weapons = 1 + check_access = 0 check_anomalies = 0 shot_delay = 30 @@ -33,9 +34,10 @@ eprojectile = /obj/item/weapon/gun/energy/laser/redtag lasercolor = "r" req_access = list(access_maint_tunnels, access_theatre) + check_arrest = 0 check_records = 0 - auth_weapons = 1 - stun_all = 0 + check_weapons = 1 + check_access = 0 check_anomalies = 0 shot_delay = 30 iconholder = 1 diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index b0b8df60c8..b8e3bfd071 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -36,11 +36,12 @@ var/last_fired = 0 //1: if the turret is cooling down from a shot, 0: turret is ready to fire var/shot_delay = 15 //1.5 seconds between each shot - var/check_records = 1 //checks if it can use the security records - var/auth_weapons = 0 //checks if it can shoot people that have a weapon they aren't authorized to have - var/stun_all = 1 //if this is active, the turret shoots everything that does not meet the access requirements + var/check_arrest = 1 //checks if the perp is set to arrest + var/check_records = 1 //checks if a security record exists at all + var/check_weapons = 0 //checks if it can shoot people that have a weapon they aren't authorized to have + var/check_access = 1 //if this is active, the turret shoots everything that does not meet the access requirements var/check_anomalies = 1 //checks if it can shoot at unidentified lifeforms (ie xenos) - var/ai = 0 //if active, will shoot at anything not an AI or cyborg + var/check_synth = 0 //if active, will shoot at anything not an AI or cyborg var/ailock = 0 // AI cannot use this var/attacked = 0 //if set to 1, the turret gets pissed off and shoots at people nearby (unless they have sec access!) @@ -181,17 +182,21 @@ Neutralize All Non-Synthetics: []
"}, "[lethal ? "Enabled" : "Disabled"]", - "[ai ? "Yes" : "No"]") - if(!ai) + "[check_synth ? "Yes" : "No"]") + if(!check_synth) dat += text({"Check for Weapon Authorization: []
Check Security Records: []
+ Check Arrest Status: []
Neutralize All Non-Authorized Personnel: []
Neutralize All Unidentified Life Signs: []
"}, - "[auth_weapons ? "Yes" : "No"]", + "[check_weapons ? "Yes" : "No"]", "[check_records ? "Yes" : "No"]", - "[stun_all ? "Yes" : "No"]", + "[check_arrest ? "Yes" : "No"]", + "[check_access ? "Yes" : "No"]", "[check_anomalies ? "Yes" : "No"]" ) + else + dat += "
Swipe ID card to unlock interface
" user << browse("Automatic Portable Turret Installation[dat]", "window=autosec") onclose(user, "autosec") @@ -207,13 +212,14 @@ if(!can_use(usr)) return 1 + if(HasController()) + usr << "Turrets can only be controlled using the assigned turret controller." + return + usr.set_machine(src) if(href_list["power"]) if(anchored) //you can't turn a turret on/off if it's not anchored/secured - if(HasController()) - usr << "Turrets can only be [on ? "disabled" : "enabled"] using the assigned turret controller." - else - on = !on //toggle on/off + on = !on //toggle on/off else usr << "It has to be secured first!" @@ -223,18 +229,17 @@ switch(href_list["operation"]) //toggles customizable behavioural protocols if("togglelethal") if(!controllock) - if(HasController()) - usr << "Weapon mode can only be altered using the assigned turret controller." - else - lethal = !lethal + lethal = !lethal if("toggleai") - ai = !ai + check_synth = !check_synth if("authweapon") - auth_weapons = !auth_weapons + check_weapons = !check_weapons if("checkrecords") check_records = !check_records - if("shootall") - stun_all = !stun_all + if("checkarrests") + check_arrest = !check_arrest + if("checkaccess") + check_access = !check_access if("checkxenos") check_anomalies = !check_anomalies updateUsrDialog() @@ -350,9 +355,12 @@ if(on) //if the turret is on, the EMP no matter how severe disables the turret for a while //and scrambles its settings, with a slight chance of having an emag effect + + check_arrest = pick(0, 1) check_records = pick(0, 1) - auth_weapons = pick(0, 1) - stun_all = pick(0, 0, 0, 0, 1) //stun_all is a pretty big deal, so it's least likely to get turned on + check_weapons = pick(0, 1) + check_access = pick(0, 0, 0, 0, 1) // check_access is a pretty big deal, so it's least likely to get turned on + check_anomalies = pick(0, 1) if(prob(5)) emagged = 1 @@ -446,9 +454,11 @@ if(dst > 7) return 0 - if(ai) //If it's set to attack all non-silicons, target them! + if(check_synth) //If it's set to attack all non-silicons, target them! if(L.lying) - return TURRET_SECONDARY_TARGET + if(lethal) + return TURRET_SECONDARY_TARGET + return TURRET_NOT_TARGET return TURRET_PRIORITY_TARGET if(iscuffed(L)) // If the target is handcuffed, leave it alone @@ -460,7 +470,7 @@ return check_anomalies ? TURRET_PRIORITY_TARGET : TURRET_NOT_TARGET if(ishuman(L)) //if the target is a human, analyze threat level - if(assess_perp(L, auth_weapons, check_records) < 4) + if(assess_perp(L, check_weapons, check_records) < 4) return TURRET_NOT_TARGET //if threat level < 4, keep going if(L.lying) //if the perp is lying down, it's still a target but a less-important target @@ -512,7 +522,7 @@ /obj/machinery/porta_turret/on_assess_perp(mob/living/carbon/human/perp) - if((stun_all || attacked) && !allowed(perp)) + if((check_access || attacked) && !allowed(perp)) //if the turret has been attacked or is angry, target all non-authorized personnel, see req_access return 10 @@ -570,12 +580,32 @@ spawn(1) A.process() -/obj/machinery/porta_turret/proc/setState(var/on, var/lethal) +/datum/turret_checks + var/on + var/lethal + var/check_synth + var/check_access + var/check_records + var/check_arrest + var/check_weapons + var/check_anomalies + var/ailock + +/obj/machinery/porta_turret/proc/setState(var/datum/turret_checks/TC) if(controllock) return - src.on = on - src.lethal = lethal - src.iconholder = lethal + src.on = TC.on + src.lethal = TC.lethal + src.iconholder = TC.lethal + + check_synth = TC.check_synth + check_access = TC.check_access + check_records = TC.check_records + check_arrest = TC.check_arrest + check_weapons = TC.check_weapons + check_anomalies = TC.check_anomalies + ailock = TC.ailock + src.power_change() /* diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index b28d0a6e7f..ce2a3b73ad 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -17,7 +17,15 @@ var/lethal = 0 var/locked = 1 var/control_area //can be area name, path or nothing. - var/ailock = 0 // AI cannot use this + + var/check_arrest = 1 //checks if the perp is set to arrest + var/check_records = 1 //checks if a security record exists at all + var/check_weapons = 0 //checks if it can shoot people that have a weapon they aren't authorized to have + var/check_access = 1 //if this is active, the turret shoots everything that does not meet the access requirements + var/check_anomalies = 1 //checks if it can shoot at unidentified lifeforms (ie xenos) + var/check_synth = 0 //if active, will shoot at anything not an AI or cyborg + var/ailock = 0 // AI cannot use this + req_access = list(access_ai_upload) /obj/machinery/turretid/stun @@ -116,20 +124,34 @@ if (!istype(loc, /area)) return var/area/area = loc - var/t = "" + var/dat = "" - if(src.locked && (!istype(user, /mob/living/silicon))) - t += "
Swipe ID card to unlock interface
" + if(!locked || issilicon(user)) + dat += text({"

+ Lethal Mode: []
+ Neutralize All Non-Synthetics: []
"}, + + "[lethal ? "Enabled" : "Disabled"]", + "[check_synth ? "Yes" : "No"]") + if(!check_synth) + dat += text({"Check for Weapon Authorization: []
+ Check Security Records: []
+ Check Arrest Status: []
+ Neutralize All Non-Authorized Personnel: []
+ Neutralize All Unidentified Life Signs: []
"}, + + "[check_weapons ? "Yes" : "No"]", + "[check_records ? "Yes" : "No"]", + "[check_arrest ? "Yes" : "No"]", + "[check_access ? "Yes" : "No"]", + "[check_anomalies ? "Yes" : "No"]" ) else - if (!istype(user, /mob/living/silicon)) - t += "
Swipe ID card to lock interface
" - t += text("Turrets [] - []?
\n", src.enabled?"activated":"deactivated", src, src.enabled?"Disable":"Enable") - t += text("Currently set for [] - Change to []?
\n", src.lethal?"lethal":"stun repeatedly", src, src.lethal?"Stun repeatedly":"Lethal") + dat += "
Swipe ID card to unlock interface
" //user << browse(t, "window=turretid") //onclose(user, "turretid") - var/datum/browser/popup = new(user, "turretid", "Turret Control Panel ([area.name])", 500, 200) - popup.set_content(t) + var/datum/browser/popup = new(user, "turretid", "Turret Control Panel ([area.name])", 500, 500) + popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() @@ -140,12 +162,25 @@ if(!can_use(usr)) return 1 - if (href_list["toggleOn"]) - src.enabled = !src.enabled - src.updateTurrets() - else if (href_list["toggleLethal"]) - src.lethal = !src.lethal - src.updateTurrets() + switch(href_list["operation"]) //toggles customizable behavioural protocols + if("toggleon") + enabled = !enabled + if("togglelethal") + lethal = !lethal + if("toggleai") + check_synth = !check_synth + if("authweapon") + check_weapons = !check_weapons + if("checkrecords") + check_records = !check_records + if("checkarrest") + check_arrest = !check_arrest + if("checkaccess") + check_access = !check_access + if("checkxenos") + check_anomalies = !check_anomalies + + src.updateTurrets() if(!nowindow) attack_hand(usr) @@ -156,9 +191,20 @@ ..() /obj/machinery/turretid/proc/updateTurrets() + var/datum/turret_checks/TC = new + TC.on = enabled + TC.lethal = lethal + TC.check_synth = check_synth + TC.check_access = check_access + TC.check_records = check_records + TC.check_arrest = check_arrest + TC.check_weapons = check_weapons + TC.check_anomalies = check_anomalies + TC.ailock = ailock + if(control_area) for (var/obj/machinery/porta_turret/aTurret in get_area_all_atoms(control_area)) - aTurret.setState(enabled, lethal) + aTurret.setState(TC) src.update_icon() /obj/machinery/turretid/power_change() @@ -177,3 +223,24 @@ icon_state = "control_stun" else icon_state = "control_standby" + +/obj/machinery/turretid/emp_act(severity) + if(enabled) + //if the turret is on, the EMP no matter how severe disables the turret for a while + //and scrambles its settings, with a slight chance of having an emag effect + + check_arrest = pick(0, 1) + check_records = pick(0, 1) + check_weapons = pick(0, 1) + check_access = pick(0, 0, 0, 0, 1) // check_access is a pretty big deal, so it's least likely to get turned on + check_anomalies = pick(0, 1) + + enabled=0 + updateTurrets() + + sleep(rand(60,600)) + if(!enabled) + enabled=1 + updateTurrets() + + ..() diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index 5ee52569bd..d0a381e227 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -2984,11 +2984,11 @@ "bft" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/bridge/meeting_room) "bfu" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bfv" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"bfw" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/porta_turret{ai = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"bfw" = (/obj/machinery/porta_turret,/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bfx" = (/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bfy" = (/obj/machinery/light/small{dir = 1},/obj/machinery/power/smes/buildable{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bfz" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable/green,/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"bfA" = (/obj/machinery/porta_turret{ai = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"bfA" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/porta_turret,/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bfB" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bfC" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bfD" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{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/wood,/area/crew_quarters/captain) @@ -3302,7 +3302,7 @@ "blz" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "blA" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "blB" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 1},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"blC" = (/obj/machinery/door/window{dir = 2; name = "AI Core Door"; req_access_txt = "109"},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/flasher{id = "AI"; pixel_x = 22; pixel_y = 24},/obj/machinery/turretid/stun{name = "AI Chamber turret control"; pixel_x = 36; pixel_y = 24},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"blC" = (/obj/machinery/light/small{dir = 4},/obj/machinery/porta_turret{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "blD" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "blE" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "blF" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -30; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/device/megaphone,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -3360,12 +3360,12 @@ "bmF" = (/obj/machinery/camera{c_tag = "Central Hallway West"; dir = 8},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/central_one) "bmG" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/command) "bmH" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/command{name = "Conference Room"; req_access = null; req_access_txt = "19"},/obj/structure/cable/green{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,/area/maintenance/substation/command) -"bmI" = (/obj/machinery/light/small{dir = 8},/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"bmI" = (/obj/machinery/light/small{dir = 8},/obj/machinery/porta_turret{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bmJ" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai) "bmK" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bmL" = (/obj/machinery/ai_slipper{icon_state = "motion0"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai) "bmM" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai) -"bmN" = (/obj/machinery/light/small{dir = 4},/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"bmN" = (/obj/machinery/door/window{dir = 2; name = "AI Core Door"; req_access_txt = "109"},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/flasher{id = "AI"; pixel_x = 22; pixel_y = 24},/obj/machinery/turretid/stun{check_synth = 1; name = "AI Chamber turret control"; pixel_x = 36; pixel_y = 24},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bmO" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Captain's Desk"; departmentType = 5; name = "Captain RC"; pixel_x = -30; pixel_y = 0},/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bmP" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 4},/obj/effect/landmark/start{name = "Captain"},/obj/machinery/door_control{desc = "A remote control-switch for the office door."; id = "captaindoor"; name = "Office Door Control"; normaldoorcontrol = 1; pixel_x = 15; pixel_y = 30; req_access_txt = "20"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door_control{desc = "A remote control-switch for the starboard bridge doors."; id = "sbridgedoor"; name = "Bridge Door Control"; normaldoorcontrol = 1; pixel_x = 15; pixel_y = 39; req_access_txt = "20"},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bmQ" = (/obj/machinery/computer/communications,/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -7458,12 +7458,12 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaT aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaZSaZTaZUbjnaZWaZXaZYaZZbaababbacbadbaebafaYObagbahbaibajaTSbakbalbambanbaobapbaqbarbarbarbasbataTSbaubavbawbaxbaybazbaAbaBbajbaCaUmbaDbaEbaFbaGbaHbaIaMkbaJbaKaMkbaLbaMbaNbaObaPbaQbaRbaQbaSbaTbaUbaVbaWbaXbaYbaZbbabbbbbcbaQbbdbbebbfbbgbbhbbibbjbbkbblbbmbbnaJlaUDaWdbboaWfaSSbbpbbqbbrbbsaXOaWfaSSaXTbbtaULaXVbbubbvbbwaUQaUQaYabbxbbybbzbbAbbBaYgaWBbbCaWDbbDaZzbbEbbFbbFbbGbbHbbIaRLaRLaRLaRLaRLaRLaRLaGGbbJaYoaYpaToaYqaYpaIobbKaGGbbLaVoaYuaVoaZNbbMbbNbbOaafbbPaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbbQbbRbbScqObbUaZXbaabaabaabaabaabbVbaabbWaYObbXbbYbaibbZbbZbbZbbZbcabbZbcbaTUbccbcdbcebcebcfbcgaTSaXebchbcibcjbckbclbcmbcnbcobcobcpbcpbcpbcpbcpbcqaMbbcrbcsbctbcubcvbcwbcxbcyaUpbczbcAbcBbcCaUpaUpaUpaUpaUpbcDaUpaUpaUpbcEbcFbcGbczaUpbcybcxbcHbcIbcJbcKbcLaRpaWcaSSaSSaSSaSSaSSaGpbcMaSSbcNaSSbcObcObcObcObcPbcQbcRbcSaUQaUQaUQbcTbcUaTebcVbcWbcXaYgaWBaYhaWDbcYaZzbcZbdabdbbdcbddbdebddbddbddbddbddbdfbdgbdhbdibdjbdkbdlbdmbdnbdobdpbdqbdraVoaYubdsaZNaVobdtbbOaafaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbdubdvaZUbdwbdxaZXaYHbdybaababbdzbbVbaabdAaYObdBbdCbaibbZbdDbdEbdFbdGbbZbdHbdIbdJaTSbdKbdLbdMbdNaTSaXebdObdPbdPbdQbdPbdPbdPbdPbdRbdSbdSbdSbdTbdSbdUaMbbdVbdWbdXaJeaJeaJebdYbdYbdYbdZbeabdZbdYbebbebbebbebbebbecbebbebbebbedbedbeebedaUpaUpaUpaJiaJiaJibcKbcLaRpaJlbefbegaDmbehaSSbeibcMbejbekbelbcObcObembenaZzaZzaZzbeobepbepbepaZzaZzaZzbeqberbesbetaWBaYhaYhbeuaZzbevbewbexaZzbeybezbeAaZEbeBbeCbeDbeEaONaGGaIobeFbeGbeHbeFbeIaIoaIoaGGbeJaVoaYuaVoaZNbeKbeLbbOaafbeMaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbeNbeObePbeQbeRbeSaYHbeTbeUaYHbdzbbVbeVbeWaYObeXbeYbaibbZbbZbbZbeZbfabbZbfbbdIbfcaTSbdKbdLbdMbfdaTSaXebdObdPbfebffbfgbfgbfhbdPbfibfjbfkbflbfmbfmbfmaMbaMkbcsbctaJebfnbfobfpbfqbfrbfsbftbfubdYbebbfvbfwbfxbfybfzbfAbfBbebbedbfCbfDbfEbfFbfGbfHbfIbfJaJibfKbfLbfMaJlaZzaZzaZzaZzbfNbfObfPbfQaZzaZzbfRaZzaZzaZzaZzbfSbfTbfUbfVbfVbfVbfWbfXaZzbfYbfZbgabgbbgcbgcbgcbgdaZzbevbewbgeaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzbgfbggbghbgibgjbgfbggaZzaRZbgkaVoaYuaVoaZNaZObglbgmaWTaZRaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbeNbeObePbeQbeRbeSaYHbeTbeUaYHbdzbbVbeVbeWaYObeXbeYbaibbZbbZbbZbeZbfabbZbfbbdIbfcaTSbdKbdLbdMbfdaTSaXebdObdPbfebffbfgbfgbfhbdPbfibfjbfkbflbfmbfmbfmaMbaMkbcsbctaJebfnbfobfpbfqbfrbfsbftbfubdYbebbfvbfAbfxbfybfzbfwbfBbebbedbfCbfDbfEbfFbfGbfHbfIbfJaJibfKbfLbfMaJlaZzaZzaZzaZzbfNbfObfPbfQaZzaZzbfRaZzaZzaZzaZzbfSbfTbfUbfVbfVbfVbfWbfXaZzbfYbfZbgabgbbgcbgcbgcbgdaZzbevbewbgeaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzbgfbggbghbgibgjbgfbggaZzaRZbgkaVoaYuaVoaZNaZObglbgmaWTaZRaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaabgnbgobgpbgqaZUbgrbgrbgrbgrbgrbgrbgsbgtbgraYOaYOaYOaYOaYObguaYOaYOaYObgvbgvbgwbbZbdDbgxbeZbgybbZbgzbgAbgzaTSbdKbdLbdMbfdaTSaXebdObdPbgBbgCbgDbfgbgDbdPbfibgEbgFbgGbgHbgIbgJaMbbgKbgLbctbgMbgNbgObgPbgQbgQbgRbgSbgTbdYbebbgUbgVbgWbgXbfvbgYbgZbebbedbhabhbbhcbhdbhebhfbhgbhhaJibhibhjaRpbhkbhlbhmbewbewbhnbewbhobewbewbewbewbhpbewbewbewbewbhqbewbewbewbewbewbewbhmbewbewbhrbhsbhsbhtbhsbhsbhubhvbewbhqbhwbhxbhpbewbhybewbewbewbhzbhAbhBbhCbewbhDbewbhEbewbewbhFbhGbhHaVoaYuaVobhIbhJbhKbhLbhMbhNaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaaaafbhPaYDbhQbhRbhSbhTbhTbhTbhTbhTbhUbhVbhWbhXbhYbhZbgwbbZbbZbbZbiabfabbZaTSaTSaTSaTSbdKbibbicbidaTSbiebifbdPbigbihbiibgDbijbdPbfibikbgFbgGbgGbgGbilaMbbimaSzbctbinbiobipbiqbirbisbitbiubivbdYbebbiwbixbiybiybiybgYbizbebbedbiAbiBbiCbiDbiEbiFbiGbiHaJibiIbiJbiKbiLbiMbiNbiObiObiPbiQbiRbiSbiSbiSbiTbiSbiSbiSbiSbiSbiUbiVbiVbiVbiWbiObiObiNbiObiObiXbiVbiVbiYbiSbiZbjabjbbiSbjcbiObiObiObiObiObiObiObiObiObiObiObiObiObjdbiTbjebiSbjfbjgbjhbjibjibjjbjkaZNaWRbjlaWTaWTaWUaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaabhObhObhObhObhObhObhObhObhObhObhOaZSaZTbjmbjnbjobgrbjpbjpbjqbjpbjpbjpbjrbajbajbajbajbaibbZbdDbjsbjtbgybbZbjubjvbjuaTSaTSaTSaTSbjwaTSbjxbdObdPbjybjzbgDbjAbjBbdPbfibfmbjCbgGbgGbgGbjDaMbbjEaSzbctbjFbjGbgObjHbjIbjJbjKbjLbjMbdYbjNbjObjPbiybjQbiybgVbjRbjSbedbjTbjUbjVbjWbjWbjWbjXbjYaJibjZbkabkbbkcbkdbkebbFbkfbkgbkhbkibkjbkkbklbkmbknbknbkobewbewbewbewbewbkpbkqbkrbewbksbktbkubkvbewbkpbkwbkxbkybhFbewbewbkzbewbewbkAbkBbewbkpbewbewbewbewbewbewbewbewbewbhqbewbewbhFbkCbkDbkEbkFbkGbkHbkIbkJaafaaaaafaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaabhObhObhObhObhObhObhObhObhObhObhObkKbkLbkMbkNbkObgrbkPbkQbkRbkRbkSbkTbkUbkVbkWbkWbkXbkYbbZbbZbbZbeZbkZbbZbajbajbajbajblaaXeaXeblbblcbldbleblfblgblhblibljblkbdPbllbfmblmbgGblnbgGbloblpblqaSzbctaJeblrblsbltblublvblwblxblybdYbebblzblAblBblCblDblAblEbebbedbedblFblGblHblIbiCblJblKaJiblLblMblNaJiblOblOblOblOblOblOaZzaZzblPblQblRblSblQblPaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzblTaZzaZzaZzaZzaZzaZzblUaZzbewbewblVblWblWblOblOblOblOblOblXblYblYblZblYbewblYblZbmablYbmbblObmcbmcbmcbmdaRZbmeaRZaRZaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaabhObhObhObhObhObhObhObhObhObhObhObdubdvbjmbjnbmfbgrbmgbjpbmhbmibjpbjpbjpaVAbmjbmkbmkbmlbbZbdDbmmbeZbmnbbZbmobmpbmqbmrbmsbmtbmtbmubmtbmtbmvbdPbmwbmxbfgbmybmzblfbmAbfmbmBbgGbgGbmCbmDbmEblqaSzbmFaJebmGbmGbmGbmGbmGbmGbmHbmGbdYbebbmIbmJbmKbmLbmKbmMbmNbebbedbedbmObmPbmQbmRbiCbiGbmSaJibcKaRqaRpaJibmTbmUbmVbmWbmXbmYbmZbnabnbbncbndbnebncbnfbngbnhbnibnjbnkbnlbnmbnnbnobnpbnqbnrbnsbntbntbnubnvbnwblOblObnxblObnybnyblObnzbnAbnBblObnCbnDbnCblOblXblYbmbblObnEbnFbnEblObnGbnHbnIbnJbnKbnLbnMaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaabhObhObhObhObhObhObhObhObhObhObhObkKbkLbkMbkNbkObgrbkPbkQbkRbkRbkSbkTbkUbkVbkWbkWbkXbkYbbZbbZbbZbeZbkZbbZbajbajbajbajblaaXeaXeblbblcbldbleblfblgblhblibljblkbdPbllbfmblmbgGblnbgGbloblpblqaSzbctaJeblrblsbltblublvblwblxblybdYbebblzblAblBbmNblDblAblEbebbedbedblFblGblHblIbiCblJblKaJiblLblMblNaJiblOblOblOblOblOblOaZzaZzblPblQblRblSblQblPaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzblTaZzaZzaZzaZzaZzaZzblUaZzbewbewblVblWblWblOblOblOblOblOblXblYblYblZblYbewblYblZbmablYbmbblObmcbmcbmcbmdaRZbmeaRZaRZaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaabhObhObhObhObhObhObhObhObhObhObhObdubdvbjmbjnbmfbgrbmgbjpbmhbmibjpbjpbjpaVAbmjbmkbmkbmlbbZbdDbmmbeZbmnbbZbmobmpbmqbmrbmsbmtbmtbmubmtbmtbmvbdPbmwbmxbfgbmybmzblfbmAbfmbmBbgGbgGbmCbmDbmEblqaSzbmFaJebmGbmGbmGbmGbmGbmGbmHbmGbdYbebbmIbmJbmKbmLbmKbmMblCbebbedbedbmObmPbmQbmRbiCbiGbmSaJibcKaRqaRpaJibmTbmUbmVbmWbmXbmYbmZbnabnbbncbndbnebncbnfbngbnhbnibnjbnkbnlbnmbnnbnobnpbnqbnrbnsbntbntbnubnvbnwblOblObnxblObnybnyblObnzbnAbnBblObnCbnDbnCblOblXblYbmbblObnEbnFbnEblObnGbnHbnIbnJbnKbnLbnMaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaabhObhObhObhObhObhObhObhObhObhOaaabnNbnObnPbeQbnQbgrbnRbjpbnSbnTbnUbnVbjpbnWbnXbnYbnZbmlbbZbbZbbZbbZbbZbbZboabobbocbodboebdPbdPbdPbdPbdPbdPbdPbofbdPbdPbdPbogbdPbohboibojbgGbgGbgGbokblpblqaSzbolaJebombonboobopboqborbosbotaafbebboubovbowboxboybozboAbebaafbedboBboCboDboEbiCbiGboFaJiboGboHaRpboIboJboKboLboMboNboOboPboQboRboRboSboTboUboUboVboWboXboYboZbpabpbbnnbpcbpdbpebpfbpgbphbpfbpibnvbnwbpjbpkbplbpmbpnbpobppbpqbprbpqbpsbptbpubpvblOaZzbpwbpxblObpybpzbpAbpBbpCbpDbnIbpEbpFbpGbnMaaaaaaaaaaacaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaabgnbgobgpbgqbdvbpHbpHbpHbpIbpHbpJaZVbpKbpLbgrbpMbpNbpObpPbpQbpRbpSaYSaXeaXeaXebpTbkWbpUbkWbkWbkWbkWbpVbpWbpWbpXbpYbdPbpZbqabqbbqcbqdbqebqfbqgbqhbqibqjbqkbmAbqlbojbgGbgGbqmbfmaMbblqbqnbqobqpbqqbqrbqrbqsbqtbqubqvbqwbqxbebbebbebbebbqybebbebbebbebaafbedbqzboCbqAbqBbqCbqDbqEaJibqFaRqaRpaJibqGbqHbqIbqJbqKbqLbqMbqNboUboUboUboUboUboUbqObqPbqQboYbqRbqSbqTbnnbqUbqVbqWbpfbpgbphbpfbqXbnvbnwbpjbqYbqZbqZbrabrbbrcbrdbrdbrdbrebrdbrfbrgbrhbribrjbrkbnIbrlbpCbrmbrnbrobrpbnIbrqbpFbrrbnMaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaabrsbrtbrubrvbrwbrxbrxbrybrzbrAbgrbrBbrCbpPbrDbjpbjpbjpbajbrEbrFbrGbrHbrGbrGbrGbrHbrGbajbajbdPbdPbdPbrIbdPbrJbrJbrJbrJbrJbrJbqfbrKbrLbrMbrNbrObrPbrQbrRbrSbrTbrUbrVbrWbrXbrYbrZbsabsbbscbsdbsebsfbsgbosbotbshbsibsjbskbslbsmbsnbskbsobsiaafbedbspbsqbspbedbedbedbsraJibssaRqaRpboIboJboKbstbsubsvbqLbswbqNbsxbsybszbsAbsBbsCbqObsDbnibsEbsFbsGbsHbnnbsIbqVbpebpfbpgbphbpfbpibnvbnwbpjbsJbsKbsLbsMbplbsNbsObsPbsQbsRbsSbsTbsUbrhbsVbsWbsXbnIbsYbsZbtabtbbtcbtdbnIbrqbpFbtebnMaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/exodus-3.dmm b/maps/exodus-3.dmm index cc866888a0..e39cf04ce0 100644 --- a/maps/exodus-3.dmm +++ b/maps/exodus-3.dmm @@ -199,7 +199,7 @@ "dQ" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/window/eastleft{req_access_txt = "61"},/obj/machinery/door/window/westleft{req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcommsat/chamber) "dR" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcommsat/chamber) "dS" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge"; req_access_txt = "61"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcommsat/computer) -"dT" = (/obj/machinery/porta_turret/stationary{ai = 1; ailock = 1},/turf/simulated/floor/plating/airless,/area/turret_protected/tcomsat) +"dT" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor/plating/airless,/area/turret_protected/tcomsat) "dU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) "dV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/tcommsat/chamber) "dW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber) @@ -297,13 +297,13 @@ "fK" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomsat) "fL" = (/obj/structure/window/reinforced,/obj/structure/lattice,/obj/machinery/light{dir = 1},/turf/space,/area/turret_protected/tcomsat) "fM" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer) -"fN" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = -32; pixel_y = 0},/obj/machinery/porta_turret{ai = 1; ailock = 1; dir = 6},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/turret_protected/tcomfoyer) +"fN" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = -32; pixel_y = 0},/obj/machinery/porta_turret{dir = 6},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/turret_protected/tcomfoyer) "fO" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/turret_protected/tcomfoyer) "fP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/turret_protected/tcomfoyer) -"fQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/camera{c_tag = "Telecoms Foyer"; dir = 2; network = list("Tcomsat")},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/turretid/lethal{ailock = 1; control_area = "\improper Telecoms Satellite"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms lethal turret control"; pixel_y = 29; req_access = list(61)},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/turret_protected/tcomfoyer) +"fQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/camera{c_tag = "Telecoms Foyer"; dir = 2; network = list("Tcomsat")},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/turretid/lethal{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Satellite"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms lethal turret control"; pixel_y = 29; req_access = list(61)},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/turret_protected/tcomfoyer) "fR" = (/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/turret_protected/tcomfoyer) "fS" = (/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/turret_protected/tcomfoyer) -"fT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/obj/machinery/porta_turret{ai = 1; ailock = 1; dir = 10},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/turret_protected/tcomfoyer) +"fT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/obj/machinery/porta_turret{dir = 10},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/turret_protected/tcomfoyer) "fU" = (/obj/structure/window/reinforced,/obj/machinery/light{dir = 1},/turf/space,/area/turret_protected/tcomsat) "fV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomsat) "fW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) @@ -331,7 +331,7 @@ "gs" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) "gt" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor,/area/tcommsat/entrance) "gu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/tcommsat/entrance) -"gv" = (/obj/machinery/turretid/stun{ailock = 1; control_area = "\improper Telecoms Foyer"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms Foyer turret control"; pixel_y = 29; req_access = list(61)},/turf/simulated/floor,/area/tcommsat/entrance) +"gv" = (/obj/machinery/turretid/stun{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Foyer"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms Foyer turret control"; pixel_y = 29; req_access = list(61)},/turf/simulated/floor,/area/tcommsat/entrance) "gw" = (/turf/simulated/floor,/area/tcommsat/entrance) "gx" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/computer/power_monitor{name = "telecoms power monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/sensor{long_range = 1; name = "Powernet Sensor - Telecommunications Grid"; name_tag = "Telecommunications Grid"},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) "gy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/entrance) From e7fdf58f7f919d00481a78246c122b6daaa168e5 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sun, 30 Nov 2014 16:00:13 +0100 Subject: [PATCH 04/20] Fixes #7191 Corrects broken id-tag. --- maps/exodus-1.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index 5ee52569bd..01affdddc4 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -2636,7 +2636,7 @@ "aYJ" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/vacantoffice) "aYK" = (/obj/structure/table,/obj/structure/window/basic{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/vacantoffice) "aYL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/security/vacantoffice) -"aYM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door_control{id = "office_shutters"; name = "Office Shutters"; pixel_x = -8; pixel_y = 22; throw_range = 15},/obj/machinery/light_switch{pixel_x = -8; pixel_y = 32},/turf/simulated/floor,/area/security/vacantoffice) +"aYM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door_control{id = "office_shutter"; name = "Office Shutters"; pixel_x = -8; pixel_y = 22; throw_range = 15},/obj/machinery/light_switch{pixel_x = -8; pixel_y = 32},/turf/simulated/floor,/area/security/vacantoffice) "aYN" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/security/vacantoffice) "aYO" = (/turf/simulated/wall,/area/security/vacantoffice) "aYP" = (/obj/structure/closet/crate,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/locker) From 957ff8314d67a8bd3cdb5a5ce21c9476bd168c97 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sun, 30 Nov 2014 16:45:52 +0100 Subject: [PATCH 05/20] Cargo can now order empty blood packs. --- code/datums/supplypacks.dm | 10 ++++++++++ .../reagents/reagent_containers/blood_pack.dm | 14 ++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index c11ca32bca..d46b396bc8 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -380,6 +380,16 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Medical crate" group = "Medical" +/datum/supply_packs/medical + name = "BloodPack crate" + contains = list(/obj/item/weapon/storage/box/bloodpacks, + /obj/item/weapon/storage/box/bloodpacks, + /obj/item/weapon/storage/box/bloodpacks) + cost = 10 + containertype = /obj/structure/closet/crate/medical + containername = "BloodPack crate" + group = "Medical" + /datum/supply_packs/bodybag name = "Body bag crate" contains = list(/obj/item/weapon/storage/box/bodybags, diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 445fa86463..4f4981b4d8 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -1,3 +1,17 @@ +/obj/item/weapon/storage/box/bloodpacks + name = "blood packs bags" + desc = "This box contains blood packs." + icon_state = "sterile" + New() + ..() + new /obj/item/weapon/reagent_containers/blood/empty(src) + new /obj/item/weapon/reagent_containers/blood/empty(src) + new /obj/item/weapon/reagent_containers/blood/empty(src) + new /obj/item/weapon/reagent_containers/blood/empty(src) + new /obj/item/weapon/reagent_containers/blood/empty(src) + new /obj/item/weapon/reagent_containers/blood/empty(src) + new /obj/item/weapon/reagent_containers/blood/empty(src) + /obj/item/weapon/reagent_containers/blood name = "BloodPack" desc = "Contains blood used for transfusion." From 8f342ada745961bc787be3acdad3258c558bcc94 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 1 Dec 2014 08:40:58 +0100 Subject: [PATCH 06/20] Constructable blood packs. Can now make your own blood packs from plastic. --- code/game/objects/items/stacks/sheets/mineral.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index e6e3cff050..530c9b5b88 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -46,6 +46,7 @@ var/global/list/datum/stack_recipe/plastic_recipes = list ( \ new/datum/stack_recipe("plastic spoon", /obj/item/weapon/kitchen/utensil/pspoon, 1, on_floor = 1), \ new/datum/stack_recipe("plastic knife", /obj/item/weapon/kitchen/utensil/pknife, 1, on_floor = 1), \ new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1), \ + new/datum/stack_recipe("blood pack", /obj/item/weapon/reagent_containers/blood/empty, 4, on_floor = 0), \ ) var/global/list/datum/stack_recipe/iron_recipes = list ( \ From 117ca6a1356aee9d4b25e96fba63ba46a01be2b1 Mon Sep 17 00:00:00 2001 From: Mloc-Argent Date: Thu, 27 Nov 2014 21:33:55 +0000 Subject: [PATCH 07/20] refactor 'dir = ' into 'set_dir()' This should have little/no gameplay effect right now, just paving the way for directional lights. Replaced handle_rotation() on buckly things with this. Signed-off-by: Mloc-Argent --- .../binary_devices/binary_atmos_base.dm | 2 +- .../components/binary_devices/circulator.dm | 4 +- .../components/binary_devices/pipeturbine.dm | 8 +- .../components/portables_connector.dm | 2 +- .../components/trinary_devices/filter.dm | 2 +- .../components/trinary_devices/mixer.dm | 4 +- .../trinary_devices/trinary_base.dm | 2 +- code/ATMOSPHERICS/components/tvalve.dm | 2 +- .../components/unary/oxygen_generator.dm | 2 +- .../components/unary/unary_base.dm | 2 +- code/ATMOSPHERICS/components/valve.dm | 6 +- code/ATMOSPHERICS/mainspipe.dm | 20 ++-- code/ATMOSPHERICS/pipes.dm | 20 ++-- code/FEA/FEA_fire.dm | 2 +- code/TriDimension/Pipes.dm | 6 +- code/TriDimension/Structures.dm | 4 +- .../Cael_Aislinn/Jungle/jungle_temple.dm | 2 +- .../Cael_Aislinn/Jungle/misc_helpers.dm | 2 +- .../Rust/fuel_assembly_port_construction.dm | 2 +- .../Rust/fuel_compressor_construction.dm | 2 +- .../Cael_Aislinn/Rust/fuel_injector.dm | 4 +- .../Cael_Aislinn/Rust/gyrotron.dm | 4 +- .../Cael_Aislinn/Rust/radiation.dm | 2 +- .../Cael_Aislinn/Supermatter/Laser2.dm | 4 +- .../Supermatter/ZeroPointLaser.dm | 4 +- .../Cael_Aislinn/meteor_battery.dm | 4 +- code/WorkInProgress/Cael_Aislinn/sculpture.dm | 6 +- .../Chinsky/overmap/ships/engines/thermal.dm | 2 +- code/WorkInProgress/Cib/amorph/amorph_hud.dm | 24 ++--- code/WorkInProgress/Tastyfish/livestock.dm | 10 +- .../Tastyfish/wallmount_frame.dm | 4 +- code/WorkInProgress/buildmode.dm | 22 ++--- code/ZAS/Fire.dm | 2 +- code/__HELPERS/unsorted.dm | 6 +- code/_onclick/click.dm | 6 +- code/_onclick/hud/alien_larva.dm | 2 +- code/_onclick/hud/human.dm | 16 +-- code/_onclick/hud/monkey.dm | 24 ++--- code/_onclick/hud/robot.dm | 18 ++-- code/_onclick/oldcode.dm | 16 +-- code/_onclick/telekinesis.dm | 2 +- code/datums/datumvars.dm | 4 +- code/datums/spells/dumbfire.dm | 2 +- code/datums/spells/projectile.dm | 4 +- code/game/atoms.dm | 7 +- code/game/atoms_movable.dm | 10 -- code/game/gamemodes/blob/theblob.dm | 4 +- code/game/gamemodes/nuclear/pinpointer.dm | 10 +- code/game/jobs/job/civilian_chaplain.dm | 8 +- code/game/jobs/job_controller.dm | 4 +- code/game/machinery/alarm.dm | 4 +- code/game/machinery/bots/bots.dm | 2 +- code/game/machinery/bots/mulebot.dm | 4 +- code/game/machinery/bots/secbot.dm | 2 +- code/game/machinery/camera/camera.dm | 8 +- code/game/machinery/constructable_frame.dm | 2 +- code/game/machinery/doors/airlock.dm | 2 +- code/game/machinery/doors/door.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 2 +- code/game/machinery/machinery.dm | 2 +- code/game/machinery/pipe/construction.dm | 98 +++++++++---------- code/game/machinery/portable_turret.dm | 2 +- code/game/machinery/teleporter.dm | 4 +- code/game/machinery/turrets.dm | 4 +- .../mecha/equipment/tools/unused_tools.dm | 2 +- code/game/mecha/mecha.dm | 8 +- code/game/mecha/medical/medical.dm | 2 +- code/game/mecha/working/hoverpod.dm | 2 +- code/game/objects/effects/biomass_rift.dm | 14 +-- code/game/objects/effects/chemsmoke.dm | 2 +- .../objects/effects/decals/Cleanable/fuel.dm | 2 +- code/game/objects/effects/effect_system.dm | 4 +- code/game/objects/effects/glowshroom.dm | 2 +- code/game/objects/effects/step_triggers.dm | 2 +- .../objects/items/devices/chameleonproj.dm | 2 +- .../objects/items/devices/floor_painter.dm | 12 +-- code/game/objects/items/shooting_range.dm | 2 +- code/game/objects/items/stacks/stack.dm | 2 +- .../objects/items/weapons/grenades/grenade.dm | 2 +- code/game/objects/items/weapons/twohanded.dm | 2 +- code/game/objects/structures/electricchair.dm | 2 +- code/game/objects/structures/janicart.dm | 25 ++--- code/game/objects/structures/morgue.dm | 2 +- .../stool_bed_chair_nest/alien_nests.dm | 2 +- .../structures/stool_bed_chair_nest/bed.dm | 5 +- .../structures/stool_bed_chair_nest/chairs.dm | 19 ++-- .../stool_bed_chair_nest/wheelchair.dm | 17 ++-- code/game/objects/structures/tables_racks.dm | 6 +- code/game/objects/structures/transit_tubes.dm | 10 +- .../objects/structures/windoor_assembly.dm | 10 +- code/game/objects/structures/window.dm | 8 +- code/modules/admin/topic.dm | 2 +- code/modules/assembly/infrared.dm | 10 +- code/modules/awaymissions/gateway.dm | 6 +- code/modules/clothing/clothing.dm | 2 +- code/modules/flufftext/Hallucination.dm | 2 +- code/modules/mining/drilling/drill.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 4 +- code/modules/mob/living/carbon/monkey/npc.dm | 2 +- .../living/simple_animal/friendly/corgi.dm | 16 +-- .../mob/living/simple_animal/hostile/bear.dm | 2 +- code/modules/mob/living/simple_animal/worm.dm | 4 +- code/modules/mob/mob.dm | 5 +- code/modules/mob/mob_movement.dm | 19 +++- code/modules/mob/new_player/new_player.dm | 2 +- code/modules/organs/organ_external.dm | 2 +- code/modules/power/apc.dm | 6 +- code/modules/power/generator.dm | 4 +- code/modules/power/singularity/emitter.dm | 4 +- .../power/singularity/field_generator.dm | 2 +- .../particle_accelerator/particle.dm | 2 +- .../particle_accelerator.dm | 8 +- .../particle_accelerator/particle_control.dm | 2 +- .../particle_accelerator/particle_emitter.dm | 2 +- code/modules/power/smes.dm | 2 +- code/modules/power/solar.dm | 2 +- code/modules/power/tracker.dm | 2 +- code/modules/projectiles/ammunition.dm | 2 +- code/modules/projectiles/targeting.dm | 4 +- code/modules/recycling/conveyor2.dm | 2 +- .../recycling/disposal-construction.dm | 10 +- code/modules/recycling/disposal.dm | 12 +-- .../tools/suspension_generator.dm | 4 +- .../xenoarchaeology/tools/tools_locater.dm | 2 +- code/modules/shieldgen/emergency_shield.dm | 2 +- code/modules/shieldgen/sheldwallgen.dm | 2 +- code/modules/shieldgen/shield_capacitor.dm | 2 +- code/modules/vehicles/train.dm | 2 +- code/modules/vehicles/vehicle.dm | 11 +-- code/unused/Agouri_stuff.dm | 10 +- code/unused/_debug.dm | 2 +- code/unused/assemblies.dm | 6 +- code/unused/asteroiddevice.dm | 4 +- code/unused/conveyor.dm | 4 +- code/unused/hivebot/hud.dm | 20 ++-- code/unused/mining/rail_unused.dm | 60 ++++++------ code/unused/new_year.dm | 2 +- code/unused/optics/beam.dm | 2 +- code/unused/optics/laser-pointer.dm | 2 +- code/unused/optics/mirror.dm | 18 ++-- code/unused/spacecraft/shipcore.dm | 12 +-- code/unused/vehicle.dm | 8 +- 143 files changed, 480 insertions(+), 480 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index 649972297a..aed8b2dc07 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -1,5 +1,5 @@ obj/machinery/atmospherics/binary - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH|NORTH use_power = 1 diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index 0ac8ab6299..cb9ecfbdc5 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -111,7 +111,7 @@ if (usr.stat || usr.restrained() || anchored) return - src.dir = turn(src.dir, 90) + src.set_dir(turn(src.dir, 90)) desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." @@ -123,5 +123,5 @@ if (usr.stat || usr.restrained() || anchored) return - src.dir = turn(src.dir, -90) + src.set_dir(turn(src.dir, -90)) desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm index 7f0984efd7..6923b6d31e 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm @@ -129,7 +129,7 @@ if (usr.stat || usr.restrained() || anchored) return - src.dir = turn(src.dir, -90) + src.set_dir(turn(src.dir, -90)) verb/rotate_anticlockwise() @@ -140,7 +140,7 @@ if (usr.stat || usr.restrained() || anchored) return - src.dir = turn(src.dir, 90) + src.set_dir(turn(src.dir, 90)) //Goddamn copypaste from binary base class because atmospherics machinery API is not damn flexible network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) @@ -276,7 +276,7 @@ if (usr.stat || usr.restrained() || anchored) return - src.dir = turn(src.dir, -90) + src.set_dir(turn(src.dir, -90)) verb/rotate_anticlock() set category = "Object" @@ -286,4 +286,4 @@ if (usr.stat || usr.restrained() || anchored) return - src.dir = turn(src.dir, 90) \ No newline at end of file + src.set_dir(turn(src.dir, 90)) \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 4bfd61a0a2..488c1eeb91 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -5,7 +5,7 @@ name = "Connector Port" desc = "For connecting portables devices related to atmospherics control." - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH var/obj/machinery/portable_atmospherics/connected_device diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 5649b25e01..4f5205687e 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -248,7 +248,7 @@ /obj/machinery/atmospherics/trinary/filter/m_filter icon_state = "mmap" - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH|NORTH|EAST obj/machinery/atmospherics/trinary/filter/m_filter/New() diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index 051a2ced27..9432518b53 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -181,7 +181,7 @@ obj/machinery/atmospherics/trinary/mixer/t_mixer icon_state = "tmap" - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH|EAST|WEST //node 3 is the outlet, nodes 1 & 2 are intakes @@ -227,7 +227,7 @@ obj/machinery/atmospherics/trinary/mixer/t_mixer/initialize() obj/machinery/atmospherics/trinary/mixer/m_mixer icon_state = "mmap" - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH|NORTH|EAST //node 3 is the outlet, nodes 1 & 2 are intakes diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index 822c9a4d6d..ce3aafc953 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -1,5 +1,5 @@ obj/machinery/atmospherics/trinary - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH|NORTH|WEST use_power = 1 diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm index 39ca1e25fd..4d931bd324 100644 --- a/code/ATMOSPHERICS/components/tvalve.dm +++ b/code/ATMOSPHERICS/components/tvalve.dm @@ -6,7 +6,7 @@ desc = "A pipe valve" level = 1 - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH|NORTH|WEST var/state = 0 // 0 = go straight, 1 = go to side diff --git a/code/ATMOSPHERICS/components/unary/oxygen_generator.dm b/code/ATMOSPHERICS/components/unary/oxygen_generator.dm index 14bbb46bba..c3ccdbc574 100644 --- a/code/ATMOSPHERICS/components/unary/oxygen_generator.dm +++ b/code/ATMOSPHERICS/components/unary/oxygen_generator.dm @@ -6,7 +6,7 @@ obj/machinery/atmospherics/unary/oxygen_generator name = "Oxygen Generator" desc = "" - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH var/on = 0 diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm index 8af26e51eb..8d850cc74f 100644 --- a/code/ATMOSPHERICS/components/unary/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary/unary_base.dm @@ -1,5 +1,5 @@ /obj/machinery/atmospherics/unary - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH //layer = TURF_LAYER+0.1 diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index bce38d0654..4633c06511 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -6,7 +6,7 @@ desc = "A pipe valve" level = 1 - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH|NORTH var/open = 0 @@ -123,9 +123,9 @@ /obj/machinery/atmospherics/valve/proc/normalize_dir() if(dir==3) - dir = 1 + set_dir(1) else if(dir==12) - dir = 4 + set_dir(4) /obj/machinery/atmospherics/valve/attack_ai(mob/user as mob) return diff --git a/code/ATMOSPHERICS/mainspipe.dm b/code/ATMOSPHERICS/mainspipe.dm index 631f3530a2..ce23f7bfba 100644 --- a/code/ATMOSPHERICS/mainspipe.dm +++ b/code/ATMOSPHERICS/mainspipe.dm @@ -115,7 +115,7 @@ obj/machinery/atmospherics/mains_pipe/simple name = "mains pipe" desc = "A one meter section of 3-line mains pipe" - dir = SOUTH + set_dir(SOUTH) initialize_mains_directions = SOUTH|NORTH New() @@ -137,9 +137,9 @@ obj/machinery/atmospherics/mains_pipe/simple proc/normalize_dir() if(dir==3) - dir = 1 + set_dir(1) else if(dir==12) - dir = 4 + set_dir(4) update_icon() if(nodes[1] && nodes[2]) @@ -148,7 +148,7 @@ obj/machinery/atmospherics/mains_pipe/simple //var/node1_direction = get_dir(src, node1) //var/node2_direction = get_dir(src, node2) - //dir = node1_direction|node2_direction + //set_dir(node1_direction|node2_direction) else if(!nodes[1]&&!nodes[2]) @@ -196,7 +196,7 @@ obj/machinery/atmospherics/mains_pipe/manifold name = "manifold pipe" desc = "A manifold composed of mains pipes" - dir = SOUTH + set_dir(SOUTH) initialize_mains_directions = EAST|NORTH|WEST volume = 105 @@ -261,7 +261,7 @@ obj/machinery/atmospherics/mains_pipe/manifold4w name = "manifold pipe" desc = "A manifold composed of mains pipes" - dir = SOUTH + set_dir(SOUTH) initialize_mains_directions = EAST|NORTH|WEST|SOUTH volume = 105 @@ -504,7 +504,7 @@ obj/machinery/atmospherics/mains_pipe/cap name = "pipe cap" desc = "A cap for the end of a mains pipe" - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH volume = 35 @@ -546,7 +546,7 @@ obj/machinery/atmospherics/mains_pipe/valve var/open = 1 - dir = SOUTH + set_dir(SOUTH) initialize_mains_directions = SOUTH|NORTH New() @@ -597,9 +597,9 @@ obj/machinery/atmospherics/mains_pipe/valve proc/normalize_dir() if(dir==3) - dir = 1 + set_dir(1) else if(dir==12) - dir = 4 + set_dir(4) proc/open() if(open) return 0 diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 53910f2fe3..037d39218a 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -143,7 +143,7 @@ volume = ATMOS_DEFAULT_VOLUME_PIPE - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH|NORTH var/obj/machinery/atmospherics/node1 @@ -216,9 +216,9 @@ /obj/machinery/atmospherics/pipe/simple/proc/normalize_dir() if(dir==3) - dir = 1 + set_dir(1) else if(dir==12) - dir = 4 + set_dir(4) /obj/machinery/atmospherics/pipe/simple/Del() if(node1) @@ -406,7 +406,7 @@ volume = ATMOS_DEFAULT_VOLUME_PIPE * 1.5 - dir = SOUTH + set_dir(SOUTH) initialize_directions = EAST|NORTH|WEST var/obj/machinery/atmospherics/node1 @@ -658,7 +658,7 @@ volume = ATMOS_DEFAULT_VOLUME_PIPE * 2 - dir = SOUTH + set_dir(SOUTH) initialize_directions = NORTH|SOUTH|EAST|WEST var/obj/machinery/atmospherics/node1 @@ -918,7 +918,7 @@ volume = 35 - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH var/obj/machinery/atmospherics/node @@ -1042,7 +1042,7 @@ var/start_pressure = 25*ONE_ATMOSPHERE level = 1 - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH density = 1 @@ -1220,7 +1220,7 @@ volume = 250 - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH var/build_killswitch = 1 @@ -1259,7 +1259,7 @@ if(node1) icon_state = "intact" - dir = get_dir(src, node1) + set_dir(get_dir(src, node1)) else icon_state = "exposed" @@ -1291,7 +1291,7 @@ /obj/machinery/atmospherics/pipe/vent/hide(var/i) //to make the little pipe section invisible, the icon changes. if(node1) icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact" - dir = get_dir(src, node1) + set_dir(get_dir(src, node1)) else icon_state = "exposed" diff --git a/code/FEA/FEA_fire.dm b/code/FEA/FEA_fire.dm index bb71f31d47..b7a8d42fa5 100644 --- a/code/FEA/FEA_fire.dm +++ b/code/FEA/FEA_fire.dm @@ -167,7 +167,7 @@ /obj/effect/hotspot/New() ..() - dir = pick(cardinal) + set_dir(pick(cardinal)) return /* diff --git a/code/TriDimension/Pipes.dm b/code/TriDimension/Pipes.dm index 4132ddfe94..4f38444e98 100644 --- a/code/TriDimension/Pipes.dm +++ b/code/TriDimension/Pipes.dm @@ -10,7 +10,7 @@ obj/machinery/atmospherics/pipe/zpipe volume = 70 - dir = SOUTH + set_dir(SOUTH) initialize_directions = SOUTH var/obj/machinery/atmospherics/node1 //connection on the same Z @@ -84,9 +84,9 @@ obj/machinery/atmospherics/pipe/zpipe/proc/burst() obj/machinery/atmospherics/pipe/zpipe/proc/normalize_dir() if(dir==3) - dir = 1 + set_dir(1) else if(dir==12) - dir = 4 + set_dir(4) obj/machinery/atmospherics/pipe/zpipe/Del() if(node1) diff --git a/code/TriDimension/Structures.dm b/code/TriDimension/Structures.dm index fa91ccd5bb..554853535a 100644 --- a/code/TriDimension/Structures.dm +++ b/code/TriDimension/Structures.dm @@ -256,8 +256,8 @@ initialise_stair_connection(S, src, inv_dir) proc/initialise_stair_connection(var/obj/multiz/stairs/top, var/obj/multiz/stairs/bottom, var/dir) - top.dir = dir - bottom.dir = dir + top.set_dir(dir) + bottom.set_dir(dir) top.connected = bottom bottom.connected = top top.icon_state = "ramptop" diff --git a/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm b/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm index 95f7c26556..7e350dc3a0 100644 --- a/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm +++ b/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm @@ -368,7 +368,7 @@ var/predir = M.dir step(M, throw_dir) - M.dir = predir + M.set_dir(predir) //gives turf a different description, to try and trick players /obj/effect/step_trigger/trap/fake diff --git a/code/WorkInProgress/Cael_Aislinn/Jungle/misc_helpers.dm b/code/WorkInProgress/Cael_Aislinn/Jungle/misc_helpers.dm index ffc1265b7d..7ae07059f7 100644 --- a/code/WorkInProgress/Cael_Aislinn/Jungle/misc_helpers.dm +++ b/code/WorkInProgress/Cael_Aislinn/Jungle/misc_helpers.dm @@ -62,7 +62,7 @@ continue moving var/turf/X = new T.type(B) - X.dir = old_dir1 + X.set_dir(old_dir1) X.icon_state = old_icon_state1 X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_assembly_port_construction.dm b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_assembly_port_construction.dm index b012d1c360..0c12ed23a0 100644 --- a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_assembly_port_construction.dm +++ b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_assembly_port_construction.dm @@ -39,7 +39,7 @@ // offset 24 pixels in direction of dir // this allows the APC to be embedded in a wall, yet still inside an area if (building) - dir = ndir + set_dir(ndir) else has_electronics = 3 opened = 0 diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_compressor_construction.dm b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_compressor_construction.dm index fab9eb87d5..3d2e32f971 100644 --- a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_compressor_construction.dm +++ b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_compressor_construction.dm @@ -39,7 +39,7 @@ // offset 24 pixels in direction of dir // this allows the APC to be embedded in a wall, yet still inside an area if (building) - dir = ndir + set_dir(ndir) else has_electronics = 3 opened = 0 diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_injector.dm b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_injector.dm index e3441dafd8..ad7ea622e2 100644 --- a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_injector.dm +++ b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_injector.dm @@ -294,7 +294,7 @@ if (usr.stat || usr.restrained() || anchored) return - src.dir = turn(src.dir, 90) + src.set_dir(turn(src.dir, 90)) /obj/machinery/power/rust_fuel_injector/verb/rotate_anticlock() set category = "Object" @@ -304,4 +304,4 @@ if (usr.stat || usr.restrained() || anchored) return - src.dir = turn(src.dir, -90) \ No newline at end of file + src.set_dir(turn(src.dir, -90)) \ No newline at end of file diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/gyrotron.dm b/code/WorkInProgress/Cael_Aislinn/Rust/gyrotron.dm index f375716b21..0fff75bb50 100644 --- a/code/WorkInProgress/Cael_Aislinn/Rust/gyrotron.dm +++ b/code/WorkInProgress/Cael_Aislinn/Rust/gyrotron.dm @@ -95,7 +95,7 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() - A.dir = src.dir + A.set_dir(src.dir) if(src.dir == 1)//Up A.yo = 20 A.xo = 0 @@ -125,7 +125,7 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start()*/ - A.dir = src.dir + A.set_dir(src.dir) if(src.dir == 1)//Up A.yo = 20 A.xo = 0 diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/radiation.dm b/code/WorkInProgress/Cael_Aislinn/Rust/radiation.dm index 155ef23c5c..b94127ffa2 100644 --- a/code/WorkInProgress/Cael_Aislinn/Rust/radiation.dm +++ b/code/WorkInProgress/Cael_Aislinn/Rust/radiation.dm @@ -26,7 +26,7 @@ if(!dir) RadiateParticleRand(energy, ionizing) var/obj/effect/accelerated_particle/particle = new - particle.dir = dir + particle.set_dir(dir) particle.ionizing = ionizing if(energy) particle.energy = energy diff --git a/code/WorkInProgress/Cael_Aislinn/Supermatter/Laser2.dm b/code/WorkInProgress/Cael_Aislinn/Supermatter/Laser2.dm index 38032c459c..3782e76209 100644 --- a/code/WorkInProgress/Cael_Aislinn/Supermatter/Laser2.dm +++ b/code/WorkInProgress/Cael_Aislinn/Supermatter/Laser2.dm @@ -22,7 +22,7 @@ if(!first) src.first = new /obj/beam/e_beam(src.loc) src.first.master = src - src.first.dir = src.dir + src.first.set_dir(src.dir) src.first.power = src.power src.first.freq = src.freq src.first.phase = src.phase @@ -61,7 +61,7 @@ if(!next) if(get_step(src.loc,src.dir)) var/obj/beam/e_beam/e = new /obj/beam/e_beam(src.loc) - e.dir = src.dir + e.set_dir(src.dir) src.next = e e.master = src.master e.power = src.power diff --git a/code/WorkInProgress/Cael_Aislinn/Supermatter/ZeroPointLaser.dm b/code/WorkInProgress/Cael_Aislinn/Supermatter/ZeroPointLaser.dm index 04c07733df..66ccf181bd 100644 --- a/code/WorkInProgress/Cael_Aislinn/Supermatter/ZeroPointLaser.dm +++ b/code/WorkInProgress/Cael_Aislinn/Supermatter/ZeroPointLaser.dm @@ -34,7 +34,7 @@ if (src.anchored || usr:stat) usr << "It is fastened to the floor!" return 0 - src.dir = turn(src.dir, 90) + src.set_dir(turn(src.dir, 90)) return 1 /obj/machinery/zero_point_emitter/New() @@ -98,7 +98,7 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() - A.dir = src.dir + A.set_dir(src.dir) switch(dir) if(NORTH) A.yo = 20 diff --git a/code/WorkInProgress/Cael_Aislinn/meteor_battery.dm b/code/WorkInProgress/Cael_Aislinn/meteor_battery.dm index 85bcc084b7..9ebc5fa5de 100644 --- a/code/WorkInProgress/Cael_Aislinn/meteor_battery.dm +++ b/code/WorkInProgress/Cael_Aislinn/meteor_battery.dm @@ -13,7 +13,7 @@ /obj/item/projectile/missile/process(var/turf/newtarget) target = newtarget - dir = get_dir(src.loc, target) + set_dir(get_dir(src.loc, target)) walk_towards(src, target, MISSILE_SPEED) /obj/item/projectile/missile/Bump(atom/A) @@ -164,7 +164,7 @@ /obj/machinery/meteor_battery/proc/target() while(src && enabled && !stat) - src.dir = get_dir(src, cur_target) + src.set_dir(get_dir(src, cur_target)) shootAt(cur_target) sleep(shot_delay) return diff --git a/code/WorkInProgress/Cael_Aislinn/sculpture.dm b/code/WorkInProgress/Cael_Aislinn/sculpture.dm index 639c2c8487..808e968f55 100644 --- a/code/WorkInProgress/Cael_Aislinn/sculpture.dm +++ b/code/WorkInProgress/Cael_Aislinn/sculpture.dm @@ -56,7 +56,7 @@ continue turfs += thisturf var/turf/target_turf = pick(turfs) - src.dir = get_dir(src, target_turf) + src.set_dir(get_dir(src, target_turf)) src.loc = target_turf hibernate = 1 @@ -193,7 +193,7 @@ if(!next_turf.CanPass(src, next_turf)) break src.loc = next_turf - src.dir = get_dir(src, target_mob) + src.set_dir(get_dir(src, target_mob)) next_turf = get_step(src, get_dir(next_turf,target_mob)) num_turfs-- @@ -233,7 +233,7 @@ if(!next_turf.CanPass(src, next_turf)) break src.loc = next_turf - src.dir = get_dir(src, target_mob) + src.set_dir(get_dir(src, target_mob)) next_turf = get_step(src, get_dir(next_turf,target_turf)) num_turfs-- else if(G) diff --git a/code/WorkInProgress/Chinsky/overmap/ships/engines/thermal.dm b/code/WorkInProgress/Chinsky/overmap/ships/engines/thermal.dm index b26e721638..44a7dcb84f 100644 --- a/code/WorkInProgress/Chinsky/overmap/ships/engines/thermal.dm +++ b/code/WorkInProgress/Chinsky/overmap/ships/engines/thermal.dm @@ -89,7 +89,7 @@ anchored = 1 New(var/turf/nloc, var/ndir, var/temp) - dir = ndir + set_dir(ndir) ..(nloc) if(nloc) diff --git a/code/WorkInProgress/Cib/amorph/amorph_hud.dm b/code/WorkInProgress/Cib/amorph/amorph_hud.dm index c9a4ef0cc9..41a3adc9f5 100644 --- a/code/WorkInProgress/Cib/amorph/amorph_hud.dm +++ b/code/WorkInProgress/Cib/amorph/amorph_hud.dm @@ -46,7 +46,7 @@ using = new /obj/screen( src ) using.name = "act_intent" - using.dir = SOUTHWEST + using.set_dir(SOUTHWEST) using.icon = ui_style using.icon_state = (mymob.a_intent == "hurt" ? "harm" : mymob.a_intent) using.screen_loc = ui_acti @@ -105,7 +105,7 @@ using = new /obj/screen( src ) using.name = "mov_intent" - using.dir = SOUTHWEST + using.set_dir(SOUTHWEST) using.icon = ui_style using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") using.screen_loc = ui_movi @@ -123,7 +123,7 @@ using = new /obj/screen( src ) using.name = "r_hand" - using.dir = WEST + using.set_dir(WEST) using.icon = ui_style using.icon_state = "hand_inactive" if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use @@ -135,7 +135,7 @@ using = new /obj/screen( src ) using.name = "l_hand" - using.dir = EAST + using.set_dir(EAST) using.icon = ui_style using.icon_state = "hand_inactive" if(mymob && mymob.hand) //This being 1 means the left hand is in use @@ -147,7 +147,7 @@ using = new /obj/screen( src ) using.name = "hand" - using.dir = SOUTH + using.set_dir(SOUTH) using.icon = ui_style using.icon_state = "hand1" using.screen_loc = ui_swaphand1 @@ -156,7 +156,7 @@ using = new /obj/screen( src ) using.name = "hand" - using.dir = SOUTH + using.set_dir(SOUTH) using.icon = ui_style using.icon_state = "hand2" using.screen_loc = ui_swaphand2 @@ -165,7 +165,7 @@ using = new /obj/screen( src ) using.name = "mask" - using.dir = NORTH + using.set_dir(NORTH) using.icon = ui_style using.icon_state = "equip" using.screen_loc = ui_monkey_mask @@ -174,7 +174,7 @@ using = new /obj/screen( src ) using.name = "back" - using.dir = NORTHEAST + using.set_dir(NORTHEAST) using.icon = ui_style using.icon_state = "equip" using.screen_loc = ui_back @@ -291,19 +291,19 @@ mymob.gun_setting_icon = new /obj/screen/gun/mode(null) if (mymob.client) if (mymob.client.gun_mode) // If in aim mode, correct the sprite - mymob.gun_setting_icon.dir = 2 + mymob.gun_setting_icon.set_dir(2) for(var/obj/item/weapon/gun/G in mymob) // If targeting someone, display other buttons if (G.target) mymob.item_use_icon = new /obj/screen/gun/item(null) if (mymob.client.target_can_click) - mymob.item_use_icon.dir = 1 + mymob.item_use_icon.set_dir(1) src.adding += mymob.item_use_icon mymob.gun_move_icon = new /obj/screen/gun/move(null) if (mymob.client.target_can_move) - mymob.gun_move_icon.dir = 1 + mymob.gun_move_icon.set_dir(1) mymob.gun_run_icon = new /obj/screen/gun/run(null) if (mymob.client.target_can_run) - mymob.gun_run_icon.dir = 1 + mymob.gun_run_icon.set_dir(1) src.adding += mymob.gun_run_icon src.adding += mymob.gun_move_icon diff --git a/code/WorkInProgress/Tastyfish/livestock.dm b/code/WorkInProgress/Tastyfish/livestock.dm index f17265ba04..0befcb4c61 100644 --- a/code/WorkInProgress/Tastyfish/livestock.dm +++ b/code/WorkInProgress/Tastyfish/livestock.dm @@ -63,15 +63,15 @@ if(movement_target) //Not redundant due to sleeps, Item can be gone in 6 decisecomds if (movement_target.loc.x < src.x) - dir = WEST + set_dir(WEST) else if (movement_target.loc.x > src.x) - dir = EAST + set_dir(EAST) else if (movement_target.loc.y < src.y) - dir = SOUTH + set_dir(SOUTH) else if (movement_target.loc.y > src.y) - dir = NORTH + set_dir(NORTH) else - dir = SOUTH + set_dir(SOUTH) if(isturf(movement_target.loc)) movement_target.attack_animal(src) diff --git a/code/WorkInProgress/Tastyfish/wallmount_frame.dm b/code/WorkInProgress/Tastyfish/wallmount_frame.dm index 16bdb12d6c..28b6101a75 100644 --- a/code/WorkInProgress/Tastyfish/wallmount_frame.dm +++ b/code/WorkInProgress/Tastyfish/wallmount_frame.dm @@ -25,7 +25,7 @@ del(src) return - dir = get_dir(T, loc) + set_dir(get_dir(T, loc)) /obj/machinery/constructable_frame/wallmount_frame/attackby(obj/item/P as obj, mob/user as mob) if(P.crit_fail) @@ -109,7 +109,7 @@ if(component_check) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) var/obj/machinery/new_machine = new src.circuit.build_path(src.loc) - new_machine.dir = dir + new_machine.set_dir(dir) if(istype(circuit, /obj/item/weapon/circuitboard/status_display)) new_machine.pixel_x = pixel_x * 1.33 new_machine.pixel_y = pixel_y * 1.33 diff --git a/code/WorkInProgress/buildmode.dm b/code/WorkInProgress/buildmode.dm index d93d45fec5..acd442355a 100644 --- a/code/WorkInProgress/buildmode.dm +++ b/code/WorkInProgress/buildmode.dm @@ -48,15 +48,15 @@ Click() switch(dir) if(NORTH) - dir = EAST + set_dir(EAST) if(EAST) - dir = SOUTH + set_dir(SOUTH) if(SOUTH) - dir = WEST + set_dir(WEST) if(WEST) - dir = NORTHWEST + set_dir(NORTHWEST) if(NORTHWEST) - dir = NORTH + set_dir(NORTH) return 1 /obj/effect/bmode/buildhelp @@ -219,19 +219,19 @@ switch(holder.builddir.dir) if(NORTH) var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) - WIN.dir = NORTH + WIN.set_dir(NORTH) if(SOUTH) var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) - WIN.dir = SOUTH + WIN.set_dir(SOUTH) if(EAST) var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) - WIN.dir = EAST + WIN.set_dir(EAST) if(WEST) var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) - WIN.dir = WEST + WIN.set_dir(WEST) if(NORTHWEST) var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) - WIN.dir = NORTHWEST + WIN.set_dir(NORTHWEST) if(2) if(pa.Find("left")) if(ispath(holder.buildmode.objholder,/turf)) @@ -239,7 +239,7 @@ T.ChangeTurf(holder.buildmode.objholder) else var/obj/A = new holder.buildmode.objholder (get_turf(object)) - A.dir = holder.builddir.dir + A.set_dir(holder.builddir.dir) else if(pa.Find("right")) if(isobj(object)) del(object) diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 24aa1d2a51..babce84126 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -161,7 +161,7 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) if(!istype(loc, /turf)) del src - dir = pick(cardinal) + set_dir(pick(cardinal)) SetLuminosity(3) firelevel = fl air_master.active_hotspots.Add(src) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 4a21302777..d78f3e7a9d 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -623,7 +623,7 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl //The variables should be apparent enough. var/atom/movable/overlay/animation = new(location) if(direction) - animation.dir = direction + animation.set_dir(direction) animation.icon = a_icon animation.layer = target:layer+1 if(a_icon_state) @@ -854,7 +854,7 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl var/old_icon1 = T.icon var/turf/X = B.ChangeTurf(T.type) - X.dir = old_dir1 + X.set_dir(old_dir1) X.icon_state = old_icon_state1 X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi @@ -1027,7 +1027,7 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) continue moving var/turf/X = new T.type(B) - X.dir = old_dir1 + X.set_dir(old_dir1) X.icon_state = old_icon_state1 X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index eadc657a9c..5ab826fa86 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -350,7 +350,5 @@ else if(dx > 0) direction = EAST else direction = WEST - dir = direction - if(buckled && buckled.movable) - buckled.dir = direction - buckled.handle_rotation() \ No newline at end of file + if(direction != dir) + facedir(direction) diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index 5037353ff1..6c5da7817a 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -7,7 +7,7 @@ using = new /obj/screen() using.name = "mov_intent" - using.dir = SOUTHWEST + using.set_dir(SOUTHWEST) using.icon = 'icons/mob/screen1_alien.dmi' using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") using.screen_loc = ui_acti diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 8b3fe14134..33a14d2e4d 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -34,7 +34,7 @@ inv_box.icon_state = slot_data["state"] if(slot_data["dir"]) - inv_box.dir = slot_data["dir"] + inv_box.set_dir(slot_data["dir"]) if(slot_data["toggle"]) src.other += inv_box @@ -58,7 +58,7 @@ using = new /obj/screen() using.name = "act_intent" - using.dir = SOUTHWEST + using.set_dir(SOUTHWEST) using.icon = ui_style using.icon_state = "intent_"+mymob.a_intent using.screen_loc = ui_acti @@ -125,7 +125,7 @@ if(hud_data.has_m_intent) using = new /obj/screen() using.name = "mov_intent" - using.dir = SOUTHWEST + using.set_dir(SOUTHWEST) using.icon = ui_style using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") using.screen_loc = ui_movi @@ -160,7 +160,7 @@ inv_box = new /obj/screen/inventory() inv_box.name = "r_hand" - inv_box.dir = WEST + inv_box.set_dir(WEST) inv_box.icon = ui_style inv_box.icon_state = "hand_inactive" if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use @@ -176,7 +176,7 @@ inv_box = new /obj/screen/inventory() inv_box.name = "l_hand" - inv_box.dir = EAST + inv_box.set_dir(EAST) inv_box.icon = ui_style inv_box.icon_state = "hand_inactive" if(mymob && mymob.hand) //This being 1 means the left hand is in use @@ -191,7 +191,7 @@ using = new /obj/screen/inventory() using.name = "hand" - using.dir = SOUTH + using.set_dir(SOUTH) using.icon = ui_style using.icon_state = "hand1" using.screen_loc = ui_swaphand1 @@ -202,7 +202,7 @@ using = new /obj/screen/inventory() using.name = "hand" - using.dir = SOUTH + using.set_dir(SOUTH) using.icon = ui_style using.icon_state = "hand2" using.screen_loc = ui_swaphand2 @@ -358,7 +358,7 @@ if (mymob.client) if (mymob.client.gun_mode) // If in aim mode, correct the sprite - mymob.gun_setting_icon.dir = 2 + mymob.gun_setting_icon.set_dir(2) mymob.client.screen = null diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index 7ca8216bf2..65924284b5 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -8,7 +8,7 @@ using = new /obj/screen() using.name = "act_intent" - using.dir = SOUTHWEST + using.set_dir(SOUTHWEST) using.icon = ui_style using.icon_state = (mymob.a_intent == "hurt" ? "harm" : mymob.a_intent) using.screen_loc = ui_acti @@ -67,7 +67,7 @@ using = new /obj/screen() using.name = "mov_intent" - using.dir = SOUTHWEST + using.set_dir(SOUTHWEST) using.icon = ui_style using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") using.screen_loc = ui_movi @@ -85,7 +85,7 @@ inv_box = new /obj/screen/inventory() inv_box.name = "r_hand" - inv_box.dir = WEST + inv_box.set_dir(WEST) inv_box.icon = ui_style inv_box.icon_state = "hand_inactive" if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use @@ -98,7 +98,7 @@ inv_box = new /obj/screen/inventory() inv_box.name = "l_hand" - inv_box.dir = EAST + inv_box.set_dir(EAST) inv_box.icon = ui_style inv_box.icon_state = "hand_inactive" if(mymob && mymob.hand) //This being 1 means the left hand is in use @@ -111,7 +111,7 @@ using = new /obj/screen/inventory() using.name = "hand" - using.dir = SOUTH + using.set_dir(SOUTH) using.icon = ui_style using.icon_state = "hand1" using.screen_loc = ui_swaphand1 @@ -120,7 +120,7 @@ using = new /obj/screen/inventory() using.name = "hand" - using.dir = SOUTH + using.set_dir(SOUTH) using.icon = ui_style using.icon_state = "hand2" using.screen_loc = ui_swaphand2 @@ -129,7 +129,7 @@ inv_box = new /obj/screen/inventory() inv_box.name = "mask" - inv_box.dir = NORTH + inv_box.set_dir(NORTH) inv_box.icon = ui_style inv_box.icon_state = "equip" inv_box.screen_loc = ui_monkey_mask @@ -139,7 +139,7 @@ inv_box = new /obj/screen/inventory() inv_box.name = "back" - inv_box.dir = NORTHEAST + inv_box.set_dir(NORTHEAST) inv_box.icon = ui_style inv_box.icon_state = "equip" inv_box.screen_loc = ui_back @@ -224,19 +224,19 @@ mymob.gun_setting_icon = new /obj/screen/gun/mode(null) if (mymob.client) if (mymob.client.gun_mode) // If in aim mode, correct the sprite - mymob.gun_setting_icon.dir = 2 + mymob.gun_setting_icon.set_dir(2) for(var/obj/item/weapon/gun/G in mymob) // If targeting someone, display other buttons if (G.target) mymob.item_use_icon = new /obj/screen/gun/item(null) if (mymob.client.target_can_click) - mymob.item_use_icon.dir = 1 + mymob.item_use_icon.set_dir(1) src.adding += mymob.item_use_icon mymob.gun_move_icon = new /obj/screen/gun/move(null) if (mymob.client.target_can_move) - mymob.gun_move_icon.dir = 1 + mymob.gun_move_icon.set_dir(1) mymob.gun_run_icon = new /obj/screen/gun/run(null) if (mymob.client.target_can_run) - mymob.gun_run_icon.dir = 1 + mymob.gun_run_icon.set_dir(1) src.adding += mymob.gun_run_icon src.adding += mymob.gun_move_icon diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index c696308d2d..644b811376 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -11,7 +11,7 @@ var/obj/screen/robot_inventory //Radio using = new /obj/screen() using.name = "radio" - using.dir = SOUTHWEST + using.set_dir(SOUTHWEST) using.icon = 'icons/mob/screen1_robot.dmi' using.icon_state = "radio" using.screen_loc = ui_movi @@ -22,7 +22,7 @@ var/obj/screen/robot_inventory using = new /obj/screen() using.name = "module1" - using.dir = SOUTHWEST + using.set_dir(SOUTHWEST) using.icon = 'icons/mob/screen1_robot.dmi' using.icon_state = "inv1" using.screen_loc = ui_inv1 @@ -32,7 +32,7 @@ var/obj/screen/robot_inventory using = new /obj/screen() using.name = "module2" - using.dir = SOUTHWEST + using.set_dir(SOUTHWEST) using.icon = 'icons/mob/screen1_robot.dmi' using.icon_state = "inv2" using.screen_loc = ui_inv2 @@ -42,7 +42,7 @@ var/obj/screen/robot_inventory using = new /obj/screen() using.name = "module3" - using.dir = SOUTHWEST + using.set_dir(SOUTHWEST) using.icon = 'icons/mob/screen1_robot.dmi' using.icon_state = "inv3" using.screen_loc = ui_inv3 @@ -55,7 +55,7 @@ var/obj/screen/robot_inventory //Intent using = new /obj/screen() using.name = "act_intent" - using.dir = SOUTHWEST + using.set_dir(SOUTHWEST) using.icon = 'icons/mob/screen1_robot.dmi' using.icon_state = (mymob.a_intent == "hurt" ? "harm" : mymob.a_intent) using.screen_loc = ui_acti @@ -155,19 +155,19 @@ var/obj/screen/robot_inventory mymob.gun_setting_icon = new /obj/screen/gun/mode(null) if (mymob.client) if (mymob.client.gun_mode) // If in aim mode, correct the sprite - mymob.gun_setting_icon.dir = 2 + mymob.gun_setting_icon.set_dir(2) for(var/obj/item/weapon/gun/G in mymob) // If targeting someone, display other buttons if (G.target) mymob.item_use_icon = new /obj/screen/gun/item(null) if (mymob.client.target_can_click) - mymob.item_use_icon.dir = 1 + mymob.item_use_icon.set_dir(1) src.adding += mymob.item_use_icon mymob.gun_move_icon = new /obj/screen/gun/move(null) if (mymob.client.target_can_move) - mymob.gun_move_icon.dir = 1 + mymob.gun_move_icon.set_dir(1) mymob.gun_run_icon = new /obj/screen/gun/run(null) if (mymob.client.target_can_run) - mymob.gun_run_icon.dir = 1 + mymob.gun_run_icon.set_dir(1) src.adding += mymob.gun_run_icon src.adding += mymob.gun_move_icon diff --git a/code/_onclick/oldcode.dm b/code/_onclick/oldcode.dm index 2d52a26390..8585eb8e5f 100644 --- a/code/_onclick/oldcode.dm +++ b/code/_onclick/oldcode.dm @@ -23,16 +23,16 @@ if(dy || dx) if(abs(dx) < abs(dy)) - if(dy > 0) usr.dir = NORTH - else usr.dir = SOUTH + if(dy > 0) usr.set_dir(NORTH) + else usr.set_dir(SOUTH) else - if(dx > 0) usr.dir = EAST - else usr.dir = WEST + if(dx > 0) usr.set_dir(EAST) + else usr.set_dir(WEST) else - if(pixel_y > 16) usr.dir = NORTH - else if(pixel_y < -16) usr.dir = SOUTH - else if(pixel_x > 16) usr.dir = EAST - else if(pixel_x < -16) usr.dir = WEST + if(pixel_y > 16) usr.set_dir(NORTH) + else if(pixel_y < -16) usr.set_dir(SOUTH) + else if(pixel_x > 16) usr.set_dir(EAST) + else if(pixel_x < -16) usr.set_dir(WEST) diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 3f74cbd0ea..88c9feca36 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -167,7 +167,7 @@ var/const/tk_maxrange = 15 O.anchored = 1 O.density = 0 O.layer = FLY_LAYER - O.dir = pick(cardinal) + O.set_dir(pick(cardinal)) O.icon = 'icons/effects/effects.dmi' O.icon_state = "nothing" flick("empdisable",O) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index a51ac42ee2..e69ed4b5dd 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -670,8 +670,8 @@ client return switch(href_list["rotatedir"]) - if("right") A.dir = turn(A.dir, -45) - if("left") A.dir = turn(A.dir, 45) + if("right") A.set_dir(turn(A.dir, -45)) + if("left") A.set_dir(turn(A.dir, 45)) href_list["datumrefresh"] = href_list["rotatedatum"] else if(href_list["makemonkey"]) diff --git a/code/datums/spells/dumbfire.dm b/code/datums/spells/dumbfire.dm index 4a466d1663..53df7d1f92 100644 --- a/code/datums/spells/dumbfire.dm +++ b/code/datums/spells/dumbfire.dm @@ -43,7 +43,7 @@ projectile:linked_spells += proj_type projectile.icon = proj_icon projectile.icon_state = proj_icon_state - projectile.dir = get_dir(projectile, target) + projectile.set_dir(get_dir(projectile, target)) projectile.name = proj_name var/current_loc = usr.loc diff --git a/code/datums/spells/projectile.dm b/code/datums/spells/projectile.dm index 5d5ba5e1f8..9bd1a34f18 100644 --- a/code/datums/spells/projectile.dm +++ b/code/datums/spells/projectile.dm @@ -34,7 +34,7 @@ projectile:linked_spells += proj_type projectile.icon = proj_icon projectile.icon_state = proj_icon_state - projectile.dir = get_dir(target,projectile) + projectile.set_dir(get_dir(target,projectile)) projectile.name = proj_name var/current_loc = usr.loc @@ -47,7 +47,7 @@ if(proj_homing) if(proj_insubstantial) - projectile.dir = get_dir(projectile,target) + projectile.set_dir(get_dir(projectile,target)) projectile.loc = get_step_to(projectile,target) else step_to(projectile,target) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index adaaa5b963..93cb08b5a0 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -138,7 +138,7 @@ its easier to just keep the beam vertical. //of range or to another z-level, then the beam will stop. Otherwise it will //continue to draw. - dir=get_dir(src,BeamTarget) //Causes the source of the beam to rotate to continuosly face the BeamTarget. + set_dir(get_dir(src,BeamTarget)) //Causes the source of the beam to rotate to continuosly face the BeamTarget. for(var/obj/effect/overlay/beam/O in orange(10,src)) //This section erases the previously drawn beam because I found it was easier to if(O.BeamSource==src) //just draw another instance of the beam instead of trying to manipulate all the @@ -209,6 +209,11 @@ its easier to just keep the beam vertical. /atom/proc/relaymove() return +//called to set the atom's dir and used to add behaviour to dir-changes +/atom/proc/set_dir(new_dir) + . = new_dir != dir + dir = new_dir + /atom/proc/ex_act() return diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 82c7eb3016..21e8b5d9a9 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -14,16 +14,6 @@ var/moved_recently = 0 var/mob/pulledby = null -/atom/movable/Move() - var/atom/A = src.loc - . = ..() - src.move_speed = world.time - src.l_move_time - src.l_move_time = world.time - src.m_flag = 1 - if ((A != src.loc && A && A.z == src.z)) - src.last_move = get_dir(A, src.loc) - return - /atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes) if(src.throwing) src.throw_impact(A) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 51b321528e..f6351c8480 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -25,7 +25,7 @@ New(loc, var/h = 30) blobs += src src.health = h - src.dir = pick(1,2,4,8) + src.set_dir(pick(1,2,4,8)) src.update_icon() ..(loc) return @@ -195,7 +195,7 @@ New(loc, var/h = 10) src.health = h - src.dir = pick(1,2,4,8) + src.set_dir(pick(1,2,4,8)) src.update_idle() diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 36137a74a9..50ae7b9fc1 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -30,7 +30,7 @@ if(!the_disk) icon_state = "pinonnull" return - dir = get_dir(src,the_disk) + set_dir(get_dir(src,the_disk)) switch(get_dist(src,the_disk)) if(0) icon_state = "pinondirect" @@ -79,7 +79,7 @@ if(!location) icon_state = "pinonnull" return - dir = get_dir(src,location) + set_dir(get_dir(src,location)) switch(get_dist(src,location)) if(0) icon_state = "pinondirect" @@ -98,7 +98,7 @@ if(!target) icon_state = "pinonnull" return - dir = get_dir(src,target) + set_dir(get_dir(src,target)) switch(get_dist(src,target)) if(0) icon_state = "pinondirect" @@ -215,7 +215,7 @@ // if(loc.z != the_disk.z) //If you are on a different z-level from the disk // icon_state = "pinonnull" // else - dir = get_dir(src, the_disk) + set_dir(get_dir(src, the_disk)) switch(get_dist(src, the_disk)) if(0) icon_state = "pinondirect" @@ -248,7 +248,7 @@ if(loc.z != home.z) //If you are on a different z-level from the shuttle icon_state = "pinonnull" else - dir = get_dir(src, home) + set_dir(get_dir(src, home)) switch(get_dist(src, home)) if(0) icon_state = "pinondirect" diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm index d7b4b1f96c..34fe340a12 100644 --- a/code/game/jobs/job/civilian_chaplain.dm +++ b/code/game/jobs/job/civilian_chaplain.dm @@ -84,7 +84,7 @@ for(var/area/chapel/main/A in world) for(var/turf/T in A.contents) if(T.icon_state == "carpetsymbol") - T.dir = 4 + T.set_dir(4) if("Scrapbook") B.icon_state = "scrapbook" B.item_state = "scrapbook" @@ -103,7 +103,7 @@ for(var/area/chapel/main/A in world) for(var/turf/T in A.contents) if(T.icon_state == "carpetsymbol") - T.dir = 10 + T.set_dir(10) if("Tome") B.icon_state = "tome" B.item_state = "syringe_kit" @@ -119,7 +119,7 @@ for(var/area/chapel/main/A in world) for(var/turf/T in A.contents) if(T.icon_state == "carpetsymbol") - T.dir = 8 + T.set_dir(8) if("the bible melts") B.icon_state = "melted" B.item_state = "melted" @@ -133,7 +133,7 @@ for(var/area/chapel/main/A in world) for(var/turf/T in A.contents) if(T.icon_state == "carpetsymbol") - T.dir = 2 + T.set_dir(2) H.update_inv_l_hand() // so that it updates the bible's item_state in his hand diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index e87b3c36ec..326f705a5d 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -422,7 +422,7 @@ var/global/datum/controller/occupations/job_master // Moving wheelchair if they have one if(H.buckled && istype(H.buckled, /obj/structure/stool/bed/chair/wheelchair)) H.buckled.loc = H.loc - H.buckled.dir = H.dir + H.buckled.set_dir(H.dir) //give them an account in the station database var/datum/money_account/M = create_account(H.real_name, rand(50,500)*10, null) @@ -516,7 +516,7 @@ var/global/datum/controller/occupations/job_master var/obj/structure/stool/bed/chair/wheelchair/W = new /obj/structure/stool/bed/chair/wheelchair(H.loc) H.buckled = W H.update_canmove() - W.dir = H.dir + W.set_dir(H.dir) W.buckled_mob = H W.add_fingerprint(H) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index f8074755a8..0c7e738cff 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -104,7 +104,7 @@ src.loc = loc if(dir) - src.dir = dir + src.set_dir(dir) buildstage = 0 wiresexposed = 1 @@ -1274,7 +1274,7 @@ FIRE ALARM src.loc = loc if(dir) - src.dir = dir + src.set_dir(dir) if(building) buildstage = 0 diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index 9f98f89dee..c4007c6994 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -120,7 +120,7 @@ pulse2.icon_state = "empdisable" pulse2.name = "emp sparks" pulse2.anchored = 1 - pulse2.dir = pick(cardinal) + pulse2.set_dir(pick(cardinal)) spawn(10) pulse2.delete() diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index a2436f9de4..e7f766a5b4 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -526,14 +526,14 @@ var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) var/newdir = get_dir(next, loc) if(newdir == dir) - B.dir = newdir + B.set_dir(newdir) else newdir = newdir | dir if(newdir == 3) newdir = 1 else if(newdir == 12) newdir = 4 - B.dir = newdir + B.set_dir(newdir) bloodiness-- diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 84f3efb167..744c246851 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -878,7 +878,7 @@ Auto Patrol: []"}, pulse2.icon_state = "empdisable" pulse2.name = "emp sparks" pulse2.anchored = 1 - pulse2.dir = pick(cardinal) + pulse2.set_dir(pick(cardinal)) spawn(10) pulse2.delete() var/list/mob/living/carbon/targets = new diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 140659a0e5..4b60d58a3f 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -234,13 +234,13 @@ //If someone knows a better way to do this, let me know. -Giacom switch(i) if(NORTH) - src.dir = SOUTH + src.set_dir(SOUTH) if(SOUTH) - src.dir = NORTH + src.set_dir(NORTH) if(WEST) - src.dir = EAST + src.set_dir(EAST) if(EAST) - src.dir = WEST + src.set_dir(WEST) break //Return a working camera that can see a given mob diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 4e5b64c631..03fa91212f 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -294,7 +294,7 @@ obj/item/weapon/circuitboard/rdserver /obj/item/weapon/circuitboard/unary_atmos/construct(var/obj/machinery/atmospherics/unary/U) //TODO: Move this stuff into the relevant constructor when pipe/construction.dm is cleaned up. - U.dir = src.machine_dir + U.set_dir(src.machine_dir) U.initialize_directions = src.init_dirs U.initialize() U.build_network() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index bb23176478..7328c7b8f3 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -899,7 +899,7 @@ About the new airlock wires panel: var/obj/structure/door_assembly/da = new assembly_type(src.loc) if (istype(da, /obj/structure/door_assembly/multi_tile)) - da.dir = src.dir + da.set_dir(src.dir) da.anchored = 1 if(mineral) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 37966deea6..720fbdc822 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -29,7 +29,7 @@ var/hitsound = 'sound/weapons/smash.ogg' //sound door makes when hit with a weapon //Multi-tile doors - dir = EAST + set_dir(EAST) var/width = 1 /obj/machinery/door/New() diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index f2e8168485..209b993788 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -194,7 +194,7 @@ wa.name = "Wired Windoor Assembly" if (src.base_state == "right" || src.base_state == "rightsecure") wa.facing = "r" - wa.dir = src.dir + wa.set_dir(src.dir) wa.state = "02" wa.update_icon() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index fab5bbea6e..b7cf118287 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -152,7 +152,7 @@ Class Procs: pulse2.icon_state = "empdisable" pulse2.name = "emp sparks" pulse2.anchored = 1 - pulse2.dir = pick(cardinal) + pulse2.set_dir(pick(cardinal)) spawn(10) pulse2.delete() diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 205cc1cede..210948bbd3 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -67,7 +67,7 @@ Buildable meters /obj/item/pipe/New(var/loc, var/pipe_type as num, var/dir as num, var/obj/machinery/atmospherics/make_from = null) ..() if (make_from) - src.dir = make_from.dir + src.set_dir(make_from.dir) src.pipename = make_from.name color = make_from.pipe_color var/is_bent @@ -180,7 +180,7 @@ Buildable meters ///// Z-Level stuff else src.pipe_type = pipe_type - src.dir = dir + src.set_dir(dir) if (pipe_type == 29 || pipe_type == 30 || pipe_type == 33 || pipe_type == 35 || pipe_type == 37 || pipe_type == 39 || pipe_type == 41) connect_types = list(2) src.color = PIPE_COLOR_BLUE @@ -314,28 +314,28 @@ Buildable meters if ( usr.stat || usr.restrained() ) return - src.dir = turn(src.dir, -90) + src.set_dir(turn(src.dir, -90)) if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_UNIVERSAL, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE)) if(dir==2) - dir = 1 + set_dir(1) else if(dir==8) - dir = 4 + set_dir(4) else if (pipe_type in list (PIPE_MANIFOLD4W, PIPE_SUPPLY_MANIFOLD4W, PIPE_SCRUBBERS_MANIFOLD4W)) - dir = 2 - //src.pipe_dir = get_pipe_dir() + set_dir(2) + //src.pipe_set_dir(get_pipe_dir()) return /obj/item/pipe/Move() ..() if ((pipe_type in list (PIPE_SIMPLE_BENT, PIPE_SUPPLY_BENT, PIPE_SCRUBBERS_BENT, PIPE_HE_BENT, PIPE_INSULATED_BENT)) \ && (src.dir in cardinal)) - src.dir = src.dir|turn(src.dir, 90) + src.set_dir(src.dir|turn(src.dir, 90)) else if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_UNIVERSAL, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE)) if(dir==2) - dir = 1 + set_dir(1) else if(dir==8) - dir = 4 + set_dir(4) return // returns all pipe's endpoints @@ -427,11 +427,11 @@ Buildable meters return 1 if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE)) if(dir==2) - dir = 1 + set_dir(1) else if(dir==8) - dir = 4 + set_dir(4) else if (pipe_type in list(PIPE_MANIFOLD4W, PIPE_SUPPLY_MANIFOLD4W, PIPE_SCRUBBERS_MANIFOLD4W, PIPE_OMNI_MIXER, PIPE_OMNI_FILTER)) - dir = 2 + set_dir(2) var/pipe_dir = get_pipe_dir() for(var/obj/machinery/atmospherics/M in src.loc) @@ -447,7 +447,7 @@ Buildable meters if(PIPE_SIMPLE_STRAIGHT, PIPE_SIMPLE_BENT) var/obj/machinery/atmospherics/pipe/simple/P = new( src.loc ) P.pipe_color = color - P.dir = src.dir + P.set_dir(src.dir) P.initialize_directions = pipe_dir var/turf/T = P.loc P.level = T.intact ? 2 : 1 @@ -466,7 +466,7 @@ Buildable meters if(PIPE_SUPPLY_STRAIGHT, PIPE_SUPPLY_BENT) var/obj/machinery/atmospherics/pipe/simple/hidden/supply/P = new( src.loc ) P.color = color - P.dir = src.dir + P.set_dir(src.dir) P.initialize_directions = pipe_dir var/turf/T = P.loc P.level = T.intact ? 2 : 1 @@ -485,7 +485,7 @@ Buildable meters if(PIPE_SCRUBBERS_STRAIGHT, PIPE_SCRUBBERS_BENT) var/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers/P = new( src.loc ) P.color = color - P.dir = src.dir + P.set_dir(src.dir) P.initialize_directions = pipe_dir var/turf/T = P.loc P.level = T.intact ? 2 : 1 @@ -504,7 +504,7 @@ Buildable meters if(PIPE_UNIVERSAL) var/obj/machinery/atmospherics/pipe/simple/hidden/universal/P = new( src.loc ) P.color = color - P.dir = src.dir + P.set_dir(src.dir) P.initialize_directions = pipe_dir var/turf/T = P.loc P.level = T.intact ? 2 : 1 @@ -522,7 +522,7 @@ Buildable meters if(PIPE_HE_STRAIGHT, PIPE_HE_BENT) var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/P = new ( src.loc ) - P.dir = src.dir + P.set_dir(src.dir) P.initialize_directions = pipe_dir //this var it's used to know if the pipe is bent or not P.initialize_directions_he = pipe_dir //var/turf/T = P.loc @@ -541,7 +541,7 @@ Buildable meters if(PIPE_CONNECTOR) // connector var/obj/machinery/atmospherics/portables_connector/C = new( src.loc ) - C.dir = dir + C.set_dir(dir) C.initialize_directions = pipe_dir if (pipename) C.name = pipename @@ -557,7 +557,7 @@ Buildable meters if(PIPE_MANIFOLD) //manifold var/obj/machinery/atmospherics/pipe/manifold/M = new( src.loc ) M.pipe_color = color - M.dir = dir + M.set_dir(dir) M.initialize_directions = pipe_dir //M.New() var/turf/T = M.loc @@ -580,7 +580,7 @@ Buildable meters if(PIPE_SUPPLY_MANIFOLD) //manifold var/obj/machinery/atmospherics/pipe/manifold/hidden/supply/M = new( src.loc ) M.color = color - M.dir = dir + M.set_dir(dir) M.initialize_directions = pipe_dir //M.New() var/turf/T = M.loc @@ -603,7 +603,7 @@ Buildable meters if(PIPE_SCRUBBERS_MANIFOLD) //manifold var/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers/M = new( src.loc ) M.color = color - M.dir = dir + M.set_dir(dir) M.initialize_directions = pipe_dir //M.New() var/turf/T = M.loc @@ -626,7 +626,7 @@ Buildable meters if(PIPE_MANIFOLD4W) //4-way manifold var/obj/machinery/atmospherics/pipe/manifold4w/M = new( src.loc ) M.pipe_color = color - M.dir = dir + M.set_dir(dir) M.initialize_directions = pipe_dir //M.New() var/turf/T = M.loc @@ -652,7 +652,7 @@ Buildable meters if(PIPE_SUPPLY_MANIFOLD4W) //4-way manifold var/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply/M = new( src.loc ) M.color = color - M.dir = dir + M.set_dir(dir) M.initialize_directions = pipe_dir M.connect_types = src.connect_types //M.New() @@ -679,7 +679,7 @@ Buildable meters if(PIPE_SCRUBBERS_MANIFOLD4W) //4-way manifold var/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers/M = new( src.loc ) M.color = color - M.dir = dir + M.set_dir(dir) M.initialize_directions = pipe_dir M.connect_types = src.connect_types //M.New() @@ -705,7 +705,7 @@ Buildable meters if(PIPE_JUNCTION) var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/P = new ( src.loc ) - P.dir = src.dir + P.set_dir(src.dir) P.initialize_directions = src.get_pdir() P.initialize_directions_he = src.get_hdir() //var/turf/T = P.loc @@ -724,7 +724,7 @@ Buildable meters if(PIPE_UVENT) //unary vent var/obj/machinery/atmospherics/unary/vent_pump/V = new( src.loc ) - V.dir = dir + V.set_dir(dir) V.initialize_directions = pipe_dir if (pipename) V.name = pipename @@ -739,7 +739,7 @@ Buildable meters if(PIPE_MVALVE) //manual valve var/obj/machinery/atmospherics/valve/V = new( src.loc) - V.dir = dir + V.set_dir(dir) V.initialize_directions = pipe_dir if (pipename) V.name = pipename @@ -758,7 +758,7 @@ Buildable meters if(PIPE_PUMP) //gas pump var/obj/machinery/atmospherics/binary/pump/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -775,7 +775,7 @@ Buildable meters if(PIPE_GAS_FILTER) //gas filter var/obj/machinery/atmospherics/trinary/filter/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -795,7 +795,7 @@ Buildable meters if(PIPE_GAS_MIXER) //gas mixer var/obj/machinery/atmospherics/trinary/mixer/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -815,7 +815,7 @@ Buildable meters if(PIPE_GAS_FILTER_M) //gas filter mirrored var/obj/machinery/atmospherics/trinary/filter/m_filter/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -835,7 +835,7 @@ Buildable meters if(PIPE_GAS_MIXER_T) //gas mixer-t var/obj/machinery/atmospherics/trinary/mixer/t_mixer/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -855,7 +855,7 @@ Buildable meters if(PIPE_GAS_MIXER_M) //gas mixer mirrored var/obj/machinery/atmospherics/trinary/mixer/m_mixer/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -875,7 +875,7 @@ Buildable meters if(PIPE_SCRUBBER) //scrubber var/obj/machinery/atmospherics/unary/vent_scrubber/S = new(src.loc) - S.dir = dir + S.set_dir(dir) S.initialize_directions = pipe_dir if (pipename) S.name = pipename @@ -889,7 +889,7 @@ Buildable meters if(PIPE_INSULATED_STRAIGHT, PIPE_INSULATED_BENT) var/obj/machinery/atmospherics/pipe/simple/insulated/P = new( src.loc ) - P.dir = src.dir + P.set_dir(src.dir) P.initialize_directions = pipe_dir var/turf/T = P.loc P.level = T.intact ? 2 : 1 @@ -907,7 +907,7 @@ Buildable meters if(PIPE_MTVALVE) //manual t-valve var/obj/machinery/atmospherics/tvalve/V = new(src.loc) - V.dir = dir + V.set_dir(dir) V.initialize_directions = pipe_dir if (pipename) V.name = pipename @@ -927,7 +927,7 @@ Buildable meters if(PIPE_CAP) var/obj/machinery/atmospherics/pipe/cap/C = new(src.loc) - C.dir = dir + C.set_dir(dir) C.initialize_directions = pipe_dir C.initialize() C.build_network() @@ -937,7 +937,7 @@ Buildable meters if(PIPE_SUPPLY_CAP) var/obj/machinery/atmospherics/pipe/cap/hidden/supply/C = new(src.loc) - C.dir = dir + C.set_dir(dir) C.initialize_directions = pipe_dir C.initialize() C.build_network() @@ -947,7 +947,7 @@ Buildable meters if(PIPE_SCRUBBERS_CAP) var/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers/C = new(src.loc) - C.dir = dir + C.set_dir(dir) C.initialize_directions = pipe_dir C.initialize() C.build_network() @@ -957,7 +957,7 @@ Buildable meters if(PIPE_PASSIVE_GATE) //passive gate var/obj/machinery/atmospherics/binary/passive_gate/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -974,7 +974,7 @@ Buildable meters if(PIPE_VOLUME_PUMP) //volume pump var/obj/machinery/atmospherics/binary/pump/high_power/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -991,7 +991,7 @@ Buildable meters if(PIPE_HEAT_EXCHANGE) // heat exchanger var/obj/machinery/atmospherics/unary/heat_exchanger/C = new( src.loc ) - C.dir = dir + C.set_dir(dir) C.initialize_directions = pipe_dir if (pipename) C.name = pipename @@ -1005,7 +1005,7 @@ Buildable meters ///// Z-Level stuff if(PIPE_UP) var/obj/machinery/atmospherics/pipe/zpipe/up/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -1021,7 +1021,7 @@ Buildable meters P.node2.build_network() if(PIPE_DOWN) var/obj/machinery/atmospherics/pipe/zpipe/down/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -1037,7 +1037,7 @@ Buildable meters P.node2.build_network() if(PIPE_SUPPLY_UP) var/obj/machinery/atmospherics/pipe/zpipe/up/supply/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -1053,7 +1053,7 @@ Buildable meters P.node2.build_network() if(PIPE_SUPPLY_DOWN) var/obj/machinery/atmospherics/pipe/zpipe/down/supply/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -1069,7 +1069,7 @@ Buildable meters P.node2.build_network() if(PIPE_SCRUBBERS_UP) var/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename @@ -1085,7 +1085,7 @@ Buildable meters P.node2.build_network() if(PIPE_SCRUBBERS_DOWN) var/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers/P = new(src.loc) - P.dir = dir + P.set_dir(dir) P.initialize_directions = pipe_dir if (pipename) P.name = pipename diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index b0b8df60c8..8acc0726a4 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -525,7 +525,7 @@ if(target && (target.stat != DEAD) && (!(target.lying) || emagged)) spawn() popUp() //pop the turret up if it's not already up. - dir = get_dir(src, target) //even if you can't shoot, follow the target + set_dir(get_dir(src, target)) //even if you can't shoot, follow the target spawn() shootAt(target) return 1 diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index acd89ee17c..b014ece92a 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -25,11 +25,11 @@ if(istype(station)) station.com = hub - station.dir = dir + station.set_dir(dir) if(istype(hub)) hub.com = src - hub.dir = dir + hub.set_dir(dir) /obj/machinery/computer/teleporter/attackby(I as obj, mob/living/user as mob) if(istype(I, /obj/item/weapon/card/data/)) diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index 567afc0d6d..29811e1a18 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -232,7 +232,7 @@ /obj/machinery/turret/proc/target() while(src && enabled && !stat && check_target(cur_target)) - src.dir = get_dir(src, cur_target) + src.set_dir(get_dir(src, cur_target)) shootAt(cur_target) sleep(shot_delay) return @@ -487,7 +487,7 @@ if(!target) cur_target = null return - src.dir = get_dir(src,target) + src.set_dir(get_dir(src,target)) var/turf/targloc = get_turf(target) var/target_x = targloc.x var/target_y = targloc.y diff --git a/code/game/mecha/equipment/tools/unused_tools.dm b/code/game/mecha/equipment/tools/unused_tools.dm index 6857891381..470159e06f 100644 --- a/code/game/mecha/equipment/tools/unused_tools.dm +++ b/code/game/mecha/equipment/tools/unused_tools.dm @@ -61,7 +61,7 @@ if(chassis.hasInternalDamage(MECHA_INT_CONTROL_LOST)) move_result = step_rand(chassis) else if(chassis.dir!=direction) - chassis.dir = direction + chassis.set_dir(direction) move_result = 1 else move_result = step(chassis,direction) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index c8f8f261a2..031077d2ea 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -316,7 +316,7 @@ return 0 /obj/mecha/proc/mechturn(direction) - dir = direction + set_dir(direction) playsound(src,'sound/mecha/mechturn.ogg',40,1) return 1 @@ -1014,7 +1014,7 @@ src.forceMove(src.loc) src.log_append_to_last("[H] moved in as pilot.") src.icon_state = src.reset_icon() - dir = dir_in + set_dir(dir_in) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) if(!hasInternalDamage()) src.occupant << sound('sound/mecha/nominal.ogg',volume=50) @@ -1073,7 +1073,7 @@ src.Entered(mmi_as_oc) src.Move(src.loc) src.icon_state = src.reset_icon() - dir = dir_in + set_dir(dir_in) src.log_message("[mmi_as_oc] moved in as pilot.") if(!hasInternalDamage()) src.occupant << sound('sound/mecha/nominal.ogg',volume=50) @@ -1162,7 +1162,7 @@ src.verbs += /obj/mecha/verb/eject src.occupant = null src.icon_state = src.reset_icon()+"-open" - src.dir = dir_in + src.set_dir(dir_in) return ///////////////////////// diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm index 7fe4c45695..027c9f84af 100644 --- a/code/game/mecha/medical/medical.dm +++ b/code/game/mecha/medical/medical.dm @@ -7,7 +7,7 @@ /obj/mecha/medical/mechturn(direction) - dir = direction + set_dir(direction) playsound(src,'sound/mecha/mechmove01.ogg',40,1) return 1 diff --git a/code/game/mecha/working/hoverpod.dm b/code/game/mecha/working/hoverpod.dm index 5f775d619b..5736e00b4f 100644 --- a/code/game/mecha/working/hoverpod.dm +++ b/code/game/mecha/working/hoverpod.dm @@ -56,7 +56,7 @@ //these three procs overriden to play different sounds /obj/mecha/working/hoverpod/mechturn(direction) - dir = direction + set_dir(direction) //playsound(src,'sound/machines/hiss.ogg',40,1) return 1 diff --git a/code/game/objects/effects/biomass_rift.dm b/code/game/objects/effects/biomass_rift.dm index 247f485b57..c619ccb1e7 100644 --- a/code/game/objects/effects/biomass_rift.dm +++ b/code/game/objects/effects/biomass_rift.dm @@ -30,7 +30,7 @@ if(!IsValidBiomassLoc(T)) continue var/obj/effect/biomass/starting = new /obj/effect/biomass(T) - starting.dir = get_dir(src,starting) + starting.set_dir(get_dir(src,starting)) starting.originalRift = src linkedBiomass += starting spawn(1) //DEBUG @@ -53,13 +53,13 @@ return switch(dir) if(NORTHWEST) - dir = NORTH + set_dir(NORTH) if(NORTHEAST) - dir = EAST + set_dir(EAST) if(SOUTHWEST) - dir = WEST + set_dir(WEST) if(SOUTHEAST) - dir = SOUTH + set_dir(SOUTH) sleep(spreadDelay) Spread() @@ -93,7 +93,7 @@ var/obj/effect/biomass/newBiomass = new /obj/effect/biomass(get_step(src,direction)) newBiomass.curDistance = curDistance + 1 newBiomass.maxDistance = maxDistance - newBiomass.dir = direction + newBiomass.set_dir(direction) newBiomass.originalRift = originalRift newBiomass.icon_state = "[originalRift.newicon]" //DEBUG originalRift.linkedBiomass += newBiomass @@ -110,7 +110,7 @@ if(!IsValidBiomassLoc(T,src)) continue var/obj/effect/biomass/starting = new /obj/effect/biomass(T) - starting.dir = get_dir(src,starting) + starting.set_dir(get_dir(src,starting)) starting.maxDistance = maxDistance /proc/IsValidBiomassLoc(turf/location,obj/effect/biomass/source = null) diff --git a/code/game/objects/effects/chemsmoke.dm b/code/game/objects/effects/chemsmoke.dm index fb9b049a3e..e62623e2ec 100644 --- a/code/game/objects/effects/chemsmoke.dm +++ b/code/game/objects/effects/chemsmoke.dm @@ -192,7 +192,7 @@ chemholder.reagents.copy_to(smoke, chemholder.reagents.total_volume / dist, safety = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents smoke.icon = I smoke.layer = 6 - smoke.dir = pick(cardinal) + smoke.set_dir(pick(cardinal)) smoke.pixel_x = -32 + rand(-8,8) smoke.pixel_y = -32 + rand(-8,8) walk_to(smoke, T) diff --git a/code/game/objects/effects/decals/Cleanable/fuel.dm b/code/game/objects/effects/decals/Cleanable/fuel.dm index 6b7ef0242e..5162d0f6df 100644 --- a/code/game/objects/effects/decals/Cleanable/fuel.dm +++ b/code/game/objects/effects/decals/Cleanable/fuel.dm @@ -40,7 +40,7 @@ obj/effect/decal/cleanable/liquid_fuel icon_state = "mustard" anchored = 0 New(newLoc, amt = 1, d = 0) - dir = d //Setting this direction means you won't get torched by your own flamethrower. + set_dir(d) //Setting this direction means you won't get torched by your own flamethrower. . = ..() Spread() diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 5b209e0423..db7abda850 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -402,7 +402,7 @@ steam.start() -- spawns the effect if(istype(T, /turf/space)) var/obj/effect/effect/ion_trails/I = new /obj/effect/effect/ion_trails(src.oldposition) src.oldposition = T - I.dir = src.holder.dir + I.set_dir(src.holder.dir) flick("ion_fade", I) I.icon_state = "blank" spawn( 20 ) @@ -449,7 +449,7 @@ steam.start() -- spawns the effect var/obj/effect/effect/steam/I = new /obj/effect/effect/steam(src.oldposition) src.number++ src.oldposition = get_turf(holder) - I.dir = src.holder.dir + I.set_dir(src.holder.dir) spawn(10) I.delete() src.number-- diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index 68285d4f98..f7a6795e84 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -28,7 +28,7 @@ ..() - dir = CalcDir() + set_dir(CalcDir()) if(!floor) switch(dir) //offset to make it be on the wall rather than on the floor diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index cd9142bdc0..59a71ddaa8 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -71,7 +71,7 @@ var/predir = AM.dir step(AM, direction) if(!facedir) - AM.dir = predir + AM.set_dir(predir) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index b97ef5746c..af350bd56b 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -95,7 +95,7 @@ icon = new_icon icon_state = new_iconstate overlays = new_overlays - dir = O.dir + set_dir(O.dir) M.loc = src master = C master.active_dummy = src diff --git a/code/game/objects/items/devices/floor_painter.dm b/code/game/objects/items/devices/floor_painter.dm index d0bb6b93c0..27b4054fa5 100644 --- a/code/game/objects/items/devices/floor_painter.dm +++ b/code/game/objects/items/devices/floor_painter.dm @@ -29,7 +29,7 @@ switch(tile_dir_mode) if(1) // All directions accepted - F.dir = D + F.set_dir(D) F.icon_state = mode if(2) // Corner mode - diagonal directions converted CW around. switch(D) @@ -41,7 +41,7 @@ D = WEST if(NORTHWEST) D = NORTH - F.dir = D + F.set_dir(D) F.icon_state = mode if(3) // cardinal directions only. I've adjusted diagonals the same way the facing code does. switch(D) @@ -53,7 +53,7 @@ D = WEST if(NORTHWEST) D = WEST - F.dir = D + F.set_dir(D) F.icon_state = mode if(4) // floors.dmi icon_states "warningcorner" and "warnwhitecorner" are incorrect, this fixes it var/D2 @@ -66,16 +66,16 @@ D2 = NORTH if(NORTHWEST) D2 = EAST - F.dir = D2 + F.set_dir(D2) F.icon_state = mode if(5) - F.dir = 0 + F.set_dir(0) if(D == NORTH || D == SOUTH || D == NORTHEAST || D == SOUTHWEST) F.icon_state = mode else F.icon_state = "[mode]_inv" else - F.dir = 0 + F.set_dir(0) F.icon_state = mode else usr << "You can't paint that!" diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 54c159d8db..2f0b67d31d 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -116,7 +116,7 @@ if(Proj.damage >= 20 || istype(Proj, /obj/item/projectile/beam/practice)) bmark.icon_state = "scorch" - bmark.dir = pick(NORTH,SOUTH,EAST,WEST) // random scorch design + bmark.set_dir(pick(NORTH,SOUTH,EAST,WEST)) // random scorch design else diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index aa93aec8ba..c3fa049b17 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -131,7 +131,7 @@ if (src.amount < R.req_amount*multiplier) return var/atom/O = new R.result_type( usr.loc ) - O.dir = usr.dir + O.set_dir(usr.dir) if (R.max_res_amount>1) var/obj/item/stack/new_item = O new_item.amount = R.res_amount*multiplier diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 2ff3114423..46854c6a2a 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -35,7 +35,7 @@ spawn(det_time) prime() return - user.dir = get_dir(user, target) + user.set_dir(get_dir(user, target)) user.drop_item() var/t = (isturf(target) ? target : target.loc) walk_towards(src, t, 3) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 6bb08bb451..70485e67a2 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -169,7 +169,7 @@ if((wielded) && prob(50)) spawn(0) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2)) - user.dir = i + user.set_dir(i) sleep(1) /obj/item/weapon/twohanded/dualsaber/IsShield() diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index 2330e63ecc..28d9ebc623 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -15,7 +15,7 @@ if(istype(W, /obj/item/weapon/wrench)) var/obj/structure/stool/bed/chair/C = new /obj/structure/stool/bed/chair(loc) playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - C.dir = dir + C.set_dir(dir) part.loc = loc part.master = null part = null diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index b12a1a74d0..535b73d3b5 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -170,14 +170,14 @@ /obj/structure/stool/bed/chair/janicart/New() - handle_rotation() create_reagents(100) + update_layer() /obj/structure/stool/bed/chair/janicart/examine(mob/user) if(!..(user, 1)) return - + user << "\icon[src] This [callme] contains [reagents.total_volume] unit\s of water!" if(mybag) user << "\A [mybag] is hanging on the [callme]." @@ -215,7 +215,6 @@ if(istype(user.l_hand, /obj/item/key) || istype(user.r_hand, /obj/item/key)) step(src, direction) update_mob() - handle_rotation() else user << "You'll need the keys in one of your hands to drive this [callme]." @@ -238,13 +237,20 @@ "You climb onto the [callme]!") M.buckled = src M.loc = loc - M.dir = dir + M.set_dir(dir) M.update_canmove() buckled_mob = M update_mob() add_fingerprint(user) +/obj/structure/stool/bed/chair/janicart/update_layer() + if(dir == SOUTH) + layer = FLY_LAYER + else + layer = OBJ_LAYER + + /obj/structure/stool/bed/chair/janicart/unbuckle() if(buckled_mob) buckled_mob.pixel_x = 0 @@ -252,12 +258,9 @@ ..() -/obj/structure/stool/bed/chair/janicart/handle_rotation() - if(dir == SOUTH) - layer = FLY_LAYER - else - layer = OBJ_LAYER - +/obj/structure/stool/bed/chair/janicart/set_dir() + ..() + update_layer() if(buckled_mob) if(buckled_mob.loc != loc) buckled_mob.buckled = null //Temporary, so Move() succeeds. @@ -268,7 +271,7 @@ /obj/structure/stool/bed/chair/janicart/proc/update_mob() if(buckled_mob) - buckled_mob.dir = dir + buckled_mob.set_dir(dir) switch(dir) if(SOUTH) buckled_mob.pixel_x = 0 diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 3db68575c9..e1c8427ecf 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -77,7 +77,7 @@ for(var/atom/movable/A as mob|obj in src) A.loc = src.connected.loc src.connected.icon_state = "morguet" - src.connected.dir = src.dir + src.connected.set_dir(src.dir) else //src.connected = null del(src.connected) diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm index 3c5bbfc1ca..3d21575c74 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm @@ -56,7 +56,7 @@ "You hear squelching...") M.buckled = src M.loc = src.loc - M.dir = src.dir + M.set_dir(src.dir) M.update_canmove() M.pixel_y = 6 M.old_y = 6 diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index a3f99324b7..8902dbc8ec 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -33,9 +33,6 @@ manual_unbuckle(user) return -/obj/structure/stool/bed/proc/handle_rotation() - return - /obj/structure/stool/bed/MouseDrop(atom/over_object) return @@ -104,7 +101,7 @@ "You hear metal clanking") M.buckled = src M.loc = src.loc - M.dir = src.dir + M.set_dir(src.dir) M.update_canmove() src.buckled_mob = M src.add_fingerprint(user) diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 5db6d2f206..0e8e7d5850 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -11,7 +11,7 @@ /obj/structure/stool/bed/chair/New() ..() spawn(3) //sorry. i don't think there's a better way to do this. - handle_rotation() + update_layer() return /obj/structure/stool/bed/chair/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -24,7 +24,7 @@ user.drop_item() var/obj/structure/stool/bed/chair/e_chair/E = new /obj/structure/stool/bed/chair/e_chair(src.loc) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - E.dir = dir + E.set_dir(dir) E.part = SK SK.loc = E SK.master = E @@ -37,13 +37,17 @@ rotate() return -/obj/structure/stool/bed/chair/handle_rotation() //making this into a seperate proc so office chairs can call it on Move() +/obj/structure/stool/bed/chair/proc/update_layer() if(src.dir == NORTH) src.layer = FLY_LAYER else src.layer = OBJ_LAYER + +/obj/structure/stool/bed/chair/set_dir() + ..() + update_layer() if(buckled_mob) - buckled_mob.dir = dir + buckled_mob.set_dir(dir) /obj/structure/stool/bed/chair/verb/rotate() set name = "Rotate Chair" @@ -51,8 +55,7 @@ set src in oview(1) if(config.ghost_interaction) - src.dir = turn(src.dir, 90) - handle_rotation() + src.set_dir(turn(src.dir, 90)) return else if(istype(usr,/mob/living/simple_animal/mouse)) @@ -62,8 +65,7 @@ if(usr.stat || usr.restrained()) return - src.dir = turn(src.dir, 90) - handle_rotation() + src.set_dir(turn(src.dir, 90)) return /obj/structure/stool/bed/chair/MouseDrop_T(mob/M as mob, mob/user as mob) @@ -142,7 +144,6 @@ Bump(O) else unbuckle() - handle_rotation() /obj/structure/stool/bed/chair/office/Bump(atom/A) ..() diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index 8e801de6e2..0ed780ebdd 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -10,12 +10,13 @@ var/bloodiness -/obj/structure/stool/bed/chair/wheelchair/handle_rotation() +/obj/structure/stool/bed/chair/wheelchair/set_dir() + ..() overlays = null var/image/O = image(icon = 'icons/obj/objects.dmi', icon_state = "w_overlay", layer = FLY_LAYER, dir = src.dir) overlays += O if(buckled_mob) - buckled_mob.dir = dir + buckled_mob.set_dir(dir) /obj/structure/stool/bed/chair/wheelchair/relaymove(mob/user, direction) // Redundant check? @@ -64,8 +65,7 @@ step(src, direction) if(buckled_mob) // Make sure it stays beneath the occupant Move(buckled_mob.loc) - dir = direction - handle_rotation() + set_dir(direction) if(pulling) // Driver if(pulling.loc == src.loc) // We moved onto the wheelchair? Revert! pulling.loc = T @@ -74,7 +74,7 @@ if(get_dist(src, pulling) > 1) // We are too far away? Losing control. pulling = null user.pulledby = null - pulling.dir = get_dir(pulling, src) // When everything is right, face the wheelchair + pulling.set_dir(get_dir(pulling, src)) // When everything is right, face the wheelchair if(bloodiness) create_track() driving = 0 @@ -101,7 +101,6 @@ else if (occupant && (src.loc != occupant.loc)) src.loc = occupant.loc // Failsafe to make sure the wheelchair stays beneath the occupant after driving - handle_rotation() /obj/structure/stool/bed/chair/wheelchair/attack_hand(mob/user as mob) if (pulling) @@ -122,7 +121,7 @@ usr.pulledby = src if(usr.pulling) usr.stop_pulling() - usr.dir = get_dir(usr, src) + usr.set_dir(get_dir(usr, src)) usr << "You grip \the [name]'s handles." else if(usr != pulling) @@ -176,14 +175,14 @@ var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) var/newdir = get_dir(get_step(loc, dir), loc) if(newdir == dir) - B.dir = newdir + B.set_dir(newdir) else newdir = newdir | dir if(newdir == 3) newdir = 1 else if(newdir == 12) newdir = 4 - B.dir = newdir + B.set_dir(newdir) bloodiness-- /obj/structure/stool/bed/chair/wheelchair/buckle_mob(mob/M as mob, mob/user as mob) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index bcd09a51cd..2dc9ae8057 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -250,9 +250,9 @@ if(6) icon_state = "tabledir3" if (dir_sum in list(1,2,4,8,5,6,9,10)) - dir = dir_sum + set_dir(dir_sum) else - dir = 2 + set_dir(2) /obj/structure/table/attack_tk() // no telehulk sorry return @@ -445,7 +445,7 @@ spawn(0) A.throw_at(pick(targets),1,1) - dir = direction + set_dir(direction) if(dir != NORTH) layer = 5 climbable = 0 //flipping tables allows them to be used as makeshift barriers diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm index aed971b20d..2c8c534dd4 100644 --- a/code/game/objects/structures/transit_tubes.dm +++ b/code/game/objects/structures/transit_tubes.dm @@ -170,7 +170,7 @@ obj/structure/ex_act(severity) nexttube = tube break if(!nexttube) - pod.dir = turn(pod.dir, 180) + pod.set_dir(turn(pod.dir, 180)) if(icon_state == "closed" && pod) pod.follow_tube() @@ -320,13 +320,13 @@ obj/structure/ex_act(severity) break if(current_tube == null) - dir = next_dir + set_dir(next_dir) Move(get_step(loc, dir)) // Allow collisions when leaving the tubes. break last_delay = current_tube.enter_delay(src, next_dir) sleep(last_delay) - dir = next_dir + set_dir(next_dir) loc = next_loc // When moving from one tube to another, skip collision and such. density = current_tube.density @@ -429,14 +429,14 @@ obj/structure/ex_act(severity) station.open_animation() else if(direction in station.directions()) - dir = direction + set_dir(direction) station.launch_pod() return for(var/obj/structure/transit_tube/tube in loc) if(dir in tube.directions()) if(tube.has_exit(direction)) - dir = direction + set_dir(direction) return diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 9e1b47a0b1..c115f230e2 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -32,9 +32,9 @@ obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0) anchored = 0 switch(start_dir) if(NORTH, SOUTH, EAST, WEST) - dir = start_dir + set_dir(start_dir) else //If the user is facing northeast. northwest, southeast, southwest or north, default to north - dir = NORTH + set_dir(NORTH) update_nearby_tiles(need_rebuild=1) @@ -220,7 +220,7 @@ obj/structure/windoor_assembly/Del() else windoor.icon_state = "rightsecureopen" windoor.base_state = "rightsecure" - windoor.dir = src.dir + windoor.set_dir(src.dir) windoor.density = 0 if(src.electronics.one_access) @@ -238,7 +238,7 @@ obj/structure/windoor_assembly/Del() else windoor.icon_state = "rightopen" windoor.base_state = "right" - windoor.dir = src.dir + windoor.set_dir(src.dir) windoor.density = 0 if(src.electronics.one_access) @@ -272,7 +272,7 @@ obj/structure/windoor_assembly/Del() if(src.state != "01") update_nearby_tiles(need_rebuild=1) //Compel updates before - src.dir = turn(src.dir, 270) + src.set_dir(turn(src.dir, 270)) if(src.state != "01") update_nearby_tiles(need_rebuild=1) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index a8492748a3..73ec443e0a 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -246,7 +246,7 @@ return 0 update_nearby_tiles(need_rebuild=1) //Compel updates before - dir = turn(dir, 90) + set_dir(turn(dir, 90)) // updateSilicate() update_nearby_tiles(need_rebuild=1) return @@ -262,7 +262,7 @@ return 0 update_nearby_tiles(need_rebuild=1) //Compel updates before - dir = turn(dir, 270) + set_dir(turn(dir, 270)) // updateSilicate() update_nearby_tiles(need_rebuild=1) return @@ -292,7 +292,7 @@ anchored = 0 if (start_dir) - dir = start_dir + set_dir(start_dir) health = maxhealth @@ -313,7 +313,7 @@ var/ini_dir = dir update_nearby_tiles(need_rebuild=1) ..() - dir = ini_dir + set_dir(ini_dir) update_nearby_tiles(need_rebuild=1) //checks if this window is full-tile one diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index db622996da..6c417a35e1 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1769,7 +1769,7 @@ else var/atom/O = new path(target) if(O) - O.dir = obj_dir + O.set_dir(obj_dir) if(obj_name) O.name = obj_name if(istype(O,/mob)) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 50b2c86205..3a70e85399 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -60,7 +60,7 @@ var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam((holder ? holder.loc : loc) ) I.master = src I.density = 1 - I.dir = dir + I.set_dir(dir) step(I, I.dir) if(I) I.density = 0 @@ -85,14 +85,14 @@ Move() var/t = dir ..() - dir = t + set_dir(t) del(first) return holder_movement() if(!holder) return 0 -// dir = holder.dir +// set_dir(holder.dir) del(first) return 1 @@ -151,7 +151,7 @@ set category = "Object" set src in usr - dir = turn(dir, 90) + set_dir(turn(dir, 90)) return @@ -213,7 +213,7 @@ var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(loc) I.master = master I.density = 1 - I.dir = dir + I.set_dir(dir) //world << "created new beam \ref[I] at [I.x] [I.y] [I.z]" step(I, I.dir) diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 20864c641e..04c255b94e 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -120,13 +120,13 @@ obj/machinery/gateway/centerstation/process() if(!awaygate) return if(awaygate.calibrated) M.loc = get_step(awaygate.loc, SOUTH) - M.dir = SOUTH + M.set_dir(SOUTH) return else var/obj/effect/landmark/dest = pick(awaydestinations) if(dest) M.loc = dest.loc - M.dir = SOUTH + M.set_dir(SOUTH) use_power(5000) return @@ -222,7 +222,7 @@ obj/machinery/gateway/centerstation/process() M << "\black The station gate has detected your exile implant and is blocking your entry." return M.loc = get_step(stationgate.loc, SOUTH) - M.dir = SOUTH + M.set_dir(SOUTH) /obj/machinery/gateway/centeraway/attackby(obj/item/device/W as obj, mob/user as mob) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index c6487cc9d2..79a3fb2835 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -144,7 +144,7 @@ desc = O.desc icon = O.icon icon_state = O.icon_state - dir = O.dir + set_dir(O.dir) /obj/item/clothing/ears/earmuffs name = "earmuffs" diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index bd3d93ae72..fe6c3ea031 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -295,7 +295,7 @@ proc/check_panel(mob/M) collapse() continue if(get_dist(src,my_target) > 1) - src.dir = get_dir(src,my_target) + src.set_dir(get_dir(src,my_target)) step_towards(src,my_target) updateimage() else diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 4ed2cd0867..7f9d331aac 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -388,5 +388,5 @@ usr << "It is anchored in place!" return 0 - src.dir = turn(src.dir, 90) + src.set_dir(turn(src.dir, 90)) return 1 \ No newline at end of file diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 0f3c764878..c5e1afbc4c 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -182,7 +182,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/Move(NewLoc, direct) following = null - dir = direct + set_dir(direct) if(NewLoc) loc = NewLoc for(var/obj/effect/step_trigger/S in NewLoc) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index eb96d51512..6719756744 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -130,9 +130,9 @@ hud_used.l_hand_hud_object.icon_state = "hand_inactive" hud_used.r_hand_hud_object.icon_state = "hand_active" /*if (!( src.hand )) - src.hands.dir = NORTH + src.hands.set_dir(NORTH) else - src.hands.dir = SOUTH*/ + src.hands.set_dir(SOUTH)*/ return /mob/living/carbon/proc/activate_hand(var/selhand) //0 or "r" or "right" for right hand; 1 or "l" or "left" for left hand. diff --git a/code/modules/mob/living/carbon/monkey/npc.dm b/code/modules/mob/living/carbon/monkey/npc.dm index f863558605..a7d4bfc7ae 100644 --- a/code/modules/mob/living/carbon/monkey/npc.dm +++ b/code/modules/mob/living/carbon/monkey/npc.dm @@ -53,7 +53,7 @@ mob/living/carbon/monkey/proc/npc_act() hiding_behind = null hid_behind = 0 - if(loc == prevloc) dir = get_dir(src, npc_fleeing) + if(loc == prevloc) set_dir(get_dir(src, npc_fleeing)) else if(prob(33) && canmove && isturf(loc)) step(src, pick(cardinal)) diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 2b632c70f5..162038dd07 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -297,15 +297,15 @@ if(movement_target) //Not redundant due to sleeps, Item can be gone in 6 decisecomds if (movement_target.loc.x < src.x) - dir = WEST + set_dir(WEST) else if (movement_target.loc.x > src.x) - dir = EAST + set_dir(EAST) else if (movement_target.loc.y < src.y) - dir = SOUTH + set_dir(SOUTH) else if (movement_target.loc.y > src.y) - dir = NORTH + set_dir(NORTH) else - dir = SOUTH + set_dir(SOUTH) if(isturf(movement_target.loc) ) UnarmedAttack(movement_target) @@ -316,7 +316,7 @@ visible_emote(pick("dances around","chases their tail")) spawn(0) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) - dir = i + set_dir(i) sleep(1) /obj/item/weapon/reagent_containers/food/snacks/meat/corgi @@ -369,7 +369,7 @@ M.show_message("\blue [user] baps [name] on the nose with the rolled up [O]") spawn(0) for(var/i in list(1,2,4,8,4,2,1,2)) - dir = i + set_dir(i) sleep(1) else ..() @@ -471,5 +471,5 @@ visible_emote(pick("dances around","chases her tail")) spawn(0) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) - dir = i + set_dir(i) sleep(1) diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index fa3e8c2385..5bc3d41afc 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -74,7 +74,7 @@ stance_step = max(0, stance_step) //If we have not seen a mob in a while, the stance_step will be negative, we need to reset it to 0 as soon as we see a mob again. stance_step++ found_mob = 1 - src.dir = get_dir(src,target_mob) //Keep staring at the mob + src.set_dir(get_dir(src,target_mob)) //Keep staring at the mob if(stance_step in list(1,4,7)) //every 3 ticks var/action = pick( list( "growls at [target_mob]", "stares angrily at [target_mob]", "prepares to attack [target_mob]", "closely watches [target_mob]" ) ) diff --git a/code/modules/mob/living/simple_animal/worm.dm b/code/modules/mob/living/simple_animal/worm.dm index 6dad3655e3..0df4f5c7c4 100644 --- a/code/modules/mob/living/simple_animal/worm.dm +++ b/code/modules/mob/living/simple_animal/worm.dm @@ -75,7 +75,7 @@ if(stat == CONSCIOUS || stat == UNCONSCIOUS) icon_state = "spacewormhead[previous?1:0]" if(previous) - dir = get_dir(previous,src) + set_dir(get_dir(previous,src)) else icon_state = "spacewormheaddead" @@ -129,7 +129,7 @@ icon_state = "spaceworm[get_dir(src,previous) | get_dir(src,next)]" //see 3 lines below else //tail icon_state = "spacewormtail" - dir = get_dir(src,next) //next will always be present since it's not a head and if it's dead, it goes in the other if branch + set_dir(get_dir(src,next)) //next will always be present since it's not a head and if it's dead, it goes in the other if branch else icon_state = "spacewormdead" diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index fa70ccbfc5..6bf10756d0 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -905,10 +905,9 @@ note dizziness decrements automatically in the mob's Life() proc. /mob/proc/facedir(var/ndir) if(!canface()) return 0 - dir = ndir + set_dir(ndir) if(buckled && buckled.movable) - buckled.dir = ndir - buckled.handle_rotation() + buckled.set_dir(ndir) client.move_delay += movement_delay() return 1 diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index f999b26ec0..da6d01de79 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -110,8 +110,8 @@ */ return - -/atom/movable/Move(NewLoc, direct) +//This proc should never be overridden elsewhere at /atom/movable to keep directions sane. +/atom/movable/Move(newloc, direct) if (direct & (direct - 1)) if (direct & 1) if (direct & 4) @@ -143,9 +143,20 @@ if (step(src, WEST)) step(src, SOUTH) else - . = ..() - return + var/atom/A = src.loc + var/olddir = dir //we can't override this without sacrificing the rest of movable/New() + . = ..() + if(direct != olddir) + dir = olddir + set_dir(direct) + + src.move_speed = world.time - src.l_move_time + src.l_move_time = world.time + src.m_flag = 1 + if ((A != src.loc && A && A.z == src.z)) + src.last_move = get_dir(A, src.loc) + return /client/proc/Move_object(direct) if(mob && mob.control_object) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 48d0140d90..00c6f9d05e 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -334,7 +334,7 @@ // Moving wheelchair if they have one if(character.buckled && istype(character.buckled, /obj/structure/stool/bed/chair/wheelchair)) character.buckled.loc = character.loc - character.buckled.dir = character.dir + character.buckled.set_dir(character.dir) ticker.mode.latespawn(character) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 6d830d1559..7816b914cf 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -1037,7 +1037,7 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H) base.Blend(rgb(H.r_skin, H.g_skin, H.b_skin), ICON_ADD) icon = base - dir = SOUTH + set_dir(SOUTH) src.transform = turn(src.transform, rand(70,130)) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 510602122f..45114d9e78 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -143,9 +143,9 @@ // offset 24 pixels in direction of dir // this allows the APC to be embedded in a wall, yet still inside an area if (building) - dir = ndir + set_dir(ndir) src.tdir = dir // to fix Vars bug - dir = SOUTH + set_dir(SOUTH) pixel_x = (src.tdir & 3)? 0 : (src.tdir == 4 ? 24 : -24) pixel_y = (src.tdir & 3)? (src.tdir ==1 ? 24 : -24) : 0 @@ -184,7 +184,7 @@ // create a terminal object at the same position as original turf loc // wires will attach to this terminal = new/obj/machinery/power/terminal(src.loc) - terminal.dir = tdir + terminal.set_dir(tdir) terminal.master = src /obj/machinery/power/apc/proc/init() diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index e6bd2151c8..c574c37ef8 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -191,7 +191,7 @@ if (usr.stat || usr.restrained() || anchored) return - src.dir = turn(src.dir, 90) + src.set_dir(turn(src.dir, 90)) /obj/machinery/power/generator/verb/rotate_anticlock() set category = "Object" @@ -201,4 +201,4 @@ if (usr.stat || usr.restrained() || anchored) return - src.dir = turn(src.dir, -90) \ No newline at end of file + src.set_dir(turn(src.dir, -90)) \ No newline at end of file diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 4ae6e0b254..59e93c23b6 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -33,7 +33,7 @@ if (src.anchored || usr:stat) usr << "It is fastened to the floor!" return 0 - src.dir = turn(src.dir, 90) + src.set_dir(turn(src.dir, 90)) return 1 /obj/machinery/power/emitter/initialize() @@ -137,7 +137,7 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() - A.dir = src.dir + A.set_dir(src.dir) switch(dir) if(NORTH) A.yo = 20 diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index cf339eff30..501ccd989a 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -299,7 +299,7 @@ field_generator power level display fields += CF G.fields += CF CF.loc = T - CF.dir = field_dir + CF.set_dir(field_dir) var/listcheck = 0 for(var/obj/machinery/field_generator/FG in connected_gens) if (isnull(FG)) diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index 0fc32904ab..cbec31306b 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -29,7 +29,7 @@ /obj/effect/accelerated_particle/New(loc, dir = 2) src.loc = loc - src.dir = dir + src.set_dir(dir) if(movement_range > 20) movement_range = 20 spawn(0) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index a122fd12f3..6739bd165e 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -91,7 +91,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin if (src.anchored || usr:stat) usr << "It is fastened to the floor!" return 0 - src.dir = turn(src.dir, 270) + src.set_dir(turn(src.dir, 270)) return 1 /obj/structure/particle_accelerator/verb/rotateccw() @@ -102,7 +102,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin if (src.anchored || usr:stat) usr << "It is fastened to the floor!" return 0 - src.dir = turn(src.dir, 90) + src.set_dir(turn(src.dir, 90)) return 1 /obj/structure/particle_accelerator/examine(mob/user) @@ -282,7 +282,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin if (src.anchored || usr:stat) usr << "It is fastened to the floor!" return 0 - src.dir = turn(src.dir, 270) + src.set_dir(turn(src.dir, 270)) return 1 /obj/machinery/particle_accelerator/verb/rotateccw() @@ -293,7 +293,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin if (src.anchored || usr:stat) usr << "It is fastened to the floor!" return 0 - src.dir = turn(src.dir, 90) + src.set_dir(turn(src.dir, 90)) return 1 /obj/machinery/particle_accelerator/update_icon() diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 5b30c000c7..26239ff567 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -157,7 +157,7 @@ /obj/machinery/particle_accelerator/control_box/proc/part_scan() for(var/obj/structure/particle_accelerator/fuel_chamber/F in orange(1,src)) - src.dir = F.dir + src.set_dir(F.dir) connected_parts = list() var/tally = 0 var/ldir = turn(dir,-90) diff --git a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm index 01666774a9..ff6a444a53 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm @@ -44,6 +44,6 @@ if(2) A = new/obj/effect/accelerated_particle/strong(T, dir) if(A) - A.dir = src.dir + A.set_dir(src.dir) return 1 return 0 diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index f18aa2eb2a..611c8546f3 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -207,7 +207,7 @@ user << "You start adding cable to the [src]." if(do_after(user, 50)) terminal = new /obj/machinery/power/terminal(tempLoc) - terminal.dir = tempDir + terminal.set_dir(tempDir) terminal.master = src return 0 return 1 diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index a3cf39280d..861665b462 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -102,7 +102,7 @@ var/list/solars_list = list() overlays += image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER) else overlays += image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER) - src.dir = angle2dir(adir) + src.set_dir(angle2dir(adir)) return //calculates the fraction of the sunlight that the panel recieves diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 92b6d2924c..38824dec5d 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -52,7 +52,7 @@ sun_angle = angle //set icon dir to show sun illumination - dir = turn(NORTH, -angle - 22.5) // 22.5 deg bias ensures, e.g. 67.5-112.5 is EAST + set_dir(turn(NORTH, -angle - 22.5)) // 22.5 deg bias ensures, e.g. 67.5-112.5 is EAST if(powernet && (powernet == control.powernet)) //update if we're still in the same powernet control.cdir = angle diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 972f6206ae..610c0f28a3 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -18,7 +18,7 @@ BB = new projectile_type(src) pixel_x = rand(-10.0, 10) pixel_y = rand(-10.0, 10) - dir = pick(cardinal) + set_dir(pick(cardinal)) /obj/item/ammo_casing/attackby(obj/item/weapon/W as obj, mob/user as mob) diff --git a/code/modules/projectiles/targeting.dm b/code/modules/projectiles/targeting.dm index ddacdbead5..496455f24e 100644 --- a/code/modules/projectiles/targeting.dm +++ b/code/modules/projectiles/targeting.dm @@ -48,7 +48,7 @@ //Lets not spam it. if(lock_time > world.time - 2) return - user.dir = get_cardinal_dir(src, A) + user.set_dir(get_cardinal_dir(src, A)) if(isliving(A) && !(A in target)) Aim(A) //Clicked a mob, aim at them return 1 @@ -103,7 +103,7 @@ else click_empty(M) - usr.dir = get_cardinal_dir(src, T) + usr.set_dir(get_cardinal_dir(src, T)) if (!firerate) // If firerate is set to lower aim after one shot, untarget the target T.NotTargeted(src) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 314e6dbccf..2244e98bf1 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -24,7 +24,7 @@ /obj/machinery/conveyor/New(loc, newdir, on = 0) ..(loc) if(newdir) - dir = newdir + set_dir(newdir) switch(dir) if(NORTH) forwards = NORTH diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index b4c8cfc2f5..8b26dd3133 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -111,7 +111,7 @@ usr << "You must unfasten the pipe before rotating it." return - dir = turn(dir, -90) + set_dir(turn(dir, -90)) update() verb/flip() @@ -125,7 +125,7 @@ usr << "You must unfasten the pipe before flipping it." return - dir = turn(dir, 180) + set_dir(turn(dir, 180)) switch(ptype) if(2) ptype = 3 @@ -260,7 +260,7 @@ var/obj/structure/disposalpipe/P = new pipetype(src.loc) src.transfer_fingerprints_to(P) P.base_icon_state = base_state - P.dir = dir + P.set_dir(dir) P.dpdir = dpdir P.updateicon() @@ -278,7 +278,7 @@ var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc) src.transfer_fingerprints_to(P) - P.dir = dir + P.set_dir(dir) var/obj/structure/disposalpipe/trunk/Trunk = CP Trunk.linked = P @@ -286,7 +286,7 @@ var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc) src.transfer_fingerprints_to(P) - P.dir = dir + P.set_dir(dir) del(src) return diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 3b5d5a197a..2bfac53547 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -543,7 +543,7 @@ loc = D.trunk active = 1 - dir = DOWN + set_dir(DOWN) spawn(1) move() // spawn off the movement process @@ -702,7 +702,7 @@ // proc/transfer(var/obj/structure/disposalholder/H) var/nextdir = nextdir(H.dir) - H.dir = nextdir + H.set_dir(nextdir) var/turf/T = H.nextloc() var/obj/structure/disposalpipe/P = H.findpipe(T) @@ -808,7 +808,7 @@ for(var/D in cardinal) if(D & dpdir) var/obj/structure/disposalpipe/broken/P = new(src.loc) - P.dir = D + P.set_dir(D) src.invisibility = 101 // make invisible (since we won't delete the pipe immediately) var/obj/structure/disposalholder/H = locate() in src @@ -919,7 +919,7 @@ if("pipe-tagger-partial") C.ptype = 14 src.transfer_fingerprints_to(C) - C.dir = dir + C.set_dir(dir) C.density = 0 C.anchored = 1 C.update() @@ -965,7 +965,7 @@ transfer(var/obj/structure/disposalholder/H) var/nextdir = nextdir(H.dir) - H.dir = nextdir + H.set_dir(nextdir) var/turf/T var/obj/structure/disposalpipe/P @@ -1229,7 +1229,7 @@ transfer(var/obj/structure/disposalholder/H) var/nextdir = nextdir(H.dir, H.destinationTag) - H.dir = nextdir + H.set_dir(nextdir) var/turf/T = H.nextloc() var/obj/structure/disposalpipe/P = H.findpipe(T) diff --git a/code/modules/research/xenoarchaeology/tools/suspension_generator.dm b/code/modules/research/xenoarchaeology/tools/suspension_generator.dm index 9b461b5d19..9f498d3faa 100644 --- a/code/modules/research/xenoarchaeology/tools/suspension_generator.dm +++ b/code/modules/research/xenoarchaeology/tools/suspension_generator.dm @@ -322,7 +322,7 @@ if(anchored) usr << "\red You cannot rotate [src], it has been firmly fixed to the floor." else - dir = turn(dir, 90) + set_dir(turn(dir, 90)) /obj/machinery/suspension_gen/verb/rotate_cw() set src in view(1) @@ -332,7 +332,7 @@ if(anchored) usr << "\red You cannot rotate [src], it has been firmly fixed to the floor." else - dir = turn(dir, -90) + set_dir(turn(dir, -90)) /obj/effect/suspension_field name = "energy field" diff --git a/code/modules/research/xenoarchaeology/tools/tools_locater.dm b/code/modules/research/xenoarchaeology/tools/tools_locater.dm index dfecd5979b..ad84f0e010 100644 --- a/code/modules/research/xenoarchaeology/tools/tools_locater.dm +++ b/code/modules/research/xenoarchaeology/tools/tools_locater.dm @@ -22,7 +22,7 @@ /obj/item/device/beacon_locator/process() if(target_radio) - dir = get_dir(src,target_radio) + set_dir(get_dir(src,target_radio)) switch(get_dist(src,target_radio)) if(0 to 3) icon_state = "pinondirect" diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index 8ecb5fb3b1..a361631960 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -13,7 +13,7 @@ var/shield_idle_power = 1500 //how much power we use when just being sustained. /obj/machinery/shield/New() - src.dir = pick(1,2,3,4) + src.set_dir(pick(1,2,3,4)) ..() update_nearby_tiles(need_rebuild=1) diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm index 9bce6c3597..d2d8148c13 100644 --- a/code/modules/shieldgen/sheldwallgen.dm +++ b/code/modules/shieldgen/sheldwallgen.dm @@ -154,7 +154,7 @@ T2 = T var/obj/machinery/shieldwall/CF = new/obj/machinery/shieldwall/(src, G) //(ref to this gen, ref to connected gen) CF.loc = T - CF.dir = field_dir + CF.set_dir(field_dir) /obj/machinery/shieldwallgen/attackby(obj/item/W, mob/user) diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm index 2893f11b89..0c26178314 100644 --- a/code/modules/shieldgen/shield_capacitor.dm +++ b/code/modules/shieldgen/shield_capacitor.dm @@ -149,5 +149,5 @@ if (src.anchored) usr << "It is fastened to the floor!" return - src.dir = turn(src.dir, 270) + src.set_dir(turn(src.dir, 270)) return diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index d8e372d818..c323eed809 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -155,7 +155,7 @@ //latch with src as the follower lead = T T.tow = src - dir = lead.dir + set_dir(lead.dir) if(user) user << "\blue You hitch [src] to [T]." diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 5b40c9e5fc..b674655204 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -55,7 +55,7 @@ if(load) load.forceMove(loc)// = loc - load.dir = dir + load.set_dir(dir) return 1 else @@ -140,7 +140,7 @@ pulse2.icon_state = "empdisable" pulse2.name = "emp sparks" pulse2.anchored = 1 - pulse2.dir = pick(cardinal) + pulse2.set_dir(pick(cardinal)) spawn(10) pulse2.delete() @@ -154,9 +154,6 @@ /obj/vehicle/attack_ai(mob/user as mob) return -/obj/vehicle/proc/handle_rotation() - return - //------------------------------------------- // Vehicle procs //------------------------------------------- @@ -273,7 +270,7 @@ crate.close() C.forceMove(loc) - C.dir = dir + C.set_dir(dir) C.anchored = 1 load = C @@ -325,7 +322,7 @@ return 0 load.forceMove(dest) - load.dir = get_dir(loc, dest) + load.set_dir(get_dir(loc, dest)) load.anchored = initial(load.anchored) load.pixel_x = initial(load.pixel_x) load.pixel_y = initial(load.pixel_y) diff --git a/code/unused/Agouri_stuff.dm b/code/unused/Agouri_stuff.dm index bb5e7d3b35..e204fbd7d3 100644 --- a/code/unused/Agouri_stuff.dm +++ b/code/unused/Agouri_stuff.dm @@ -539,7 +539,7 @@ var/turf/simulated/floor/W = new /turf/simulated/floor( locate(src.x, src.y, src.z) ) W.RemoveLattice() - W.dir = old_dir + W.set_dir(old_dir) if(prior_icon) W.icon_state = prior_icon else W.icon_state = "floor" @@ -557,7 +557,7 @@ var/turf/simulated/floor/plating/W = new /turf/simulated/floor/plating( locate(src.x, src.y, src.z) ) W.RemoveLattice() - W.dir = old_dir + W.set_dir(old_dir) if(prior_icon) W.icon_state = prior_icon else W.icon_state = "plating" W.opacity = 1 @@ -570,7 +570,7 @@ var/turf/simulated/floor/engine/E = new /turf/simulated/floor/engine( locate(src.x, src.y, src.z) ) - E.dir = old_dir + E.set_dir(old_dir) E.icon_state = "engine" /turf/simulated/Entered(atom/A, atom/OL) @@ -633,13 +633,13 @@ /turf/proc/ReplaceWithSpace() var/old_dir = dir var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) - S.dir = old_dir + S.set_dir(old_dir) return S /turf/proc/ReplaceWithLattice() var/old_dir = dir var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) - S.dir = old_dir + S.set_dir(old_dir) new /obj/structure/lattice( locate(src.x, src.y, src.z) ) return S diff --git a/code/unused/_debug.dm b/code/unused/_debug.dm index 6b8bb9c3e3..fb4a994f28 100644 --- a/code/unused/_debug.dm +++ b/code/unused/_debug.dm @@ -502,7 +502,7 @@ Doing this because FindTurfs() isn't even used set category = "Debug" if(Debug) var/obj/effect/smoke/O = new /obj/effect/smoke( src.loc ) - O.dir = pick(NORTH, SOUTH, EAST, WEST) + O.set_dir(pick(NORTH, SOUTH, EAST, WEST)) spawn( 0 ) O.Life() else diff --git a/code/unused/assemblies.dm b/code/unused/assemblies.dm index 8f7d0f71e1..2c6909287a 100644 --- a/code/unused/assemblies.dm +++ b/code/unused/assemblies.dm @@ -480,8 +480,8 @@ set category = "Object" set src in usr - src.dir = turn(src.dir, 90) - src.part2.dir = src.dir + src.set_dir(turn(src.dir, 90)) + src.part2.set_dir(src.dir) src.add_fingerprint(usr) return @@ -489,7 +489,7 @@ var/t = src.dir ..() - src.dir = t + src.set_dir(t) //src.part2.first = null del(src.part2.first) return diff --git a/code/unused/asteroiddevice.dm b/code/unused/asteroiddevice.dm index f9c6aa9185..57a5747cfe 100644 --- a/code/unused/asteroiddevice.dm +++ b/code/unused/asteroiddevice.dm @@ -47,7 +47,7 @@ var/atom/cur_loc = src.loc if(cur_loc.z == beacon.z) - src.dir = get_dir(cur_loc,beacon) + src.set_dir(get_dir(cur_loc,beacon)) else var/list/beacon_global_loc = beacon.get_global_map_pos() var/list/src_global_loc = cur_loc.get_global_map_pos() @@ -64,7 +64,7 @@ else if(beacon_global_loc["y"] Date: Tue, 2 Dec 2014 11:26:44 +1030 Subject: [PATCH 08/20] Fixes #7209 --- code/game/gamemodes/events/space_ninja.dm | 14 +- code/modules/clothing/spacesuits/rig/rig.dm | 121 ++++++++++-------- .../clothing/spacesuits/rig/rig_attackby.dm | 1 + .../clothing/spacesuits/rig/rig_verbs.dm | 21 +-- 4 files changed, 86 insertions(+), 71 deletions(-) diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index 97bb3e2404..1bf2406db5 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -531,7 +531,19 @@ As such, it's hard-coded for now. No reason for it not to be, really. else equip_to_slot_or_del(new /obj/item/clothing/under/color/black(src), slot_w_uniform) - equip_to_slot_or_del(new /obj/item/weapon/rig/light/ninja(src), slot_back) + var/obj/item/weapon/rig/light/ninja/ninjasuit = new(src) + + // Make sure the ninja can actually equip the suit. + if(src.dna && src.dna.unique_enzymes) + src << "Suit hardware locked to your DNA hash." + ninjasuit.locked_dna = src.dna.unique_enzymes + else + ninjasuit.req_access = list() + + equip_to_slot_or_del(ninjasuit,slot_back) + spawn(10) + ninjasuit.toggle_seals(src,1) + equip_to_slot_or_del(new /obj/item/clothing/mask/gas/voice/space_ninja(src), slot_wear_mask) equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_belt) equip_to_slot_or_del(new /obj/item/weapon/tank/oxygen(src), slot_s_store) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 7fdffb00f2..de586a2707 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -63,6 +63,7 @@ var/malfunction_delay = 0 var/electrified = 0 var/locked_down = 0 + var/locked_dna = null var/sealing // Keeps track of seal status independantly of canremove. var/offline = 1 // Should we be applying suit maluses? @@ -139,12 +140,6 @@ piece.siemens_coefficient = siemens_coefficient piece.permeability_coefficient = permeability_coefficient - spawn(1) - var/mob/M = loc - if(istype(M)) - toggle_seals(M,1) - update_icon() - /obj/item/weapon/rig/Del() for(var/obj/item/piece in list(gloves,boots,helmet,chest)) var/mob/living/M = piece.loc @@ -171,9 +166,6 @@ if(sealing) return - if(M && !(istype(M) && M.back == src ) && !istype(M,/mob/living/silicon)) - return 0 - if(!check_power_cost(M)) return 0 @@ -189,19 +181,13 @@ M << "The suit flashes an error light. It can't function properly without being fully deployed." failed_to_seal = 1 - if(!failed_to_seal && instant) - for(var/obj/item/piece in list(helmet,boots,gloves,chest)) - if(!piece) continue - piece.icon_state = "[initial(icon_state)]_sealed" - update_icon() + if(!failed_to_seal) - else if(!failed_to_seal) - - M << "With a quiet hum, the suit begins running checks and adjusting components." - - if(!do_after(M,SEAL_DELAY)) - if(M) M << "You must remain still while the suit is adjusting the components." - failed_to_seal = 1 + if(!instant) + M << "With a quiet hum, the suit begins running checks and adjusting components." + if(!do_after(M,SEAL_DELAY)) + if(M) M << "You must remain still while the suit is adjusting the components." + failed_to_seal = 1 if(!M) failed_to_seal = 1 @@ -222,7 +208,12 @@ failed_to_seal = 1 break - if(M.back == src && piece == compare_piece && do_after(M,SEAL_DELAY)) + if(M.back == src && piece == compare_piece) + + if(!instant) + if(!do_after(M,SEAL_DELAY)) + failed_to_seal = 1 + piece.icon_state = "[initial(icon_state)][!seal_target ? "_sealed" : ""]" switch(msg_type) if("boots") @@ -292,6 +283,10 @@ piece.flags |= AIRTIGHT update_icon(1) + if(instant && air_supply) + wearer.internals = air_supply + wearer.internals.icon_state = "internal1" + /obj/item/weapon/rig/process() if(!istype(wearer) || loc != wearer || wearer.back != src || canremove || !cell || cell.charge <= 0) @@ -477,45 +472,59 @@ wearer.update_inv_back() return +/obj/item/weapon/rig/proc/check_suit_access(var/mob/living/carbon/human/user) + + if(!security_check_enabled) + return 1 + + if(istype(user)) + if(user.back != src) + return 0 + if(locked_dna) + if(!user.dna || user.dna.unique_enzymes != locked_dna) + user << "DNA scan mismatch. Access denied." + return 0 + else if(!src.allowed(user)) + user << "Unauthorized user. Access denied." + return 0 + + else if(user.loc && user.loc.loc && istype(user.loc.loc,/obj/item/rig_module/ai_container)) + if(!ai_override_enabled) + user << "Synthetic access disabled. Please consult hardware provider." + return 0 + + return 1 + /obj/item/weapon/rig/Topic(href,href_list) - var/mob/living/carbon/human/H = usr + if(!check_suit_access(usr)) + return - if((istype(H) && H.back == src) || (istype(H,/mob/living/silicon))) + if(href_list["toggle_piece"]) + toggle_piece(href_list["toggle_piece"], usr) + else if(href_list["toggle_seals"]) + toggle_seals(usr) + else if(href_list["interact_module"]) - if(istype(H,/mob/living/silicon)) - if(!ai_override_enabled) - usr << "Synthetic access disabled. Please consult hardware provider." - return - else if(security_check_enabled && !src.allowed(usr)) - usr << "Access denied." - return + var/module_index = text2num(href_list["interact_module"]) - if(href_list["toggle_piece"]) - toggle_piece(href_list["toggle_piece"], H) - else if(href_list["toggle_seals"]) - toggle_seals(H) - else if(href_list["interact_module"]) - - var/module_index = text2num(href_list["interact_module"]) - - if(module_index > 0 && module_index <= installed_modules.len) - var/obj/item/rig_module/module = installed_modules[module_index] - switch(href_list["module_mode"]) - if("activate") - module.activate() - if("deactivate") - module.deactivate() - if("engage") - module.engage() - if("select") - selected_module = module - if("select_charge_type") - module.charge_selected = href_list["charge_type"] - else if(href_list["toggle_ai_control"]) - ai_override_enabled = !ai_override_enabled - else if(href_list["toggle_suit_lock"]) - locked = !locked + if(module_index > 0 && module_index <= installed_modules.len) + var/obj/item/rig_module/module = installed_modules[module_index] + switch(href_list["module_mode"]) + if("activate") + module.activate() + if("deactivate") + module.deactivate() + if("engage") + module.engage() + if("select") + selected_module = module + if("select_charge_type") + module.charge_selected = href_list["charge_type"] + else if(href_list["toggle_ai_control"]) + ai_override_enabled = !ai_override_enabled + else if(href_list["toggle_suit_lock"]) + locked = !locked usr.set_machine(src) src.add_fingerprint(usr) diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm index 26a2621e2c..1b54b8f1ee 100644 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm @@ -20,6 +20,7 @@ user << "It looks like the locking system has been shorted out." return else if(istype(W, /obj/item/weapon/card/emag)) + locked_dna = null req_access = null req_one_access = null locked = 0 diff --git a/code/modules/clothing/spacesuits/rig/rig_verbs.dm b/code/modules/clothing/spacesuits/rig/rig_verbs.dm index 5347bbc5b9..9ec6f03df7 100644 --- a/code/modules/clothing/spacesuits/rig/rig_verbs.dm +++ b/code/modules/clothing/spacesuits/rig/rig_verbs.dm @@ -27,8 +27,7 @@ usr << "The suit is not active." return - if((security_check_enabled && !src.allowed(wearer)) || control_overridden) - wearer << "Access denied." + if(!check_suit_access(usr)) return if(!visor) @@ -51,8 +50,7 @@ usr << "The hardsuit is not being worn." return - if((security_check_enabled && !src.allowed(wearer)) || control_overridden) - wearer << "Access denied." + if(!check_suit_access(usr)) return toggle_piece("helmet",wearer) @@ -64,8 +62,7 @@ set category = "Hardsuit" set src = usr.contents - if((security_check_enabled && !src.allowed(wearer)) || control_overridden) - wearer << "Access denied." + if(!check_suit_access(usr)) return toggle_piece("chest",wearer) @@ -81,8 +78,7 @@ usr << "The hardsuit is not being worn." return - if((security_check_enabled && !src.allowed(wearer)) || control_overridden) - wearer << "Access denied." + if(!check_suit_access(usr)) return toggle_piece("gauntlets",wearer) @@ -98,8 +94,7 @@ usr << "The hardsuit is not being worn." return - if((security_check_enabled && !src.allowed(wearer)) || control_overridden) - wearer << "Access denied." + if(!check_suit_access(usr)) return toggle_piece("boots",wearer) @@ -115,8 +110,7 @@ usr << "The hardsuit is not being worn." return - if((security_check_enabled && !src.allowed(wearer)) || control_overridden) - wearer << "Access denied." + if(!check_suit_access(usr)) return if(!check_power_cost(usr)) @@ -135,8 +129,7 @@ usr << "The hardsuit is not being worn." return - if((security_check_enabled && !src.allowed(wearer)) || control_overridden) - wearer << "Access denied." + if(!check_suit_access(usr)) return toggle_seals(wearer) From 0f2b0b79bdcff887084910265056450f20ad3fb4 Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Wed, 26 Nov 2014 23:32:16 +1300 Subject: [PATCH 09/20] Initial rig ui pass - Narrowed UI window, we shouldn't need it this wide once I'm done - Started converting html template to divs for easier formatting --- code/modules/clothing/spacesuits/rig/rig.dm | 2 +- nano/templates/hardsuit.tmpl | 202 ++++++++++---------- 2 files changed, 103 insertions(+), 101 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 7fdffb00f2..2f6196f558 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -442,7 +442,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) - ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 750, 550) + ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 500, 600) ui.set_initial_data(data) ui.open() ui.set_auto_update(1) diff --git a/nano/templates/hardsuit.tmpl b/nano/templates/hardsuit.tmpl index db07636eb7..e416afaaea 100644 --- a/nano/templates/hardsuit.tmpl +++ b/nano/templates/hardsuit.tmpl @@ -9,127 +9,129 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm {{if data.aicontrol && data.ai != 1}} -- HARDSUIT CONTROL OVERRIDDEN BY AI -- {{else}} - - - - - - - - - - - - - - - - - - - - -
- Power supply - +
+
+
+ Power supply +
+
{{:helper.displayBar(data.chargestatus, 0, 50, (data.chargestatus >= 35) ? 'good' : (data.chargestatus >= 15) ? 'average' : 'bad')}} {{:data.charge}}/{{:data.maxcharge}} -
- AI control: - - {{if data.aioverride}} - ENABLED - {{else}} - DISABLED - {{/if}} - - {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_ai_control' : 1}, null)}} -
- Suit status: - - {{if data.sealing == 1}} - SEALING - {{else}} - {{if data.seals == 1}} - OPEN + + +
+
+
+ AI control: +
+
+ {{if data.aioverride}} + ENABLED {{else}} - SEALED + DISABLED {{/if}} - {{/if}} -
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_seals' : 1}, null)}} -
- Cover status: - - {{if data.emagged || !data.securitycheck}} - ERROR - MAINTENANCE LOCK CONTROL OFFLINE - {{else}} - {{if data.coverlock}} - LOCKED + +
+ {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_ai_control' : 1}, null)}} +
+ +
+
+ Suit status: +
+
+ {{if data.sealing == 1}} + SEALING {{else}} - UNLOCKED + {{if data.seals == 1}} + OPEN + {{else}} + SEALED + {{/if}} {{/if}} - {{/if}} -
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_suit_lock' : 1}, null)}} -
+ +
+ {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_seals' : 1}, null)}} +
+ +
+
+ Cover status: +
+
+ {{if data.emagged || !data.securitycheck}} + ERROR - MAINTENANCE LOCK CONTROL OFFLINE + {{else}} + {{if data.coverlock}} + LOCKED + {{else}} + UNLOCKED + {{/if}} + {{/if}} +
+
+ {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_suit_lock' : 1}, null)}} +
+
+ +

Hardware

Suit pieces

- - - - - - - - - - - - - - - - - - - - - -
- Helmet: - - {{:data.helmet}}
-
+
+
+
+ Helmet: +
+
+ {{:data.helmet}} +
+
{{if data.sealing != 1}} {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'helmet'}, null)}}
{{/if}} -
- Gauntlets: - - {{:data.gauntlets}}
-
+ + +
+
+ Gauntlets: +
+
+ {{:data.gauntlets}} +
+
{{if data.sealing != 1}} {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'gauntlets'}, null)}}
{{/if}} -
- Boots: - - {{:data.boots}}
-
+ + +
+
+ Boots: +
+
+ {{:data.boots}} +
+
{{if data.sealing != 1}} {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'boots'}, null)}}
{{/if}} -
- Chestpiece: - - {{:data.chest}}
-
+ + +
+
+ Chestpiece: +
+
+ {{:data.chest}} +
+
{{if data.sealing != 1}} {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'chest'}, null)}}
{{/if}} -
+ + +

System modules

{{if data.seals == 1 || data.sealing == 1}} From 9e48b9706812dba525d0a2e05fbef15b9c8785a1 Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Sun, 30 Nov 2014 23:16:58 +1300 Subject: [PATCH 10/20] Capitalization function - adds a NanoUI helper function which the first character in a string --- nano/js/nano_base_helpers.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js index c9a190679a..d5a019e2f8 100644 --- a/nano/js/nano_base_helpers.js +++ b/nano/js/nano_base_helpers.js @@ -83,6 +83,10 @@ NanoBaseHelpers = function () parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); return parts.join("."); }, + // Capitalize the first letter of a string. From http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript + capitalizeFirstLetter: function(string) { + return string.charAt(0).toUpperCase() + string.slice(1); + }, // Display a bar. Used to show health, capacity, etc. displayBar: function(value, rangeMin, rangeMax, styleClass, showText) { From acab8eb1cc0fbd360536bd592e981c9ab3e99cde Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Sun, 30 Nov 2014 23:18:39 +1300 Subject: [PATCH 11/20] Second rig UI pass - Converted remaining code to class controlled divs - Added prototype modules layout --- nano/templates/hardsuit.tmpl | 169 +++++++++++++++++++---------------- 1 file changed, 91 insertions(+), 78 deletions(-) diff --git a/nano/templates/hardsuit.tmpl b/nano/templates/hardsuit.tmpl index e416afaaea..bdcffae21d 100644 --- a/nano/templates/hardsuit.tmpl +++ b/nano/templates/hardsuit.tmpl @@ -3,6 +3,23 @@ Title: Integrated Hardsuit Controller Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm --> + + {{if data.interfacelock || data.malf > 0}} -- HARDSUIT INTERFACE OFFLINE -- {{else}} @@ -10,7 +27,7 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm -- HARDSUIT CONTROL OVERRIDDEN BY AI -- {{else}}
-
+
Power supply
@@ -19,7 +36,7 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm
-
+
AI control:
@@ -34,7 +51,7 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_ai_control' : 1}, null)}}
-
+
Suit status:
@@ -53,7 +70,7 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_seals' : 1}, null)}}
-
+
Cover status:
@@ -79,101 +96,106 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm

Suit pieces

-
+
Helmet:
- {{:data.helmet}} -
-
- {{if data.sealing != 1}} - {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'helmet'}, null)}}
- {{/if}} + {{:helper.capitalizeFirstLetter(data.helmet)}}
+ {{if data.sealing != 1}} +
+ {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'helmet'}, null)}} +
+ {{/if}}
-
+
Gauntlets:
- {{:data.gauntlets}} -
-
- {{if data.sealing != 1}} - {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'gauntlets'}, null)}}
- {{/if}} + {{:helper.capitalizeFirstLetter(data.gauntlets)}}
+ {{if data.sealing != 1}} +
+ {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'gauntlets'}, null)}} +
+ {{/if}}
-
+
Boots:
- {{:data.boots}} -
-
- {{if data.sealing != 1}} - {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'boots'}, null)}}
- {{/if}} + {{:helper.capitalizeFirstLetter(data.boots)}}
+ {{if data.sealing != 1}} +
+ {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'boots'}, null)}} +
+ {{/if}}
-
+
Chestpiece:
- {{:data.chest}} -
-
- {{if data.sealing != 1}} - {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'chest'}, null)}}
- {{/if}} + {{:helper.capitalizeFirstLetter(data.chest)}}
+ {{if data.sealing != 1}} +
+ {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'chest'}, null)}} +
+ {{/if}}

System modules

{{if data.seals == 1 || data.sealing == 1}} -

HARDSUIT SYSTEMS OFFLINE.

+

HARDSUIT SYSTEMS OFFLINE

{{else}} + + + +

Selected primary system: {{if data.primarysystem}} - {{:data.primarysystem}} + {{:helper.capitalizeFirstLetter(data.primarysystem)}} {{else}} - None. + None {{/if}}

{{if data.modules}} - +
{{for data.modules}} -
- - - - - - - {{if value.charges}} - - - - - {{/if}} - - - + {{/if}} + + + {{/for}} -
-
- {{:value.name}} - {{if value.damage > 0}} - {{if value.damage == 1}} - (damaged) - {{else}} - (destroyed) - {{/if}} +
+
+
{{:helper.capitalizeFirstLetter(value.name)}}
+ {{if value.damage > 0}} + {{if value.damage == 1}} + (damaged) + {{else}} + (destroyed) {{/if}} - [E: {{:value.engagecost}} | A: {{:value.activecost}} | P: {{:value.passivecost}}] + {{/if}} +
+
+ Engage: {{:value.engagecost}}
+ Activate: {{:value.activecost}}
+ Passive: {{:value.passivecost}}
+
+
+ {{:value.desc}} +
-
-
{{:value.desc}}
-
+
{{if value.can_use == 1}} -
+
{{:helper.link(value.engagestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'engage'}, null)}}
{{/if}} {{if value.can_select == 1}} -
+
{{if value.name == data.primarysystem}}
SELECTED
{{else}} @@ -182,7 +204,7 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm
{{/if}} {{if value.can_toggle == 1}} -
+
{{if value.is_active == 1}} {{:helper.link(value.deactivatestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'deactivate'}, null)}} {{else}} @@ -191,30 +213,21 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm
{{/if}}
-
-
- Stored charges
-
- Selected: {{:value.chargetype}} -
-
+
+ {{if value.charges}} +
Stored charges
+ Selected: {{:helper.capitalizeFirstLetter(value.chargetype)}} {{for value.charges :itemValue:itemIndex}} - {{:helper.link(itemValue.caption, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'select_charge_type', 'charge_type' : itemValue.index}, null)}}
+
+ {{:helper.link(helper.capitalizeFirstLetter(itemValue.caption), null, {'interact_module' : value.index, 'module_mode' : 'select_charge_type', 'charge_type' : itemValue.index}, null)}} +
{{/for}} -
-

+
{{else}} None. {{/if}} From 9fb58d8568ed5c78c2ffb7b5f0b7c21574d0d990 Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Tue, 2 Dec 2014 00:11:32 +1300 Subject: [PATCH 12/20] Third rig UI pass - Resized the initial ui window again - Rewrote the modules section to a horizontal layout --- code/modules/clothing/spacesuits/rig/rig.dm | 2 +- nano/templates/hardsuit.tmpl | 102 +++++++++++--------- 2 files changed, 58 insertions(+), 46 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 2f6196f558..0eec83e449 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -442,7 +442,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) - ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 500, 600) + ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550) ui.set_initial_data(data) ui.open() ui.set_auto_update(1) diff --git a/nano/templates/hardsuit.tmpl b/nano/templates/hardsuit.tmpl index bdcffae21d..235512a7a3 100644 --- a/nano/templates/hardsuit.tmpl +++ b/nano/templates/hardsuit.tmpl @@ -16,7 +16,18 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm margin: 0 auto; } .info { - display: none; + width: 100px; + } + .floatLeft { + float: left; + margin-left: 5px; + } + .paddedBorderBlue { + border: 1px solid #517087; + padding: 2px; + } + .displayBar { + width: 200px; } @@ -34,6 +45,7 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm
{{:helper.displayBar(data.chargestatus, 0, 50, (data.chargestatus >= 35) ? 'good' : (data.chargestatus >= 15) ? 'average' : 'bad')}} {{:data.charge}}/{{:data.maxcharge}}
+
@@ -154,10 +166,6 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm {{if data.seals == 1 || data.sealing == 1}}

HARDSUIT SYSTEMS OFFLINE

{{else}} - - - -

Selected primary system: {{if data.primarysystem}} {{:helper.capitalizeFirstLetter(data.primarysystem)}} @@ -168,57 +176,61 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm {{if data.modules}}
{{for data.modules}} -
-
-
{{:helper.capitalizeFirstLetter(value.name)}}
- {{if value.damage > 0}} - {{if value.damage == 1}} - (damaged) - {{else}} - (destroyed) - {{/if}} - {{/if}} -
-
- Engage: {{:value.engagecost}}
- Activate: {{:value.activecost}}
- Passive: {{:value.passivecost}}
-
-
- {{:value.desc}} -
-
-
- {{if value.can_use == 1}} -
- {{:helper.link(value.engagestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'engage'}, null)}} -
- {{/if}} - {{if value.can_select == 1}} -
- {{if value.name == data.primarysystem}} -
SELECTED
+
+
+
+
{{:helper.capitalizeFirstLetter(value.name)}}
+ {{if value.damage > 0}} +
+ {{if value.damage == 1}} + (damaged) {{else}} - {{:helper.link('Select', 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'select'}, null)}} + (destroyed) {{/if}}
{{/if}} - {{if value.can_toggle == 1}} -
- {{if value.is_active == 1}} - {{:helper.link(value.deactivatestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'deactivate'}, null)}} - {{else}} - {{:helper.link(value.activatestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'activate'}, null)}} +
+
+ Engage: {{:value.engagecost}}
+ Activate: {{:value.activecost}}
+ Passive: {{:value.passivecost}} +
+
+ {{:value.desc}} +
+
+ {{if value.can_use == 1}} +
+ {{:helper.link(value.engagestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'engage'}, null)}} +
+ {{/if}} + {{if value.can_select == 1}} +
+ {{if value.name == data.primarysystem}} +
SELECTED
+ {{else}} + {{:helper.link('Select', 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'select'}, null)}} + {{/if}} +
+ {{/if}} + {{if value.can_toggle == 1}} +
+ {{if value.is_active == 1}} + {{:helper.link(value.deactivatestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'deactivate'}, null)}} + {{else}} + {{:helper.link(value.activatestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'activate'}, null)}} + {{/if}} +
{{/if}}
- {{/if}} +
-
+
{{if value.charges}}
Stored charges
Selected: {{:helper.capitalizeFirstLetter(value.chargetype)}} {{for value.charges :itemValue:itemIndex}} -
+
{{:helper.link(helper.capitalizeFirstLetter(itemValue.caption), null, {'interact_module' : value.index, 'module_mode' : 'select_charge_type', 'charge_type' : itemValue.index}, null)}}
{{/for}} From 3988b96459b29a35c5e9f4d266c7d981d28a5849 Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Tue, 2 Dec 2014 22:17:35 +1300 Subject: [PATCH 13/20] Rig activate message fix Electrowarfare and power sink modules weren't displaying the correct activate string message. Fixed both. --- code/modules/clothing/spacesuits/rig/modules/computer.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm index 457ad2ecd7..7b7e2374d4 100644 --- a/code/modules/clothing/spacesuits/rig/modules/computer.dm +++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm @@ -291,7 +291,7 @@ toggleable = 1 usable = 0 - engage_string = "Enable Countermeasures" + activate_string = "Enable Countermeasures" deactivate_string = "Disable Countermeasures" interface_name = "electrowarfare system" @@ -322,7 +322,7 @@ activates_on_touch = 1 disruptive = 0 - engage_string = "Enable Power Sink" + activate_string = "Enable Power Sink" deactivate_string = "Disable Power Sink" interface_name = "niling d-sink" From b7d340cee4975fa911b1426f4eb1670e31df373c Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Tue, 2 Dec 2014 22:22:11 +1300 Subject: [PATCH 14/20] Rig UI cleanup - Cleaned up html to use classes as much as possible - Removed and renamed a few classes - General code cleanup --- nano/templates/hardsuit.tmpl | 117 +++++++++++++++++++---------------- 1 file changed, 63 insertions(+), 54 deletions(-) diff --git a/nano/templates/hardsuit.tmpl b/nano/templates/hardsuit.tmpl index 235512a7a3..a8d3e59ac7 100644 --- a/nano/templates/hardsuit.tmpl +++ b/nano/templates/hardsuit.tmpl @@ -5,18 +5,11 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm {{if data.interfacelock || data.malf > 0}} - -- HARDSUIT INTERFACE OFFLINE -- +
-- HARDSUIT INTERFACE OFFLINE --
{{else}} {{if data.aicontrol && data.ai != 1}} - -- HARDSUIT CONTROL OVERRIDDEN BY AI -- +
-- HARDSUIT CONTROL OVERRIDDEN BY AI --
{{else}}
-
-
- Power supply +
+
+ Power supply
{{:helper.displayBar(data.chargestatus, 0, 50, (data.chargestatus >= 35) ? 'good' : (data.chargestatus >= 15) ? 'average' : 'bad')}} {{:data.charge}}/{{:data.maxcharge}}
-
-
-
- AI control: +
+
+ AI control:
{{if data.aioverride}} - ENABLED +
ENABLED
{{else}} - DISABLED +
DISABLED
{{/if}}
@@ -64,17 +73,17 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm
-
- Suit status: +
+ Suit status:
{{if data.sealing == 1}} - SEALING +
SEALING
{{else}} {{if data.seals == 1}} - OPEN +
OPEN
{{else}} - SEALED +
SEALED
{{/if}} {{/if}}
@@ -83,17 +92,17 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm
-
- Cover status: +
+ Cover status:
{{if data.emagged || !data.securitycheck}} - ERROR - MAINTENANCE LOCK CONTROL OFFLINE +
ERROR - MAINTENANCE LOCK CONTROL OFFLINE
{{else}} {{if data.coverlock}} - LOCKED +
LOCKED
{{else}} - UNLOCKED +
UNLOCKED
{{/if}} {{/if}}
@@ -109,21 +118,21 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm
-
- Helmet: +
+ Helmet:
{{:helper.capitalizeFirstLetter(data.helmet)}}
{{if data.sealing != 1}}
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'helmet'}, null)}} + {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'helmet'}, null)}}
{{/if}}
-
- Gauntlets: +
+ Gauntlets:
{{:helper.capitalizeFirstLetter(data.gauntlets)}} @@ -135,8 +144,8 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm {{/if}}
-
- Boots: +
+ Boots:
{{:helper.capitalizeFirstLetter(data.boots)}} @@ -148,8 +157,8 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm {{/if}}
-
- Chestpiece: +
+ Chestpiece:
{{:helper.capitalizeFirstLetter(data.chest)}} @@ -166,39 +175,39 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm {{if data.seals == 1 || data.sealing == 1}}

HARDSUIT SYSTEMS OFFLINE

{{else}} -

Selected primary system: +

Selected primary system: {{if data.primarysystem}} {{:helper.capitalizeFirstLetter(data.primarysystem)}} {{else}} None {{/if}} -

+

{{if data.modules}}
{{for data.modules}}
-
+
{{:helper.capitalizeFirstLetter(value.name)}}
{{if value.damage > 0}}
{{if value.damage == 1}} - (damaged) + (
damaged
) {{else}} - (destroyed) + (
destroyed
) {{/if}}
{{/if}}
-
- Engage: {{:value.engagecost}}
- Activate: {{:value.activecost}}
+
+ Engage: {{:value.engagecost}} + Activate: {{:value.activecost}} Passive: {{:value.passivecost}}
-
+
{{:value.desc}}
-
+
{{if value.can_use == 1}}
{{:helper.link(value.engagestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'engage'}, null)}} @@ -207,7 +216,7 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm {{if value.can_select == 1}}
{{if value.name == data.primarysystem}} -
SELECTED
+
SELECTED
{{else}} {{:helper.link('Select', 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'select'}, null)}} {{/if}} @@ -227,8 +236,8 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm
{{if value.charges}} -
Stored charges
- Selected: {{:helper.capitalizeFirstLetter(value.chargetype)}} +
Stored charges
+
Selected:
{{:helper.capitalizeFirstLetter(value.chargetype)}} {{for value.charges :itemValue:itemIndex}}
{{:helper.link(helper.capitalizeFirstLetter(itemValue.caption), null, {'interact_module' : value.index, 'module_mode' : 'select_charge_type', 'charge_type' : itemValue.index}, null)}} From 224b2f3899ebf7172beb46fe182b47ed78aa030b Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Sun, 20 Jul 2014 19:28:15 +1200 Subject: [PATCH 15/20] Duct Tape First pass for adding duct tape. It can stick paper to things. It can patch up walls (crudely). Coder sprites! --- baystation12.dme | 1 + code/game/objects/items/weapons/tape.dm | 83 ++++++++++++++++++++++++ code/game/turfs/simulated/walls.dm | 21 +++++- code/modules/paperwork/paper.dm | 5 ++ icons/obj/bureaucracy.dmi | Bin 10562 -> 11702 bytes 5 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 code/game/objects/items/weapons/tape.dm diff --git a/baystation12.dme b/baystation12.dme index d6dee8af99..a7176e3b98 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -577,6 +577,7 @@ #include "code\game\objects\items\weapons\surgery_tools.dm" #include "code\game\objects\items\weapons\swords_axes_etc.dm" #include "code\game\objects\items\weapons\table_rack_parts.dm" +#include "code\game\objects\items\weapons\tape.dm" #include "code\game\objects\items\weapons\teleportation.dm" #include "code\game\objects\items\weapons\tools.dm" #include "code\game\objects\items\weapons\twohanded.dm" diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm new file mode 100644 index 0000000000..b7d571f136 --- /dev/null +++ b/code/game/objects/items/weapons/tape.dm @@ -0,0 +1,83 @@ +/obj/item/weapon/tape_roll + name = "tape roll" + desc = "A roll of sticky tape. Possibly for taping ducks... or was that ducts?" + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "taperoll" + w_class = 1 + +/obj/item/weapon/tape_roll/attack_self(mob/user as mob) + user << "You remove a length of tape from [src]." + + var/obj/item/weapon/ducttape/tape = new() + user.put_in_hands(tape) + +/obj/item/weapon/tape_roll/proc/stick(var/obj/item/weapon/W, mob/user as mob) + if(!istype(W, /obj/item/weapon/paper)) + return + + user.drop_from_inventory(W) + var/obj/item/weapon/ducttape/tape = new(get_turf(src)) + tape.attach(W) + user.put_in_hands(tape) + +/obj/item/weapon/ducttape + name = "tape" + desc = "A piece of sticky tape." + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "tape" + w_class = 1 + layer = 4 + anchored = 1 //it's sticky, no you cant move it + + var/obj/item/weapon/stuck = null + +/obj/item/weapon/ducttape/New() + ..() + flags |= NOBLUDGEON + +/obj/item/weapon/ducttape/examine() + return stuck.examine() + +/obj/item/weapon/ducttape/proc/attach(var/obj/item/weapon/W) + stuck = W + W.forceMove(src) + icon_state = W.icon_state + "_taped" + name = W.name + " (taped)" + +/obj/item/weapon/ducttape/attack_self(mob/user as mob) + user << "You remove \the [initial(name)] from [stuck]." + + user.drop_from_inventory(src) + stuck.forceMove(get_turf(src)) + user.put_in_hands(stuck) + stuck = null + del(src) + +/obj/item/weapon/ducttape/afterattack(var/A, mob/user as mob, flag, params) + if(!in_range(user, A) || istype(A, /obj/machinery/door) || !stuck) + return + + var/turf/target_turf = get_turf(A) + var/turf/source_turf = get_turf(user) + + var/dir_offset = 0 + if(target_turf != source_turf) + dir_offset = get_dir(source_turf, target_turf) + + user.drop_from_inventory(src) + forceMove(source_turf) + + if(params) + var/list/mouse_control = params2list(params) + if(mouse_control["icon-x"]) + pixel_x = text2num(mouse_control["icon-x"]) - 16 + if(dir_offset & EAST) + pixel_x += 32 + else if(dir_offset & WEST) + pixel_x -= 32 + if(mouse_control["icon-y"]) + pixel_y = text2num(mouse_control["icon-y"]) - 16 + if(dir_offset & NORTH) + pixel_y += 32 + else if(dir_offset & SOUTH) + pixel_y -= 32 \ No newline at end of file diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index d8f91582b6..ca990b342e 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -10,6 +10,8 @@ var/damage_overlay var/global/damage_overlays[8] + + var/list/other_overlays = new() var/max_temperature = 1800 //K, walls will take damage if they're next to a fire hotter than this @@ -55,17 +57,19 @@ if(!damage) overlays.Cut() + overlays += other_overlays return var/overlay = round(damage / damage_cap * damage_overlays.len) + 1 if(overlay > damage_overlays.len) overlay = damage_overlays.len - +/* if(damage_overlay && overlay == damage_overlay) //No need to update. return - +*/ overlays.Cut() overlays += damage_overlays[overlay] + overlays += other_overlays damage_overlay = overlay return @@ -444,6 +448,19 @@ place_poster(W,user) return + else if(istype(W, /obj/item/weapon/tape_roll)) + if(damage) + user << "You patch up [src]." + var/image/I = image(icon = 'icons/obj/bureaucracy.dmi', icon_state = "tape") + I.transform = turn(I.transform, rand(0,360)) + I.pixel_x = rand(-6,6) + I.pixel_y = rand(-6,6) + other_overlays += I + take_damage(-min(10, damage)) + + else if(istype(W, /obj/item/weapon/ducttape)) + return + else return attack_hand(user) return diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 8a79226dab..72f827f7ed 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -365,6 +365,11 @@ if(user.mind && (user.mind.assigned_role == "Clown")) clown = 1 + if(istype(P, /obj/item/weapon/tape_roll)) + var/obj/item/weapon/tape_roll/tape = P + tape.stick(src, user) + return + if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/photo)) if (istype(P, /obj/item/weapon/paper/carbon)) var/obj/item/weapon/paper/carbon/C = P diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index b44265089264032458e63e5724ef75bb8dee1384..775c097c29deec5874bdbb1a47c86aadbcdaf9ec 100644 GIT binary patch literal 11702 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 OQRP zJsDjTL)jrIfClt?q^K0k7_#7FnE%qbw`?k_rXZO=c_su0w)BB*Gylit6rD1E@AJR3 zV2TR^$_!&;V~_@?-69WUcsp-@vZX!~7)x{W3imHWB=`IK`)IV(U^5^A0lDbMfL4r1*q@*ddjcDGzBnT( z>)p>NMa{W)!@|Kq0ifsz1z1>E#C{Hjr+6z!kWY~b0z^vPOVTgPkv5PBL9rwU#M0!{ zw(^`CDk;1cpbX|J40kpU4i1KTyAlp{!5d48!>$AQO$Ht0Q*u?lFCHDoR*GODK7kX zs3&hP>`60TQr52*G71WHb2pch3Y0uNbHu2u8XOWd5*P{nrXq(k$umgB9E6o1nlL1=6Cq`=9Q^RT3WxFX+L5t15xZ`+Nu@B|F#`C z8;x2#Z+fdt28VK85(2KTkvn(Lohq#7*)IC`Ky1I@a%n=yq9mDxo3yOKz00ULwGZRs zH8AaXZwS8FoioAz)JFawLbW#q`LLv*6JhG=>7kL5lK!R4Ld>EC7afi7u>GlUF9=lv z)}YK54j%rO+(#64QZ56~tVbLcAn(&Os8tcW?_m}w-yXX18Z0w7V0TN2gHo!|t1TR> z8W@n-F4Y_IMY+ah?FEq$Z=MeqL`Hj3aWH#p*BJwObU~;*u#klXEzs9H^SzC^mcwN+ zB7f&5Q;*F%6VFswCQkJSp#<;!eeIWdixnFKg(*l7B`;Qty6uD@rYBH_qJSZBY{|yoKMC1Sf literal 10562 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 From 26d428e6594c3113f5e78120073c4cb88bf38a5a Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Tue, 2 Dec 2014 23:17:04 +1300 Subject: [PATCH 16/20] Reverted wall repairing with tape --- code/game/turfs/simulated/walls.dm | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index ca990b342e..d8f91582b6 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -10,8 +10,6 @@ var/damage_overlay var/global/damage_overlays[8] - - var/list/other_overlays = new() var/max_temperature = 1800 //K, walls will take damage if they're next to a fire hotter than this @@ -57,19 +55,17 @@ if(!damage) overlays.Cut() - overlays += other_overlays return var/overlay = round(damage / damage_cap * damage_overlays.len) + 1 if(overlay > damage_overlays.len) overlay = damage_overlays.len -/* + if(damage_overlay && overlay == damage_overlay) //No need to update. return -*/ + overlays.Cut() overlays += damage_overlays[overlay] - overlays += other_overlays damage_overlay = overlay return @@ -448,19 +444,6 @@ place_poster(W,user) return - else if(istype(W, /obj/item/weapon/tape_roll)) - if(damage) - user << "You patch up [src]." - var/image/I = image(icon = 'icons/obj/bureaucracy.dmi', icon_state = "tape") - I.transform = turn(I.transform, rand(0,360)) - I.pixel_x = rand(-6,6) - I.pixel_y = rand(-6,6) - other_overlays += I - take_damage(-min(10, damage)) - - else if(istype(W, /obj/item/weapon/ducttape)) - return - else return attack_hand(user) return From 76d87e7c848cb4e4f9ec7e204c981a7b890d66d0 Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Tue, 2 Dec 2014 23:45:33 +1300 Subject: [PATCH 17/20] Tape fixes - Shrunk tape roll sprite - Disabled tearing off individual strips of tape until they have a use - Fixed a runtime when removing tape with nothing stuck to it --- code/game/objects/items/weapons/tape.dm | 5 +++++ icons/obj/bureaucracy.dmi | Bin 11702 -> 11622 bytes 2 files changed, 5 insertions(+) diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index b7d571f136..9bbd4c15fe 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -5,11 +5,13 @@ icon_state = "taperoll" w_class = 1 +/* -- Disabled for now until it has a use -- /obj/item/weapon/tape_roll/attack_self(mob/user as mob) user << "You remove a length of tape from [src]." var/obj/item/weapon/ducttape/tape = new() user.put_in_hands(tape) +*/ /obj/item/weapon/tape_roll/proc/stick(var/obj/item/weapon/W, mob/user as mob) if(!istype(W, /obj/item/weapon/paper)) @@ -45,6 +47,9 @@ name = W.name + " (taped)" /obj/item/weapon/ducttape/attack_self(mob/user as mob) + if(!stuck) + return + user << "You remove \the [initial(name)] from [stuck]." user.drop_from_inventory(src) diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 775c097c29deec5874bdbb1a47c86aadbcdaf9ec..2cef74e33a6cf679cadfaecd56c2fc9d333f75e7 100644 GIT binary patch delta 10715 zcmY*@Fz`RI5-Ew}=+Cif2)WFnA`3<9eYp~cmga&?ho-Ra z_J%FV%SHR7SFl8@8iFq3HzqlrbW$%mA?ST9 z0Sh{k5p?{;RJHZ`6UXG4U_cWcG6S6TXRTe*(RcRBv<4IJRa9veLUluM%RYOhQQKy- zt-{M&bsCis&WdMpXA*eL46LN+zO9Z>@GS^bZ=5ZmEm4R?#6JGjRlWZ}DCqoYCPCNo z-Fqd_*r2BD=K40*T}kp`08G{H0Q2%XpWZh%3hAF;9xUx9Ka}Zz6RS5g#odj1491lJ zfJMK*3Ryzj1RniuPXJE~tjEBpTU|{QKPgd0| zDPP~__?(;r4bot~&yV+h0HJam_(&7}_~2goBNg*+5PpcvCl37rpVd&(kp)J=L~dSs z4B)66lZ%eM0q1?<+>^cH;vM!6uNAlNPFON;*L&_0OnzHNCVyWNspPb4)UtjLcIL71 z8$C;+dfN0IqlY;2cEI7@1?+Z_b^HA1*~P)~)QXoA2Mtd#YKNy9Ps;YHQzy$6Y=L5ElJ#l<4Rx zTTxb@@+!Z~Rt+KNfF{?bC!c(8YWqAl|I={FjpqAf<5)c(n_I1?eGd|YPpjwOUM?(X z&6u?NH}zfIobPJSfTyD`p4aPE7?pgLz};l3Bu0{pePME!`j@MdRfr7nl!E6IF$4D> z&uQJjxX$>6gxg7WZ_5X+kd80n%uyIev${w_XztBLs0{+QX}OYwB(o)>j-wJnOFx3V zuh!jPW3mi-a;qxM=f3(U#PTqqfZnjaPyjqc8hC1stQD#|nz zq@`hU9{xi_L`0^)YV9Bi6ar6BQBfy$+}YUJI-zrBIi(u~Ry1?Yl6ElC7}TTY?q792 zC0r@56y%hZ!VN_o3ZPNt;V@Elc%Ku_dU}8BBTxCwW_E?alHDv1+VlEdyxaTvEj&{KXiR#v6S5HPm`UNOI=}@W zg^BGMLRM1Pa}`fLXcBFm>%<@Ap8w^7^j7-yt9qR+wYqjuv*(*Pgn$43Wop=0+*@c+ zOG*ZlnSjptE~z&g9gg*cTh3I>Nkx#Xu=Wgf6d62%`3C1)wC!eP&RBjuQQbn^FE%j- zH}UZ=&08AK3i&zp#SrLL5%!3 zN#pn|NxA5(po_24tV*UJ22f==L=cmF?^bQz_eAkDq0F#hjL|xX5#Ei8oFV+41&2n= zR*-7f!rt{_@2Bc5q_u?PWTyE{wN#hvvNDcv6M)ZpM13z{t6YsOc#1GFTM}#^#(k-$ zmu60jM1q1WJCdrDR)nj<`g@DI&MsJK@Q;V z`gHUf*Wt&HA5|6uI6u#Q7zER+j*e7slh@3(Q@D3OvZ`Cv8qxTByKqB&)Lm@+Ti3Se z`hU55r^U^?8}ZO0umXmLffu9lcqq2~C;o!ak|qn~UH?u$joyjCVo}MkG?Q@q zd)luRfni)<&!T=4LGzF zJVd1H+X;->&88#%U! ^xCO*XDfA=LZ}Z)YcaA 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 C3zfbA delta 10805 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 From c5833dfb9a7f7d4348154905344e673504189433 Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Wed, 3 Dec 2014 00:02:47 +1300 Subject: [PATCH 18/20] Allow reading of taped paper via examine --- code/game/objects/items/weapons/tape.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 9bbd4c15fe..8177c746d7 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -37,8 +37,8 @@ ..() flags |= NOBLUDGEON -/obj/item/weapon/ducttape/examine() - return stuck.examine() +/obj/item/weapon/ducttape/examine(mob/user as mob) + return stuck.examine(user) /obj/item/weapon/ducttape/proc/attach(var/obj/item/weapon/W) stuck = W From 70491565195a32f869677e8b2014057f44e8cfed Mon Sep 17 00:00:00 2001 From: mwerezak Date: Tue, 2 Dec 2014 22:24:53 -0500 Subject: [PATCH 19/20] Adds mask and oxygen tank to uplink kits that provide space suits. --- code/game/objects/items/weapons/storage/uplink_kits.dm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 776062c1b9..d28586b0a2 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -9,7 +9,6 @@ new /obj/item/clothing/shoes/syndigaloshes(src) return - if ("stealth") if("stealth") new /obj/item/weapon/gun/energy/crossbow(src) new /obj/item/weapon/pen/paralysis(src) @@ -22,6 +21,8 @@ new /obj/item/device/powersink(src) new /obj/item/clothing/suit/space/syndicate(src) new /obj/item/clothing/head/helmet/space/syndicate(src) + new /obj/item/clothing/mask/gas/syndicate(src) + new /obj/item/weapon/tank/emergency_oxygen/double(src) return if("guns") @@ -55,6 +56,8 @@ new /obj/item/device/radio/beacon/syndicate(src) new /obj/item/clothing/suit/space/syndicate(src) new /obj/item/clothing/head/helmet/space/syndicate(src) + new /obj/item/clothing/mask/gas/syndicate(src) + new /obj/item/weapon/tank/emergency_oxygen/double(src) new /obj/item/weapon/card/emag(src) return @@ -116,7 +119,10 @@ ..() new /obj/item/clothing/suit/space/syndicate(src) new /obj/item/clothing/head/helmet/space/syndicate(src) + new /obj/item/clothing/mask/gas/syndicate(src) + new /obj/item/weapon/tank/emergency_oxygen/double(src) return + /obj/item/weapon/storage/box/syndie_kit/chameleon name = "Chameleon Kit" desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately." From 52346094f8b64b3799c03c4c6b7c7d68f680b0e1 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Wed, 3 Dec 2014 11:06:33 +0100 Subject: [PATCH 20/20] Fixes #7214. Dismantling a window should now return an appropriate number of sheets for its type. --- code/game/objects/structures/window.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 73ec443e0a..4ac8aa6c46 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -214,7 +214,7 @@ visible_message("[user] dismantles \the [src].") if(dir == SOUTHWEST) var/obj/item/stack/sheet/mats = new glasstype(loc) - mats.amount = 2 + mats.amount = is_fulltile() ? 4 : 2 else new glasstype(loc) del(src)