diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 346971f092e..215d85ade15 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -1482,7 +1482,7 @@ "aCz" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/sorting{name = "\improper Warehouse"}) "aCA" = (/obj/structure/closet/crate/freezer,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/sorting{name = "\improper Warehouse"}) "aCB" = (/obj/structure/closet/crate,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/ore/glass,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/sorting{name = "\improper Warehouse"}) -"aCC" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/module/power_control,/obj/item/weapon/stock_parts/cell{maxcharge = 2000},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/sorting{name = "\improper Warehouse"}) +"aCC" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/apc_electronics,/obj/item/weapon/stock_parts/cell{maxcharge = 2000},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/sorting{name = "\improper Warehouse"}) "aCD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/security/nuke_storage) "aCE" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "vault"; dir = 6},/area/security/nuke_storage) "aCF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "vault"},/area/security/nuke_storage) @@ -2819,7 +2819,7 @@ "bck" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/turf/simulated/floor{icon_state = "dark"},/area/storage/tech) "bcl" = (/obj/structure/spacepoddoor{dir = 4; icon_state = "n_beam"; tag = ""},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "bcm" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/storage/tech) -"bcn" = (/obj/structure/table,/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/turf/simulated/floor{icon_state = "dark"},/area/storage/tech) +"bcn" = (/obj/structure/table,/obj/item/weapon/apc_electronics,/obj/item/weapon/airlock_electronics,/turf/simulated/floor{icon_state = "dark"},/area/storage/tech) "bco" = (/obj/machinery/door_control{id = "transittube"; name = "Transit Tube Lockdown"; pixel_x = -24; pixel_y = -5; req_access_txt = "24"},/obj/machinery/door_control{desc = "A remote control-switch for secure storage."; id = "Secure Storage"; name = "Engineering Secure Storage"; pixel_x = -24; pixel_y = 5; req_access_txt = "11"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/engine/chiefs_office) "bcp" = (/obj/item/weapon/cartridge/engineering{pixel_x = 4; pixel_y = 5},/obj/item/weapon/cartridge/engineering{pixel_x = -3; pixel_y = 2},/obj/item/weapon/cartridge/engineering{pixel_x = 3},/obj/structure/table/reinforced,/obj/item/weapon/cartridge/atmos,/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/engine/chiefs_office) "bcq" = (/obj/effect/landmark/start{name = "Chief Engineer"},/obj/structure/stool/bed/chair/office/light{dir = 1; pixel_y = 3},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) @@ -2974,7 +2974,7 @@ "bfj" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/obj/machinery/light_switch{pixel_x = -26},/turf/simulated/floor{dir = 10; icon_state = "yellow"},/area/storage/tools) "bfk" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "yellow"},/area/storage/tools) "bfl" = (/turf/simulated/floor{dir = 2; icon_state = "yellow"},/area/storage/tools) -"bfm" = (/obj/structure/rack,/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor{dir = 2; icon_state = "yellow"},/area/storage/tools) +"bfm" = (/obj/structure/rack,/obj/item/weapon/apc_electronics,/obj/item/weapon/airlock_electronics,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor{dir = 2; icon_state = "yellow"},/area/storage/tools) "bfn" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/rods{amount = 50},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/storage/tools) "bfo" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/maintenance/starboard) "bfp" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1; pixel_y = -1},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/storage/tech) diff --git a/_maps/map_files/MetaStation/z3.dmm b/_maps/map_files/MetaStation/z3.dmm index 53e7e01e12f..0c7d047e810 100644 --- a/_maps/map_files/MetaStation/z3.dmm +++ b/_maps/map_files/MetaStation/z3.dmm @@ -226,7 +226,7 @@ "eB" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating/airless,/area/AIsattele) "eD" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/plating/airless,/area/AIsattele) "eE" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating/airless,/area/AIsattele) -"eF" = (/obj/item/weapon/shard,/obj/item/weapon/module/power_control,/turf/simulated/floor/plating/airless,/area/AIsattele) +"eF" = (/obj/item/weapon/shard,/obj/item/weapon/apc_electronics,/turf/simulated/floor/plating/airless,/area/AIsattele) "eG" = (/obj/structure/closet,/turf/simulated/floor/plating/airless,/area/AIsattele) "eH" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/simulated/floor/plating/airless,/area/AIsattele) "eI" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/obj/item/weapon/circuitboard/teleporter,/turf/simulated/floor/plating/airless,/area/AIsattele) diff --git a/_maps/map_files/MetaStation/z4.dmm b/_maps/map_files/MetaStation/z4.dmm index b47b594e115..667cc8a9a9d 100644 --- a/_maps/map_files/MetaStation/z4.dmm +++ b/_maps/map_files/MetaStation/z4.dmm @@ -178,7 +178,7 @@ "dv" = (/obj/structure/rack,/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/derelict/bridge/access) "dw" = (/obj/structure/rack,/obj/item/clothing/head/helmet/swat,/turf/simulated/floor,/area/derelict/bridge/access) "dx" = (/obj/structure/rack,/turf/simulated/floor,/area/derelict/bridge/access) -"dy" = (/obj/structure/rack,/obj/item/weapon/module/power_control,/turf/simulated/floor,/area/derelict/bridge/access) +"dy" = (/obj/structure/rack,/obj/item/weapon/apc_electronics,/turf/simulated/floor,/area/derelict/bridge/access) "dz" = (/obj/structure/rack,/obj/item/weapon/circuitboard/smes,/turf/simulated/floor,/area/derelict/bridge/access) "dA" = (/obj/structure/rack,/obj/item/weapon/stock_parts/capacitor,/turf/simulated/floor,/area/derelict/bridge/access) "dB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/derelict/bridge/access) @@ -719,7 +719,7 @@ "oo" = (/obj/machinery/power/smes,/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/derelict/se_solar) "op" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/derelict/se_solar) "oq" = (/turf/simulated/floor/plating/airless{icon_state = "damaged4"},/area/derelict/se_solar) -"or" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating/airless,/area/derelict/se_solar) +"or" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/apc_electronics,/obj/item/weapon/apc_electronics,/obj/item/weapon/apc_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating/airless,/area/derelict/se_solar) "os" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor/plating/airless,/area/derelict/se_solar) "ot" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless,/area/derelict/se_solar) "ov" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plating/airless,/area/derelict/se_solar) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 0e51a86a8d3..2721ea15653 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -175,7 +175,7 @@ "ads" = (/obj/machinery/camera{c_tag = "Brig Podbay"; dir = 2; network = list("SS13")},/obj/machinery/door_control{desc = "A remote control-switch for the pod doors."; id = "secpodbay"; name = "Pod Door Control"; pixel_x = 0; pixel_y = 24; req_access_txt = "71"},/turf/simulated/floor/engine,/area/security/podbay) "adt" = (/turf/simulated/floor/engine,/area/security/podbay) "adu" = (/obj/structure/spacepoddoor{luminosity = 3},/turf/simulated/floor/engine,/area/security/podbay) -"adv" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/engine,/area/security/podbay) +"adv" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/engine/vacuum,/area/security/podbay) "adw" = (/turf/simulated/wall/r_wall,/area/security/interrogationobs) "adx" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/interrogationobs) "ady" = (/obj/machinery/camera{c_tag = "Brig Interrogation Observation"; network = list("SS13")},/obj/machinery/computer/security/telescreen{layer = 4; name = "Observation Screen"; desc = "Used for observing the brig's interrogation room."; network = list("Interrogation"); pixel_x = 0; pixel_y = 32},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/interrogationobs) @@ -518,7 +518,7 @@ "ajX" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/table/reinforced,/obj/machinery/syndicatebomb/training,/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/range) "ajY" = (/obj/machinery/sleeper{dir = 8; name = "Prisoner Sleeper"},/turf/simulated/floor{dir = 10; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/security/medbay) "ajZ" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/floor{tag = "icon-whiteblue"; icon_state = "whiteblue"},/area/security/medbay) -"aka" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/machinery/camera{c_tag = "Brig Medbay"; dir = 2; network = list("SS13")},/obj/machinery/alarm{pixel_y = 25; target_temperature = 283.15},/turf/simulated/floor{icon_state = "white"},/area/security/medbay) +"aka" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/machinery/camera{c_tag = "Brig Medbay"; dir = 2; network = list("SS13")},/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor{icon_state = "white"},/area/security/medbay) "akb" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/security/medbay) "akc" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/turf/simulated/floor{icon_state = "white"},/area/security/medbay) "akd" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor{icon_state = "white"},/area/security/medbay) @@ -542,7 +542,7 @@ "akv" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) "akw" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/security/main) "akx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/main) -"aky" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/landmark/nations{name = "Brigston"},/turf/simulated/floor,/area/security/main) +"aky" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/bridge) "akz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/security/main) "akA" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch/gamma{locked = 1; req_access_txt = "1"; use_power = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/main) "akB" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk6"; icon_state = "catwalk6"},/area/solar/auxstarboard) @@ -794,8 +794,8 @@ "apn" = (/turf/simulated/wall,/area/maintenance/fsmaint) "apo" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod3/station) "app" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/shuttle/escape_pod3/station) -"apq" = (/turf/simulated/floor/plating,/area/space) -"apr" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "security_airlock"; name = "exterior access button"; pixel_x = -20; pixel_y = -20; req_access_txt = "13"},/turf/simulated/floor/plating,/area/space) +"apq" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "security_airlock"; name = "exterior access button"; pixel_x = -20; pixel_y = -20; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/space) +"apr" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/engine/vacuum,/area/escapepodbay) "aps" = (/turf/space,/area/shuttle/syndicate_elite/station) "apt" = (/turf/simulated/shuttle/floor,/area/shuttle/siberia/station) "apu" = (/obj/machinery/mineral/labor_claim_console{machinedir = 1; pixel_x = 30; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/siberia/station) @@ -2290,7 +2290,7 @@ "aSb" = (/obj/machinery/camera{c_tag = "Departure Lounge Podbay"; dir = 2; network = list("SS13")},/obj/machinery/door_control{desc = "A remote control-switch for the pod doors."; id = "escapepodbay"; name = "Pod Door Control"; pixel_x = 0; pixel_y = 24; req_access_txt = "13"},/turf/simulated/floor/engine,/area/escapepodbay) "aSc" = (/turf/simulated/floor/engine,/area/escapepodbay) "aSd" = (/obj/structure/spacepoddoor{luminosity = 3},/turf/simulated/floor/engine,/area/escapepodbay) -"aSe" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/engine,/area/escapepodbay) +"aSe" = (/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/engine/vacuum,/area/engine/mechanic_workshop) "aSf" = (/obj/structure/window/full/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/station) "aSg" = (/obj/effect/landmark{name = "Observer-Start"},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) "aSh" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/hallway/secondary/entry) @@ -2656,7 +2656,7 @@ "aZd" = (/turf/simulated/floor/carpet,/area/hallway/secondary/entry) "aZe" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry) "aZf" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "dark"},/area/hallway/secondary/entry) -"aZg" = (/turf/simulated/floor{desc = "\"This is a plaque in honour of our comrades on the G4407 Stations. Hopefully TG4407 model can live up to your fame and fortune.\" Scratched in beneath that is a crude image of a meteor and a spaceman. The spaceman is laughing. The meteor is exploding."; dir = 4; icon_state = "plaque"; name = "Comemmorative Plaque"; nitrogen = 30; oxygen = 70; temperature = 80},/area/hallway/secondary/entry) +"aZg" = (/turf/simulated/floor{desc = "\"This is a plaque in honour of our comrades on the G4407 Stations. Hopefully TG4407 model can live up to your fame and fortune.\" Scratched in beneath that is a crude image of a meteor and a spaceman. The spaceman is laughing. The meteor is exploding."; dir = 4; icon_state = "plaque"; name = "Comemmorative Plaque"},/area/hallway/secondary/entry) "aZh" = (/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/turf/simulated/floor,/area/hallway/secondary/entry) "aZi" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=CHW"; location = "Lockers"},/turf/simulated/floor,/area/hallway/primary/port) "aZj" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/hallway/primary/port) @@ -3070,7 +3070,7 @@ "bhb" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) "bhc" = (/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor,/area/storage/tools) "bhd" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/storage/tools) -"bhe" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/turf/simulated/floor,/area/storage/tools) +"bhe" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/apc_electronics,/obj/item/weapon/airlock_electronics,/turf/simulated/floor,/area/storage/tools) "bhf" = (/turf/simulated/floor,/area/storage/tools) "bhg" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/tape_roll,/obj/item/stack/tape_roll,/turf/simulated/floor,/area/storage/tools) "bhh" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central/nw) @@ -3163,7 +3163,7 @@ "biQ" = (/obj/effect/landmark{name = "Marauder Entry"},/turf/simulated/floor,/area/bridge) "biR" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor,/area/bridge) "biS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/effect/landmark{name = "Marauder Entry"},/turf/simulated/floor,/area/bridge) -"biT" = (/obj/machinery/hologram/holopad,/obj/effect/landmark/nations{name = "People's Republic of Commandzakstan"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/bridge) +"biT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "biU" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/bridge) "biV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/item/device/radio/beacon,/obj/effect/landmark{name = "Marauder Entry"},/turf/simulated/floor,/area/bridge) "biW" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/bridge) @@ -3364,13 +3364,13 @@ "bmJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/turf/simulated/floor/carpet,/area/library) "bmK" = (/obj/machinery/camera{c_tag = "Departure Lounge East"; dir = 8; network = list("SS13")},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two"; child_tags_txt = "escape_dock_north_airlock;escape_dock_south_airlock"; id_tag = "escape_dock"; pixel_x = 30},/obj/effect/decal/warning_stripes/east,/turf/simulated/floor,/area/hallway/secondary/exit) "bmL" = (/turf/simulated/floor/grass,/area/hallway/secondary/exit) -"bmM" = (/turf/simulated/floor{desc = "\"This is a plaque in honour of those who died in the great space lube airlock incident.\" Scratched in beneath that is a crude image of a clown and a spaceman. The spaceman is slipping. The clown is laughing."; dir = 4; icon_state = "plaque"; name = "Memorial Plaque"; nitrogen = 30; oxygen = 70; temperature = 80},/area/hallway/secondary/exit) +"bmM" = (/turf/simulated/floor{desc = "\"This is a plaque in honour of those who died in the great space lube airlock incident.\" Scratched in beneath that is a crude image of a clown and a spaceman. The spaceman is slipping. The clown is laughing."; dir = 4; icon_state = "plaque"; name = "Memorial Plaque"},/area/hallway/secondary/exit) "bmN" = (/obj/structure/bush,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/grass,/area/hallway/secondary/exit) "bmO" = (/turf/space,/area/xenos_station/east) "bmP" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry) "bmQ" = (/obj/machinery/door/airlock/glass{name = "Vacant Office"},/turf/simulated/floor/wood,/area/security/vacantoffice) "bmR" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor/wood,/area/security/vacantoffice) -"bmS" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/unary/tank/air{dir = 4},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; nitrogen = 0.01; oxygen = 0.01},/area/maintenance/port) +"bmS" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/unary/tank/air{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/port) "bmT" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4; initialize_directions = 11; level = 2},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/maintenance/port) "bmU" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet) "bmV" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet) @@ -3457,7 +3457,7 @@ "boy" = (/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{dir = 9},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) "boz" = (/obj/machinery/hologram/holopad,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) "boA" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) -"boB" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/module/power_control,/obj/item/weapon/stock_parts/cell{maxcharge = 2000},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) +"boB" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/apc_electronics,/obj/item/weapon/stock_parts/cell{maxcharge = 2000},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) "boC" = (/obj/machinery/conveyor{dir = 1; id = "packageSort1"},/turf/simulated/floor/plating,/area/quartermaster/office) "boD" = (/obj/structure/stool,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/quartermaster/office) "boE" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/office) @@ -4725,7 +4725,7 @@ "bMS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/research{name = "Research Division"}) "bMT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/medical/research{name = "Research Division"}) "bMU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) -"bMV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/effect/landmark/nations{name = "Scientopia"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"bMV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bMW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bMX" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bMY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) @@ -5123,7 +5123,7 @@ "bUA" = (/turf/simulated/wall/r_wall,/area/toxins/mixing) "bUB" = (/obj/machinery/atmospherics/pipe/simple/insulated,/turf/simulated/wall/r_wall,/area/toxins/mixing) "bUC" = (/turf/simulated/wall/r_wall{desc = "A specially coated wall that resists temperatures for Science"; max_temperature = 1e+009; name = "Coated Reinforced Wall"},/area/toxins/mixing) -"bUD" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor{id_tag = "ToxinsVenting"; name = "Toxins Venting Bay Door"; use_power = 0},/turf/simulated/floor/engine,/area/toxins/mixing) +"bUD" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor{id_tag = "ToxinsVenting"; name = "Toxins Venting Bay Door"; use_power = 0},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) "bUE" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/mining/station) "bUF" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bUG" = (/obj/machinery/computer/shuttle_control/mining,/turf/simulated/shuttle/floor,/area/shuttle/mining/station) @@ -5201,8 +5201,8 @@ "bWa" = (/obj/machinery/atmospherics/pipe/simple/insulated,/obj/machinery/camera{c_tag = "Research Toxins Mixing North"; dir = 2; network = list("Research","SS13"); pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "bWb" = (/obj/machinery/atmospherics/pipe/simple/insulated{dir = 6},/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "bWc" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{dir = 4},/turf/simulated/wall/r_wall{desc = "A specially coated wall that resists temperatures for Science"; max_temperature = 1e+009; name = "Coated Reinforced Wall"},/area/toxins/mixing) -"bWd" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/engine,/area/toxins/mixing) -"bWe" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 10},/turf/simulated/floor/engine,/area/toxins/mixing) +"bWd" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) +"bWe" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 10},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) "bWf" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bWg" = (/turf/simulated/wall,/area/toxins/test_area) "bWh" = (/turf/simulated/wall/r_wall,/area/toxins/test_area) @@ -5297,8 +5297,8 @@ "bXS" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bXT" = (/obj/machinery/atmospherics/pipe/simple/insulated,/obj/machinery/meter,/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "bXU" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) -"bXV" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/machinery/air_sensor{frequency = 1222; id_tag = "burn_sensor"},/turf/simulated/floor/engine,/area/toxins/mixing) -"bXW" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 9},/turf/simulated/floor/engine,/area/toxins/mixing) +"bXV" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 9},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) +"bXW" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/machinery/air_sensor{frequency = 1222; id_tag = "burn_sensor"},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) "bXX" = (/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bXY" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bXZ" = (/turf/simulated/floor/airless,/area/toxins/test_area) @@ -5371,9 +5371,9 @@ "bZo" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bZp" = (/obj/machinery/atmospherics/binary/valve,/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "bZq" = (/obj/machinery/atmospherics/binary/valve,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) -"bZr" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 2; frequency = 1443; icon_state = "on"; id = "air_in"; on = 1},/turf/simulated/floor/engine,/area/toxins/mixing) -"bZs" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "ToxinsIgnitor"; on = 0},/turf/simulated/floor/engine,/area/toxins/mixing) -"bZt" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; external_pressure_bound = 0; frequency = 1443; icon_state = "in"; id_tag = "air_out"; internal_pressure_bound = 2000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine,/area/toxins/mixing) +"bZr" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 2; frequency = 1443; icon_state = "on"; id = "air_in"; on = 1},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) +"bZs" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; external_pressure_bound = 0; frequency = 1443; icon_state = "in"; id_tag = "air_out"; internal_pressure_bound = 2000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) +"bZt" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "ToxinsIgnitor"; on = 0},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) "bZu" = (/obj/machinery/door/airlock/external{name = "Toxins Test Chamber"; req_access_txt = "0"},/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bZv" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bZw" = (/obj/machinery/camera{c_tag = "Research Toxins Test Chamber North"; network = list("Toxins","Research","SS13")},/obj/machinery/light{dir = 1},/turf/simulated/floor/airless,/area/toxins/test_area) @@ -5744,7 +5744,7 @@ "cgx" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"; tag = "icon-pipe-j1 (WEST)"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgy" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) -"cgA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/landmark/nations{name = "Medistan"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) +"cgA" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1443; icon_state = "on"; id = "air_in"; on = 1},/turf/simulated/floor/plating/airless,/area/aisat/maintenance) "cgB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) @@ -5778,7 +5778,7 @@ "chf" = (/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "chg" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "chh" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) -"chi" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating{nitrogen = 0.01; oxygen = 0.01},/area/toxins/mixing) +"chi" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing) "chj" = (/obj/machinery/door/window/southright{name = "Toxins Launcher"; req_access_txt = "7"; req_one_access_txt = "0"},/obj/machinery/door/window/southright{dir = 1; name = "Toxins Launcher"; req_access_txt = "7"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing) "chk" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing) "chl" = (/turf/simulated/floor/airless{icon_state = "warning"},/area/toxins/test_area) @@ -5844,15 +5844,16 @@ "cit" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/structure/sign/poster/legit{pixel_y = -32},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "ciu" = (/obj/machinery/atmospherics/binary/valve{dir = 4},/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "civ" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) -"ciw" = (/obj/machinery/mass_driver{dir = 4; id_tag = "toxinsdriver"},/turf/simulated/floor/plating/airless,/area/toxins/mixing) -"cix" = (/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/toxins/mixing) -"ciy" = (/turf/simulated/floor/plating/airless,/area/toxins/mixing) -"ciz" = (/obj/machinery/door/poddoor{id_tag = "toxinsdriver"; name = "Toxins Launcher Bay Door"; protected = 0},/turf/simulated/floor/plating/airless,/area/toxins/mixing) +"ciw" = (/obj/machinery/mass_driver{dir = 4; id_tag = "toxinsdriver"},/turf/simulated/floor/plating,/area/toxins/mixing) +"cix" = (/turf/simulated/floor/plating,/area/toxins/mixing) +"ciy" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/toxins/mixing) +"ciz" = (/obj/machinery/door/poddoor{id_tag = "toxinsdriver"; name = "Toxins Launcher Bay Door"; protected = 0},/turf/simulated/floor/plating,/area/toxins/mixing) "ciA" = (/obj/machinery/door/poddoor{id_tag = "toxinsdriver"; name = "Toxins Launcher Bay Door"; protected = 0},/turf/simulated/floor/plating/airless,/area/toxins/test_area) "ciB" = (/obj/item/device/radio/beacon,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/airless,/area/toxins/test_area) "ciC" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/toxins/test_area) "ciD" = (/obj/machinery/camera{c_tag = "Research Toxins Test Chamber East"; dir = 8; network = list("Toxins","Research","SS13")},/obj/machinery/light{dir = 4},/turf/simulated/floor/airless,/area/toxins/test_area) "ciE" = (/turf/simulated/wall/r_wall,/area/storage/tech) +"ciF" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/apc{dir = 1; name = "Engineering Hardsuit Storage APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/engine/hardsuitstorage) "ciG" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plating,/area/storage/tech) "ciH" = (/obj/machinery/camera{c_tag = "Tech Storage"; dir = 2; network = list("SS13")},/obj/machinery/power/apc{dir = 1; name = "Tech Storage APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/cyborgrecharger{pixel_x = -4; pixel_y = -2},/obj/item/weapon/circuitboard/mech_bay_power_console{pixel_x = 2; pixel_y = 2},/obj/item/weapon/circuitboard/mech_recharger,/obj/item/weapon/circuitboard/mechfab{pixel_y = 3},/turf/simulated/floor/plating,/area/storage/tech) "ciI" = (/obj/structure/table,/obj/item/device/analyzer,/obj/item/device/healthanalyzer,/turf/simulated/floor/plating,/area/storage/tech) @@ -5916,7 +5917,7 @@ "cjO" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/storage/tech) "cjP" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/storage/tech) "cjQ" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/storage/tech) -"cjR" = (/obj/structure/table,/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating,/area/storage/tech) +"cjR" = (/obj/structure/table,/obj/item/weapon/apc_electronics,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating,/area/storage/tech) "cjS" = (/turf/simulated/floor/plating,/area/storage/tech) "cjT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/storage/tech) "cjU" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plating,/area/storage/tech) @@ -6343,7 +6344,6 @@ "crZ" = (/obj/structure/stool,/obj/machinery/camera{c_tag = "Aft Starboard Solar Control"; dir = 4; network = list("SS13")},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "csa" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "csb" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) -"csc" = (/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "csd" = (/obj/structure/spacepoddoor,/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "cse" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/camera{c_tag = "Mechanic's Workshop West"; dir = 2; network = list("SS13")},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "csf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) @@ -6547,7 +6547,6 @@ "cvV" = (/obj/machinery/door/firedoor{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering"; req_access_txt = "32"; req_one_access_txt = "0"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room) "cvW" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room) "cvX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room) -"cvY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/landmark/nations{name = "Atmosia"},/turf/simulated/floor,/area/engine/break_room) "cvZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room) "cwa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos/control) "cwb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor,/area/atmos/control) @@ -7057,10 +7056,10 @@ "cFL" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/light{dir = 1},/obj/item/weapon/cartridge/engineering{pixel_x = 3},/obj/item/weapon/cartridge/engineering{pixel_x = -3; pixel_y = 2},/obj/item/weapon/cartridge/engineering{pixel_x = 4; pixel_y = 5},/turf/simulated/floor,/area/engine/engineering) "cFM" = (/obj/machinery/power/apc{cell_type = 15000; dir = 1; name = "Engineering APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor,/area/engine/engineering) "cFN" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/engine/hardsuitstorage) -"cFO" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/apc{dir = 1; name = "Engineering Hardsuit Storage APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/engine/hardsuitstorage) -"cFP" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_x = 0; pixel_y = 24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/engine/hardsuitstorage) -"cFQ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor,/area/engine/hardsuitstorage) -"cFR" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/engine/hardsuitstorage) +"cFO" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor,/area/engine/hardsuitstorage) +"cFP" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_x = 0; pixel_y = 24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/engine/hardsuitstorage) +"cFQ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/engine/hardsuitstorage) +"cFR" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Secure Storage APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure) "cFS" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/engine/chiefs_office) "cFT" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/obj/structure/table/reinforced,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/device/megaphone,/mob/living/simple_animal/parrot/Poly,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cFU" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Chief Engineer's Desk"; departmentType = 3; name = "Chief Engineer Requests Console"; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/photocopier,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) @@ -7206,7 +7205,7 @@ "cIE" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "n2o_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/n20,/area/atmos) "cIF" = (/turf/simulated/floor/engine/n20,/area/atmos) "cIG" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cIH" = (/obj/machinery/alarm{pixel_y = 25; target_temperature = 283.15},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"cIH" = (/obj/machinery/alarm{pixel_y = 25},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cII" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor{dir = 10; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/medical/virology) "cIJ" = (/obj/structure/flora/kirbyplants,/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cIK" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1},/turf/simulated/floor/plating/airless,/area/toxins/test_chamber) @@ -7450,8 +7449,7 @@ "cNo" = (/obj/structure/sign/poster{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cNp" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "Engineering Secure Storage North"; dir = 4; network = list("SS13")},/obj/machinery/shield_capacitor,/turf/simulated/floor/plating,/area/storage/secure) "cNq" = (/obj/machinery/shield_capacitor,/turf/simulated/floor/plating,/area/storage/secure) -"cNr" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Secure Storage APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure) -"cNs" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/alarm{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure) +"cNr" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/alarm{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure) "cNt" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure) "cNu" = (/obj/machinery/camera{c_tag = "Engineering West"; dir = 4; network = list("SS13")},/obj/structure/dispenser,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engine/engineering) "cNv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/engine/engineering) @@ -7841,7 +7839,7 @@ "cUP" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/aisat/entrance) "cUQ" = (/turf/simulated/wall/r_wall,/area/aisat/entrance) "cUR" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/aisat/entrance) -"cUS" = (/obj/structure/table,/obj/item/device/radio{pixel_x = -6; pixel_y = 4},/obj/item/weapon/crowbar,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/alarm{pixel_y = 25; target_temperature = 283.15},/turf/simulated/floor{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/aisat/entrance) +"cUS" = (/obj/structure/table,/obj/item/device/radio{pixel_x = -6; pixel_y = 4},/obj/item/weapon/crowbar,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/aisat/entrance) "cUT" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/aisat/entrance) "cUU" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/intercom{dir = 4; name = "station intercom (General)"; pixel_x = 28},/obj/machinery/light_switch{pixel_x = 25; pixel_y = -9},/turf/simulated/floor{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/aisat/entrance) "cUV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/aisat/entrance) @@ -8233,7 +8231,6 @@ "dcr" = (/obj/structure/closet/l3closet,/obj/machinery/light{dir = 4},/obj/item/clothing/mask/gas,/turf/simulated/floor{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/virology) "dcs" = (/obj/structure/closet/l3closet,/obj/item/clothing/mask/gas,/turf/simulated/floor{dir = 6; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/medical/virology) "dct" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1},/turf/simulated/floor/plating/airless,/area/maintenance/asmaint) -"dcu" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1443; icon_state = "on"; id = "air_in"; on = 1},/turf/simulated/floor/plating,/area/aisat/maintenance) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8311,13 +8308,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGafxacGacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAafyafyafAaeAafyafyafAaeAaaaagSaifaigaihagSaiiaijaikailaimainaioaipagvaiqairahhaisaitaiuahUaivaiwaixaiyaizaiAaiBaiCaiDaiEaiFaiGaiFaiHahAaieaieaieaieaieaieaieaieahAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQaaaaaaaaaaiIaaaaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAafAafyaiJaeAafAafyaiKaeAaaaagSaiLaiMaiNagSaiOaiOaiOaiOaiPaiQaiRaiSagvaiTaiUaiVaiWaiXaiYahUaiZajaajbajcajdajeajfajgaiDaiEajhaiGajhajiahAaieaieaieaieaieaieaieaieahAagQagQajjaabagQagQagQagQagQagQagQagQagQagQagQagQagQagQaabaabajkajlajmaabaabagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafxaabajnaabafxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaeAajoajpajqajrajoajpajqajsajtajuajuajuajuajuajuajuajuajvajwajxajyajzajAajBajCajDajEajFajGahUajHajIajJajKajdajeajKajgajLaiEaiCaiCajMajNajOaieaieaieaieaieaieaieaieahAaabaabaabaabaabaabaaaaabaaaaabaabaabaabaabaabaabaabaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGacGafxafxaabaabaaaajQaaaaabaabafxafxacGacGacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAajRajSajTafyajUajVajWajXajtajYajZakaakbakcakdakdajuakeakfakgakhakiajBakjakkaklakmaknajFakoakpakqakqajKakraksaktakuakvakwakxakyakzaiCakAaieaieaieaieaieaieaieaieahAaabakBakCakCakCakDakCakCakCakCakDakCakCakCakCakEaabaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGacGafxafxaabaabaaaajQaaaaabaabafxafxacGacGacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAajRajSajTafyajUajVajWajXajtajYajZakaakbakcakdakdajuakeakfakgakhakiajBakjakkaklakmaknajFakoakpakqakqajKakraksaktakuakvakwakxakxakzaiCakAaieaieaieaieaieaieaieaieahAaabakBakCakCakCakDakCakCakCakCakDakCakCakCakCakEaabaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaaaaaabaaaaabaaaaaaajQaaaaaaaabaaaaabaaaaaaacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAakFafyakGakHakIakJakKakLajtakMakNakOakOakPakQakRajuakSakTakUakVakiakWakXakYakZalaalbalcaldaleakqalfalgalhalialjalkallalmaiCaiCaiCalnajOaieaieaieaieaieaieaieaieahAaabaloaabaabaabaloaabaaaaaaaabaloaabaabaaaaaaaloaabaaaaabaabajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaabalpalpalpalpalpaaaalqaaaalpalpalpalpalpaabacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAalralsakGafyaltakJalualvajtalwalxalyalzakQakQakRajualAalBalCalDalEajBalFalGaklalHalIajFalJalKalLalLalMajdalNalOalPalQaiCaiFaiGaiCalRahAahAahAahAahAahAahAahAahAahAaabaloaabaaaajkajlajmaaaaaaajkajlajmaaaaaaajkajlajmaabaabaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaalSalTalTalTalTalUalValWalXalXalXalXalYaaaacGaaaaaaaaaalZamaamaamaambamcaaaaaaaaaaeAaeAaeAamdamdameamfamgamdajuamhamiamjamkamlammamnajuamoampamqakVamrajGamsamtamuamvamwajGamxamyamzamAamBamCamDamEamFamGaiCajhamHamIamJahAamKamKamKamKamKaaaaaaaaaaaaaabaloaabaaaajkajPajmaaaaaaajkajPajmaaaaaaajkajPajmaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaabamLamLamLamLamLaaaamMaaaamLamLamLamLamLaabacGaaaaaaaaaamNamOamPamQamNamRamSamSamTamUamVamWamXamYamZanaanbancajuajuandaneajuajuajuajuajuanfanganhanianfajGajBajCanjajEajFajGankanlanmannahUahUahUahUannanoanpanmahUahAanqahAanransantantanuaaaaaaaaaaaaaaaaloaabaaaajkajPajmaaaaaaajkajPajmaaaaaaajkajPajmaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaaaaaaaaabaaaaaaaaaanvaaaaaaaaaaabaaaaaaaaaaabaaaaaaaaaanwanxanyanzanAanBanCanDanEanFanGanHanIanJanKanLanManNanOanPanQanRanSanTanSanSanUanVanWanXanYanSanZaoaaobaocaodaoeaofaogaohanSaoiaojaokaolaomaonaooaopaoqaoraosaotaouaovaowaoxaoyaozaaaaaaaaaaaaaaaaloaabaaaajkajPajmaaaaaaajkajPajmaaaaaaajkajPajmaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaabalpalpalpalpalpaaaamMaaaalpalpalpalpalpaabacGaaaaaaaaaamNaoAaoBaoCamNamRaoDaoEaoFaoGaoHaoIaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoWaoZapaaoTapbapcapdaoTaoTapdaoXapcapeaoTaoTapbapcaoVapfapgaphapiapjapkaplapmapnaovapoantantappaaaapqaprapqaaaaloaabaaaajkajPajmaaaaaaajkajPajmaaaaaaajkajPajmaaaaabaabajkajPajmaabaabagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaabalpalpalpalpalpaaaamMaaaalpalpalpalpalpaabacGaaaaaaaaaamNaoAaoBaoCamNamRaoDaoEaoFaoGaoHaoIaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoWaoZapaaoTapbapcapdaoTaoTapdaoXapcapeaoTaoTapbapcaoVapfapgaphapiapjapkaplapmapnaovapoantantappaaaaacapqaacaaaaloaabaaaajkajPajmaaaaaaajkajPajmaaaaaaajkajPajmaaaaabaabajkajPajmaabaabagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapsapsapsapsapsaaaaaaaaaaaaaaaaaaajjaaaalSalTalTalTalTalUalValWalXalXalXalXalYaaaacGaaaaaaaaaamNaptaptapuamNaaaaaaaaaapvapwapxapyapzapAapAapAapBapBapBapBapCapDapEapEapEapFapGapHapFapEapEapEapIapJapKapLapMapKapNapJapOapOapOapPapQapOapRapSapTapUapVapWapXapmapnapYapYamKapZapZapZamKaqaamKaabaloaabaaaajkajPajmaaaaaaajkajPajmaaaaaaajkajPajmaabaabaaaaabaiIaabaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapsapsapsapsapsaaaaaaaaaaaaaaaaaaacGaqbamLamLamLamLamLaaaamMaaaamLamLamLamLamLaabacGaaaaaaaaaanwaqcaptaqdamNamRaqeaoEaqfaqgaqhaqiaqjaqkaqlaqmapBaqnaqoaqpaqqaqraqsaqtaquaqvaqwaqxaqyaqzaqAaqsaqBaqCaqDaqEaqFaqGaqHaqCapOaqIaqJaqKaqLapOaqMaqNaqOaqPaqQaqRapXapmaqSaqTaqUaqVaqWaqWaqXamKaqYamKaabaloaabaaaajkajPajmaaaaaaajkajPajmaaaaaaajkajPajmaaaaaaaaaaabaloaabaaaaaaaqZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapsapsapsapsapsaaaaaaaaaaaaaaaaaaacGaaaaaaaaaaabaaaaaaaaaanvaaaaaaaaaaabaaaaaaaaaacGaaaaaaaaaamNaraaptaptarbarcardarearfarganLarharianGanGarjapBarkarlarmarnaroarparqarrarsartaruarvarrarwarxaryarzarAarBarCarDarEarFarGarHarIarJarKapOarLarMarMarNarMarOapXapmaovaovaovaovarPaovarQarRarSamKakBarTakEaaaaaaaiIaabaabaabaabaiIaabaabaabaabaiIaabaabaabaabarUarVakEaabaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8345,10 +8342,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaInaKAaKzaKzaKzaKzaKzaKzaKAaInaMlaCuaMmaMnaMoaMoaMoaMoaMoaMoaMpaKHaLHaMqaLJaMraMqaMqaLHaKHaMsaMtaMuaMuaMuaMuaMuaMuaMuaMuaMvaaaaLRaMwaMxaMyaMzaMAaLRaaaaJGaJLaJMaMBaMCaMDaMEaLSaJMaGvaIKaMFaMFaKPaMGaMHaKSaKTaKSaMHaMIaMJaKOaKOaIKaJZaxqaKaazIaMKaBRaMLaCZaDaaDbaEgaMbaMcaMMaMNaMOaMOaMcaMPaMQaMRaMeaMSaMTaMUaMeaMVayGaaaaMWaMXaMXaMXaMXaMXaMYaaaayGayHaMZaNaayJayJayGayGayJayJaNbaNcayJayGazxayGayGayJayJaNdaNeayGayGayGaHYaMiayHaDxayHaMjazwayKaFSayGaNfaNgaNfayGayGayGaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNhaNiaNjaNiaNiaNkaNlaNiaNiaNjaNmaNnaCuaKBaNoaMoaNpaNqaNraNsaNtaNuaKHaLHaMqaLJaNvaMqaMqaLHaKHaNwaNxaNyaNzaNAaNBaNCaNDaNEaNFaMvaabaLRaNGaNHaNIaNJaNKaLRaabaJGaJLaJMaNLaNMaNNaNOaNPaJMaGvaIKaJNaJOaNQaNRaLXaJOaNSaJOaLXaNTaNUaJOaJYaIKaJZaxqaNVazIaKbaEeaEfaCZaDaaDbaNWaNXaMcaNYaMQaMQaMQaNZaOaaObaOcaMeaOdaOeaOfaOgaOhazxaaaaaaaaaaaaaaaaaaaaaaaaaaaayGaOiaOjaOkaOlaOmayGaEtayHaHVaDxayHayGaaaayGayHayHayHayHaDxaOnaOoaOpaOpaOpaOpaOqaOraOsaOtaOuaOvaOuaOwaOxaOxaOyaOzaOAaOBaOCaOCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNhaNmaNiaODaOEaOFaOGaOHaOIaOJaOKaOLaOMaONaOOaKzaKBaOPaMoaOQaORaOSaOTaOSaOUaKHaOVaMqaOWaOXaOYaOXaOZaPaaPbaPcaPdaPdaPdaPdaPdaPdaPeaPfaMvaaaaLRaPgaNHaPhaNJaPiaLRaaaaJGaJLaJMaPjaPkaPlaPmaPnaJMaGvaIKaPoaPoaKPaPpaMHaKSaPqaKSaMHaPraKWaPsaPsaIKaPtazUaPuazIaKbaEeaPvaPvaPvaPvaPwaPxaPyaPzaPAaPBaPBaPBaPCaPBaPDaPEaPFaPGaPHaPEaPIaPJazxayGayGayGayGayGayGayGayGayGayGayGayGaBMayGayGayGayGayHaDxaOiazvaabazvayHaPLaPMaPNaPOaPPaPQaPRaPRaPRaPRaPSaPTaPUaPVaPWaPXaPWaPYaPWaPWaPZaQaaQbaQbaQcaQdaQeaQeaQeaQeaQeaQeaQeaQeaQeabLadbaaaaaaaaaaaaaaaaaaaaaaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaQgaQhaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaQmaMoaQnaQoaQpaQqaQraQsaKHaQtaMqaQuaQvaQwaQxaQyaKHaQzaPdaPdaPdaPdaPdaPdaPdaPeaQAaMvaabaLRaQBaQCaQDaQEaQFaLRaabaJGaJLaJMaQGaQHaQIaQJaQKaJMaGvaIKaIKaIKaIKaQLaLXaJOaLYaJOaLXaQMaIKaIKaIKaIKaQNaQOaQPazIaMKaQQaQRaQRaQRaQSaQTaQUaQVaQWaQXaQVaQYaQZaRaaQVaRbaRcaRdaReaRfaMeaRgaRhaRiaRjaRjaRhaRkaRlaRlaRlaRlaRlaRmaRnaRlaRoaRpaRqaRraRsaRtaRuaRvaRwaRxaRwaRyaRzayHayGaRAaRBaRCaRDaREaRFaRGaRHaRIaRJaRIaRKaRLaRMaRNaROaRPaRQaRRaRSaRTaRUaQdaRVaRWaRXaRYaRZaSaaSbaScaSdaSeaaaaaaaaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaOFaOFaNjaOMaQjaOFaQjaSgaQjaOFaQjaOMaQkaQlaKzaKBaShaMoaMoaSiaSjaSkaSjaMoaKHaKHaKHaKHaSlaSmaSnaSoaKHaSpaSqaSraPdaPdaSsaPdaStaSuaSvaMvaaaaLRaLRaSwaSxaSwaLRaLRaaaaJGaJLaJMaSyaSzaSAaQJaSBaJMaGvaIKaJNaJOaSCaNRaLXaJOaLYaJOaLXaNTaSDaIKaIKaIKaSEaSFaSGaSHaSIaSJamKamKaSKaSLaSMaSNaMcaSOaMQaMcaSPaMcaSQaMcaSRaSSaSTaSUaSVaSWaSXaSYaSZaTaaTbaTcaTdaTbaTbaTeaTbaSYaTfaSYaOvaTgaSYaThaTiaTjaTkaTlaTmaTnaToaTpaTqaTraOuaTsaTtaTuaTvaTwaTxaTyaTzaRHaTAaTBaRIaTCaTDaTEaTFaROaTGaRQaRRaRSaTHaTIaQdaTJaTKaTKaTLaScaScaScaScaSdaSeaaaaaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaTMaTNaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaTOaTPaTQaTRaTSaTSaJraTTaTUaTVaTWaTXaTYaTZaMqaUaaKHaUbaUcaUdaUeaUfaUgaUhaUiaUjaUkaMvaaaaabaaaaUlaUmaUlaaaaabaaaaCuaJLaJMaUnaUoaUpaUqaUraJMaGvaIKaUsaUtaKPaUuaUvaKSaUwaKSaUxaUyaUzaIKaUAaUBaUCaUDaUEaUFaUGaUHaaaaaaaSKaUIaUJaUKaMcaULaUMaMQaMQaUNaMQaMQaMQaUOaMeaUPaMeaUQaURaMeaUSaMeaUTaUUaUVaUWaUXaUYaUTaUZaVaaVbaVcaVbaVbaVbaVbaVdaVbaVbaVeaVbaVfaVgaVbaVhayHaRDaViaTvaVjaVkaVlaVmaVnaVoaVpaVqaRIaVraVsaVtaVuaVvaTGaRQaRRaRSaRTaVwaQdaVxaTKaTKaTLaScaScaScaScaSdaSeaaaaaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVyaVzaNiaODaOMaOFaVAaVBaOFaOFaVCaVAaOMaONaVDaKzaKBaVEaVFaVGaVHaVGaVGaVGaVGaVGaVIaJraKHaVJaVKaVJaKHaKHaVLaVMaVLaMuaMuaMuaMuaVLaVNaVOaMvaVPaVQaVQaVRaVSaVRaVQaVQaVTaVUaVVaJMaVWaJMaVXaVYaVZaJMaWaaIKaIKaIKaIKaWbaWcaWdaWeaWdaWcaWbaIKaIKaWfaUDaUDaUDaUDaWgaWhaWiaWjaWkaSKaWlaUJaWmaMcaMcaMcaMcaMcaMcaMcaMeaMeaUOaWnaWoaWpaWqaWraWsaWtaWuaUTaWvaWwaWxaWyaWzaUTaWAaWBaWCaWDaWCaWEaWFaWGaWHaWIaWJaWKaWLaWMaWNaVbaWOaRtaWPaWQaWRaVjaWSaVlaVmaWTaRIaWUaWVaWWaWXaWYaTFaTFaRIaRIaRQaRRaRSaTHaWZaQdaXaaXbaXcaXdaXeaXfaScaScaXgaSeaaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaQgaQhaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaQmaMoaQnaQoaQpaQqaQraQsaKHaQtaMqaQuaQvaQwaQxaQyaKHaQzaPdaPdaPdaPdaPdaPdaPdaPeaQAaMvaabaLRaQBaQCaQDaQEaQFaLRaabaJGaJLaJMaQGaQHaQIaQJaQKaJMaGvaIKaIKaIKaIKaQLaLXaJOaLYaJOaLXaQMaIKaIKaIKaIKaQNaQOaQPazIaMKaQQaQRaQRaQRaQSaQTaQUaQVaQWaQXaQVaQYaQZaRaaQVaRbaRcaRdaReaRfaMeaRgaRhaRiaRjaRjaRhaRkaRlaRlaRlaRlaRlaRmaRnaRlaRoaRpaRqaRraRsaRtaRuaRvaRwaRxaRwaRyaRzayHayGaRAaRBaRCaRDaREaRFaRGaRHaRIaRJaRIaRKaRLaRMaRNaROaRPaRQaRRaRSaRTaRUaQdaRVaRWaRXaRYaRZaSaaSbaScaSdapraaaaaaaaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaOFaOFaNjaOMaQjaOFaQjaSgaQjaOFaQjaOMaQkaQlaKzaKBaShaMoaMoaSiaSjaSkaSjaMoaKHaKHaKHaKHaSlaSmaSnaSoaKHaSpaSqaSraPdaPdaSsaPdaStaSuaSvaMvaaaaLRaLRaSwaSxaSwaLRaLRaaaaJGaJLaJMaSyaSzaSAaQJaSBaJMaGvaIKaJNaJOaSCaNRaLXaJOaLYaJOaLXaNTaSDaIKaIKaIKaSEaSFaSGaSHaSIaSJamKamKaSKaSLaSMaSNaMcaSOaMQaMcaSPaMcaSQaMcaSRaSSaSTaSUaSVaSWaSXaSYaSZaTaaTbaTcaTdaTbaTbaTeaTbaSYaTfaSYaOvaTgaSYaThaTiaTjaTkaTlaTmaTnaToaTpaTqaTraOuaTsaTtaTuaTvaTwaTxaTyaTzaRHaTAaTBaRIaTCaTDaTEaTFaROaTGaRQaRRaRSaTHaTIaQdaTJaTKaTKaTLaScaScaScaScaSdapraaaaaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaTMaTNaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaTOaTPaTQaTRaTSaTSaJraTTaTUaTVaTWaTXaTYaTZaMqaUaaKHaUbaUcaUdaUeaUfaUgaUhaUiaUjaUkaMvaaaaabaaaaUlaUmaUlaaaaabaaaaCuaJLaJMaUnaUoaUpaUqaUraJMaGvaIKaUsaUtaKPaUuaUvaKSaUwaKSaUxaUyaUzaIKaUAaUBaUCaUDaUEaUFaUGaUHaaaaaaaSKaUIaUJaUKaMcaULaUMaMQaMQaUNaMQaMQaMQaUOaMeaUPaMeaUQaURaMeaUSaMeaUTaUUaUVaUWaUXaUYaUTaUZaVaaVbaVcaVbaVbaVbaVbaVdaVbaVbaVeaVbaVfaVgaVbaVhayHaRDaViaTvaVjaVkaVlaVmaVnaVoaVpaVqaRIaVraVsaVtaVuaVvaTGaRQaRRaRSaRTaVwaQdaVxaTKaTKaTLaScaScaScaScaSdapraaaaaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVyaVzaNiaODaOMaOFaVAaVBaOFaOFaVCaVAaOMaONaVDaKzaKBaVEaVFaVGaVHaVGaVGaVGaVGaVGaVIaJraKHaVJaVKaVJaKHaKHaVLaVMaVLaMuaMuaMuaMuaVLaVNaVOaMvaVPaVQaVQaVRaVSaVRaVQaVQaVTaVUaVVaJMaVWaJMaVXaVYaVZaJMaWaaIKaIKaIKaIKaWbaWcaWdaWeaWdaWcaWbaIKaIKaWfaUDaUDaUDaUDaWgaWhaWiaWjaWkaSKaWlaUJaWmaMcaMcaMcaMcaMcaMcaMcaMeaMeaUOaWnaWoaWpaWqaWraWsaWtaWuaUTaWvaWwaWxaWyaWzaUTaWAaWBaWCaWDaWCaWEaWFaWGaWHaWIaWJaWKaWLaWMaWNaVbaWOaRtaWPaWQaWRaVjaWSaVlaVmaWTaRIaWUaWVaWWaWXaWYaTFaTFaRIaRIaRQaRRaRSaTHaWZaQdaXaaXbaXcaXdaXeaXfaScaScaXgapraaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVyaNiaNjaNiaNiaNkaNlaNiaNiaNjaVzaXhaCuaXiaVEaInaXjaXjaXkaXjaXlaDEaXmaXnaJraXoaXpaXqaXqaXraXsaXqaXtaXqaXqaXqaXuaXqaXqaXvaXwaXxaXyaXzaXAaXyaXBaXyaXyaXyaXyaXCaXDaXEaXqaXqaXFaXGaXHaXIaXJaXKaXLaXMaXNaXOaXPaXPaXPaXPaXPaXPaXQaXRaXSaXTaXUaXVaXWaXXaXYaXZaUDaUDaYaaYbaYcaYbaYcaYdaYeaYfaYgaYhaYiaMeaYjaYkaYlaYmaYnaYnaYoaYpaYqaYraUTaYsaYtaYuaYuaYvaUTaYwaYxaYyaYzaYAaYAaYBaYCaYDaWNaYEaYFaYGaYHaWNaVbaVhaKsaRDaYIaYJaYJaYKaYLaYJaYMaRIaYNaYOaRIaYPaYQaTFaYRaRIaYSaYTaYUaRSaQbaQbaQdaYVaQeaYWaYXaQeaQeaQeaQeaQeabLadbaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaInaYYaKzaKzaKzaKzaKzaKzaYYaInaMlaCuaYZaZaaInaZbaZcaZdaZdaZeaDEaZfaXnaZgaZhaXpaZiaZjaZkaZlaZlaZmaZnaZnaZnaZoaZpaZpaZqaZraZsaZlaZlaZtaZpaZvaZwaZxaZxaZyaZzaZAaZuaZuaZuaZBaXGaXHaXIaXJaXJaXJaXJaZCaXJaXJaXJaXJaXJaXJaZDaZEaZFaZGaZHaZIaZJaZKaZLaZMaZNaZNaZNaZOaZPaZPaZPaZQaYiaYiaYiaZRaZSaYiaMeaZTaZUaYnaYnaZVaYnaZWaZXaYqaZYaUTaZZbaababbacbadaUTbaebafbagbahbaibajaVbbakbalbakaVbaVbaVbaVeaVbaVbaVhayHaRDbamaTvaTvaTvbanaTvbaoaRIaRIaRIaRIaRIaRIaRIbapaRIaRSaRSaRRaRSbaqbaraQbbasbatbaubavbawbaxbaybazbaAaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaLyaCuaInaGdaKzbaBbaCbaDbaEaKzaGdaInaInaCubaFaVEaInbaGbaHaZdaZdaZeaDEbaIaXnaJraZhaXpaXqbaJbaKbaLbaLbaMbaNbaObaLbaPbaLbaQbaLbaRbaSbaLbaLbaWbaLbaLbaUbaVbaLbaWbaXbaYbaZaXqaXqbbabbbbbcbbdbbebbfbbebbgbbhbbgbbgbbgbbgbbgbbgbbibbjbbkbbkbbkbbkbblbbkbbmbbnbbkbbkbbobbpbbqbbqbbqbbqbbqbbqbbqbbraYiaYiaMebbsbbtbbubbvbbvbbwbbxaZXaYqbbyaUTaUTaUTaUTaUTbbzaUTbbAbbBbbCbbDaWCbbEaVbbbFbbGbbHbbIbbJbbKbbLbbMaVbaVhaHYaRDbbNbbOaTvbbPbbQaTvbbRbbRaRDbbSbbTbbUaQbbbVbbWbbXaRSaRSbbYbbZaQbbcaaQbbcbbatbccbcdbcebatbatbcfbaAaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8356,7 +8353,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdCbdDaJrbdEbdFbdGbdHbdIbdJbdHbdKbdLbdHbdHbdMbdNbdObdPbdQbdQbdQbdRbdQbdSbdTaDEbdUbdVbdWbcobdXbdYbdZbeabebbecbedbeebefbegbehbeibcobejbekbctbelbembenbcvbeobepbeqbcvberbesbetberberberbeuaXJaXObcDaaaaaaaaaaaaaaaaaaaaabcEbevbewbexbeybezbeAbeBbeCbeDbeEbeFbcEaaaaaaaaaaaaaaaaaaaaabcKbeGaYibeHaMebeIbcNbcSbcSbcSbcSbcSbeJbeKbcSbcSbcSbeLbeMbeMbeNbeObePbeQbeRbeSbeTbeUaVbbeVbeWbeXbeYbeYbeXbeZbfaaVbaVhayHaRDbfbbfcaTvbbPbbQaTvbfdbfdaRDaRDbfeaRDaQbbffbbWbbZbfgbfgbfhbbZaQbaQbaQbbfibatbfjbfjbfkbfjbatbflbaAaabaaaaaabfmaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdCbfnbfobfnbfnbfnbfnbfnbfnbfobfnbfnbfpaJrbfqbfrbfsaJrbftaJrbfubfvbfwbfxbfyaDEbdVbdVbfzbcobfAbecbecbecbecbecbedbfBbecbecbecbfCbcobejbfDbctbfEbfFbfGbcvbfHbfIbfJbcvbfKbfLbfMbfNbfObesbeuaXJaXObcDaaaaaaaaaaaabcEbcEbcEbcEbfPbfQbfRbfSbfTbfUbfVbfWbfXbfYbfZbcEbcEbcEbcEaaaaaaaaaaaabcKbeGaYibgabgbbgcbgdbgebgfbgcbggbghbgibgjbgkbglbcSbeLbgmbeMbgnbgobeMbgpbgqbgrbgsbeMbgtbgubgvbeXbeYbeYbeXbgwbgxaVbaVhaKsaRDbdjaTvbbPbbPbbQbbPaTvaTvbgybgzaTvbgAaQbbgBbgCbgDbfgbfgbgEbgDbgFaQbbgGbgHbatbgIbgIbgJbgIbatbdAbaAbgKbaAbaAbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCuaCuaInaInaInaInaInaInaInaInaInaCuaDEbgLbgMbgNbgNbgNbgNbgNbgNbgObgNbgNbgNaDEbdVbejbgPbcobgQbecbecbgRbgSbgTbgUbgRbecbecbecbgVbcobejbekbctbgWbgXbgYbcvbgZbhabhbbcvbhcbhdbhebhfbhgbesbhhbhiaXObcDbcDbhjbcEbcEbcEbhkbhlbhmbhnbhobhobhpbhqbhobhrbhobhsbhtbhubhvbhwbhxbcEbcEbcEbhjbcKbcKbeGaYiaYiaMebhybhzbgkbhAbcSbhBbhCbcSbhDbhEbglbcSbeLbeMbeMbhFbhGbhHbhIbhJbhKbhLbeMbhMbgubhNbeXbeYbeYbhObhPbhQaVbaVhayHaRDbhRbhSbhTbbPbbQbhUaTvaTvbhVaTvbhWbhXaQbbhYbhZbiabfgbfgbibbiabicaQbbidbgHbatbatbatbavbatbatbiebifbigbihbiibijaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSbiTbiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbcSbjgbcSbcSbcSbjhbjibcSbhDbjjbglbcSbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatbjMbaAbgKbaAbaAbgKaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSakybiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbcSbjgbcSbcSbcSbjhbjibcSbhDbjjbglbcSbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatbjMbaAbgKbaAbaAbgKaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikbjNaInaKzaKBbfqbgNbimbjObjPbimbjQbjRbjSbjTbgNbjUaFmbjWbcsbcobjXbjYbjZbkabkbbkcbkdbkebkebkebkfbkgbcobejbivbkhbkibkjbkkbcvbcvbcvbcvbcvbklbkmbknbkobkpbesbeubiKaXJaXJaXJbkqbkrbksbktbkubkvbhobkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkubkHbkIbkJbkKbkLbkMbkNbkObkPaYibkQaMebcSbkRbkSbglbcSbkTbkUbcSbkVbkWbglbcSbeLbeMbeMbeMbeNbeMbkXbeMbjpbhLbkYaVbbkZbhNbeXbeYbeYbeXbhPblaaVbblbblcbldbleblfblgblhblibljbljbljbljbljbljblkbllblmbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbatbatbavbatbatblqbaAblrblrblrbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikblsbltblublvbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbmrbmsbmtaYiaYibjfbcSbmubcSbcSbcSaRebcSbcSbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatbmKbaAbmLbmMbmNbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikaInaInaKzbmPbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnCbnDbcSbnEbcSbnFbcSbnGbnHbnIbmwbnJaUTbnKbnLaUTaUTbnMbnNbnNbnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatblqbaAblrblrblrbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8370,26 +8367,26 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLyaCuaKzaKzaInaInaInaInaInaInaInaKBbxZbyabrXbybbycbydbyebyebyfbygbyhbyibyibyjbykbtzbtzbtzbtzbtzbtzbylbymbymbynbyobngbypbyqbyrbysbytbyubyvbywbngbyxbyybyzbuVbtLbwJbpIbpIbyAbnmbnmbyBbyCbyDbyEbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObwXbyPbyQbyPbyQbyRbwXbwYbySbyTbyUbyVbyWbyXbyYbyZbzabyTbzbbvvbvvbucbzcbzdbzebzfbzgbucbxnbvHbvHbvHbvHbvHbvHbvHbzhbzibzjbzkbzlbxqbzmbuhbznbzobzpbxxbxAbxzbzqbzrbukbzsbztbzubzvbzvbzwbzxbzybzzbzAbzAbzAbzBbzAbzCbzDbzEbzFbzGbzHbzIbzJbzKbzKbzKbzLbusbzMbxXbzNbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaaaaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaInbzObzPbzQbzRbzSbzSbzTbzUaJrbrXbzVbrXbzWbzXbzYbzZbrXbcsbAabAabAbbAcbAbbAbbAbbAcbAbbcsbcsbngbngbngbAdbngbAebAebAebAebAebAebyvbAfbAgbAhbAibAjbAkbAlbAmbAnbAobApbAqbArbAsbAtbAubAvbAwbAwbAxbAybAzbAAbABbACbADbAEbvjbAFbwVbAGbwTbAHbvjaaabAIbAJbAKbALbAJbAJbAJbAJbAMbnAbANbvvbAObAPbAQbARbASbATbAUbucbAVbAWbAXbAYbAZbBabBbbBcbvHbBdbuhbBebzlbBfbBgbuhbBhbBibxwbxxbxAbxzbxvbxAbukbxBbvXbBjbBkbBlbBmbBnbBobBpbBqbBrbBsbBtbBubBvbupbBwbBxbBybusbBzbBAbBBbxUbBCbBDbusbzMbxXbBEbwoaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaInbBFbBGbBHaJqaJqbBIbBJaJqbBKbrXbBLbycbBMbBNbBObBPbrXaaaaabaabbBQbBQbBQbBQbBQbBQbBQaaaaaabBRbBSbBTbBUbBVbAebAebAebAebAebAebBWbBXbBYbBZbCabCbbCcbCdbnmbnmbCebCfbnmbnmbCgbChbCibCjbCkbClbClbCmbClbCnbCobCpbCqbAEbvjbCrbvlbvlbvlbCsbvjaaabAIbAJbCtbCubCvbCwbCxbCybCzbCAbCBbvvbCCbucbvxbCDbCEbCFbCGbCHbCIbCJbCKbCLbCMbCNbCObCPbCQbCRbCSbCTbzlbCUbCVbuhbCWbCXbCYbCZbDabDbbDcbvVbukbDdbDebDfbDgbDgbDhbDibDjbDkbDlbDmbDnbDobDpbDqbupbDrbBxbDsbusbDtbDubDvbxUbxUbDwbusbxWbxXbDxbwoaaaaaaaaaaaaaabbDybDzbDAbDzbDAbDzbDBaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDCaInbDDbDDbDEaInaInaLyaCubDFbDGbrXbDHbycbycbycbrXbrXbrXaaaaaaaaabBQbBQbBQbBQbBQbBQbBQaaaaaabBRbDIbAebDJbDKbDKbDKbDKbDKbDLbDMbDKbDNbDObDPbDQbDRbDSbDTbnmbDUbpIbDVbDWbtLbDXbDYbDZbCjbCjbCpbEabEbbEcbEdbEebCpbvibAEbvjbEfbEgbEhbEibEjbvjaaabEkbAJbElbEmbEnbEobEpbEobEqbErbEsbvvbEtbucbEubEvbEvbEwbExbEybEzbEAbEBbECbEDbEDbEEbEFbEGbEHbuhbCTbEIaJSbuhbuhbuibEKbELbEMbuibukbukbukbENbEObvXbEPbBkbBlbEQbDgbDjbERbESbESbETbxJbEUbEVbEWbEXbxPbEYbusbEZbFabxUbFbbFcbFdbusbzMbFebwobwoaaaaaaaaaaaaaabbFfbFgbFhbFibFjbFkbFfaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDCaInbDDbDDbDEaInaInaLyaCubDFbDGbrXbDHbycbycbycbrXbrXbrXaaaaaaaaabBQbBQbBQbBQbBQbBQbBQaaaaaabBRbDIbAebDJbDKbDKbDKbDKbDKbDLbDMbDKbDNbDObDPbDQbDRbDSbDTbnmbDUbpIbDVbDWbtLbDXbDYbDZbCjbCjbCpbEabEbbEcbEdbEebCpbvibAEbvjbEfbEgbEhbEibEjbvjaaabEkbAJbElbEmbEnbEobEpbEobEqbErbEsbvvbEtbucbEubEubEvbEwbExbEybEzbEAbEBbECbEDbEDbEEbEFbEGbEHbuhbCTbEIaJSbuhbuhbuibEKbELbEMbuibukbukbukbENbEObvXbEPbBkbBlbEQbDgbDjbERbESbESbETbxJbEUbEVbEWbEXbxPbEYbusbEZbFabxUbFbbFcbFdbusbzMbFebwobwoaaaaaaaaaaaaaabbFfbFgbFhbFibFjbFkbFfaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbFnbBRbBRbFobFpbFqbFrbFrbFrbFpbAebyvbAfbAebAebAgbFsbFtbFubFvbFwbFxbFybpIbpIbFzbtLbDXbDYbFAbFBbFCbFDbFEbFFbFGbFHbFIbCpbFJbFKbwRbFLbFMbFNbFObFPbwXbwYbFQbAJbFRbFSbFTbEobFUbEobFVbErbFWbvvbFXbucbFYbFZbGabGbbGcbGdbGebGfbGgbGgbGhbGibGgbGgbGjbGkbGlbGmbGnbGobGpbGqbGrbGsbGtbGubGvbGwbGxbGybGzbGAbvXbGBbGCbGDbGEbGFbxGbGGbESbESbGHbGIbEUbGJbupbGKbGKbGLbusbGMbGNbGObGPbxUbGQbusbzMbGRbwoaaaaaaaaaaaaaaaaabbGSbGTbFhbFjbFhbGUbDAaabaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbGVbGWbGVbGXbGYbGZbGYbGYbGYbGYbHabyvbAfbHbbngbngbHcbpIbAibFvbHdbtLbHebHfbHfbHgbHhbHibHjbHkbHlbHmbHnbHobHpbHqbHrbHsbCpbCqbAEbvjbHtbHubHvbHwbHxbvjaaabEkbHybHzbHybHybHybHybHybHAbHybHBbvvbFXbucbHCbHDbHDbHEbHFbEybHGbHHbHIbHJbHKbHLbHMbHIbHNbHObHPbHQbHRbHSbHTbHTbHUbHVbHWbHXbHYbHZbIabIbbIcbIdbIebIfbIfbIgbIhbIibxGbIjbxJbxJbIkbIlbEUbImbInbIobIpbIqbIrbIsbItbIubIvbIubusbusbIwbEXbEXbIxbIxbIxbIxbIxbEXbFfbFjbFhbFjbFjbIybFfaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbIzbIAbIzbIBbAebFqbFrbFrbFrbAebAebyvbAfbICbIDbngbIEbpIbAibFvbIFbtLbIGbpIbrsbpIbIHbDXbvvbIIbHlbHmbIJbIKbILbIMbINbIObIPbIQbIRbISbISbITbIUbIVbvjbvjaaabEkbHybIWbIXbIYbIZbJabJbbJcbJdbJebvvbFXbCHbJfbJgbJhbJibJjbEybJkbJlbJmbJnbJobJpbJqbJrbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbGwbJFbGybJGbJHbvYbJIbJJbJKbJLbJLbxGbJMbJNbJObxGbJPbEUbJQbxGbJRbJSbJTbJUbJVbJWbJXbJYbJZbKabKbbKcbKdbKebKfbKfbKgbKhbKibKjbKkbDzbDAbKlbDAbDzbKmaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbFnbBRbBRbKnbAebFqbAebAebAebAebAebyvbAfbICbKobngbKpbpIbKqbKrbpIbKsbpHbpIbpIbKtbtLbDXbvvbIIbHlbHmbCpbKubKvbKwbKxbKybKzbKAbKBbKCbKDbwXbKEbKFbwXbwYbwYbKGbHybKHbKIbKJbKKbKLbKLbKMbKNbKObvvbKPbucbEybKQbEubKRbKSbEybJkbKTbKUbKVbKWbKXbKYbKUbJkbKZbLabLbbLbbLbbLcbLbbLdbLdbLebLfbLgbLhbLhbLibLgbLgbLhbLhbLjbLkbLjbLjbxGbxGbxGbxGbxGbLlbLmbBobxGbLnbLobLpbLqbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLAbLBbJVbLCbEXbLDbLDbLDbLEbEXbLFaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbIzbIAbIzbFobLGbLHbAebAebAebLGbAebyvbAfbICbLIbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPbLQbLRbLSbKzbLTbLUbLVbLWbLXbLYbLZbMaaaaaaaaaabHybMbbMcbMdbMdbMebMfbMgbHybMhbMibFXbMjbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbLgbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbMVbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbEXbIxbIxbEXbNcbNdbNebNfbNgbNhbNibLDaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbIzbIAbIzbFobLGbLHbAebAebAebLGbAebyvbAfbICbLIbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPbLQbLRbLSbKzbLTbLUbLVbLWbLXbLYbLZbMaaaaaaaaaabHybMbbMcbMdbMdbMebMfbMgbHybMhbMibFXbMjbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbLgbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbiTbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbEXbIxbIxbEXbNcbNdbNebNfbNgbNhbNibLDaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbNjbNkbNjbNlbNmbNnbNnbNnbNnbNnbNobNpbNqbICbNrbngbNsbNtbNubNvbNwbNxbNybNybNybNzbNzbNAbvvbNBbNCbHmbCpbNDbNEbNFbKvbNGbKzbNHbNIbNJbNKbNLbFNbNMbMaaaaaaaaaabHybNNbNObNPbNQbMebMfbMgbHybNRbNSbNTbNUbNVbNWbNXbNYbNZbOabObbOcbKUbKUbOdbOebKUbKUbJkbKZbOfbOgbOhbOibOjbOkbLdbOlbOmbOnbOobOpbOqbOrbOrbOsbOtbOubOvbOwbJVbJVbOxbJVbOybJVbOzbJVbOAbOBbOBbOCbODbOEbOFbOGbOHbOIbOJbOKbOLbNabOMbONaaaaaaaaabEXbOObOPbOQbORbOSbOTbOUbEXaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbFnbBRbBRbngbngbBRbBRbBRbBRbBRbngbngbBRbBRbBRbngbOVbOVbOVbOWbOVbNzbOXbOYbOZbPabNzbDXbvvbPbbPcbPcbCpbCpbCpbCpbCpbPdbKzbISbIRbPebNKbPgbPhbMabMabvjbvjbvjbHybHzbHybHybHybHybHybHybHybPibvvbPjbPkbPlbPmbPnbPlbPlbPobPpbPqbPrbPsbPtbPubPvbPwbMqbPxbPybPzbPAbPBbPCbPDbPEbPFbPGbPHbPIbPJbPKbPLbMHbPMbLhbLhbPNbPObPNbPPbPQbPPbPPbPPbPRbPSbPTbPTbPUbPVbPWbPXbOFbPYbPZbQabQbbQcbQdbNabOMbONaaaaaaaaabEXbQebQfbEXbKjbEXbEXbKjbEXaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQgaabaaaaaaaaaaaabOVbQhbQibQjbQkbNzbQlbQmbQnbQobNzbDXbvvbQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJbQKbQLbQMbQNbubbQObvvbQPbQQbQRbvvbQSbPlbQTbQUbQVbQWbQXbJkbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibLbbRjbOibRkbRlbRmbRnbRobRpbLgbRqbMHbMHbMHbRrbLhbPNbRsbRtbRubRvbRwbRxbRybPPbRzbRAbRBbPTbPTbRCbPWbRDbREbRFbRGbRHbRIbRJbRKbNabRLbwoaaaaaaaaabEXbEXbEXbEXaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOVbRMbRNbRObRPbNybRQbRRbRSbRTbNzbDXbRUbRVbvvbvvbFXbRWbubbQNbQMbRXbRYbRXbRZbSabSabSbbScbSdbSabSabSebSabSfbSabQMbQNbubbSgbShbSibSjbSkbSlbvvbPlbSmbQUbSnbSobSpbJkbSqbSrbSsbStbSubSvbSwbSxbJkbSybSzbLbbSAbSBbSBbSCbSDbSEbSFbSGbLgbSHbSIbMHbSJbSKbLhbPNbSLbSMbSNbSObSPbSQbSRbPPbSSbRAbSTbSTbPTbSUbSVbSWbSXbSYbSZbTabTbbTcbTdbNabOMbwobTeaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQaaaaaaaaaaaaaaaaaaaaaaaabTfbTgbThbTgbTiaaaaaaaaabOVbOVbTjbTkbRObTlbNybTmbQnbTnbTobNzbDXbTpbTqbTrbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTCbTDbTEbTEbTEbTEbTEbTEbTFbTGbTHbTIbTJbTKbTsbTLbTMbTNbTObTPbPlbTQbQUbQVbTRbSpbJkbSqbSrbTSbTTbTUbTVbTWbTXbJsbTYbTZbLbbLbbUabUabLbbSDbLdbUbbUcbLgbUdbUebUfbUgbUhbLhbPNbUibUjbUkbUlbUmbUnbUobPPbUpbRAbSTbSTbPTbUqbUrbUsbUtbUubUvbUwbUxbUybUzbNabOMbUAbUBbUAbUCbUDbUCbUCbUCaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUEbUFbUGbUHbUEbUIbUIbUIbOVbUJbUKbULbUMbUNbUObUPbUQbUQbURbNzbUSbUTbUUbUVbUVbUWbUXbUYbUVbUZbUZbVabVbbVcbUZbUZbVdbQMbQMbVebVfbVfbVfbVgbVhbVfbVfbVibVjbVkbVkbVlbVkbVmbVnbVkbVobVpbVqbPlbVrbVsbSqbVtbVubVvbVwbVxbVybVubJkbSybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbVObLhbPNbPNbVPbVQbVRbVSbVRbVTbPPbVUbVVbVWbVWbPTbVXbVYbVZbNabNabNabNabNabNabNabNabOMbUAbWabWbbWcbWdbWdbWebUCaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabThbWjbWkbWjbThbUIbWlbWmbWnbWobWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZbWDbWEbWFbWGbWHbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRbWSbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAbXBbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXVbXWbUCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUEbYbbWjbWjbYcbYdbTkbYebYfbYgbTkbWqbYhbYibNzbNzbNzbNzbNzbNzbYjbUTbYkbYlbYmbYnbYnbYnbYobUZbYpbYqbYqbYqbYrbYsbYtbYubYvbYwbYxbYybYzbYAbYBbYCbVfbVibYDbVkbYEbYFbYGbYHbYIbVkbSmbQVbSnbSobYJbYKbYLbYMbYNbYObYPbYQbYRbVubYSbYTbYUbYVbYWbYXbYYbYZbZabZbbLgbLgbLgbLgbLgbZcbZdbZebLhbZfbXEbXEbZgbZhbXEbZibZjbZkbZlbRAbZmbZmbPTbPVbZnbPXbEXbUAbZobUAbUAbUAbUAbUAbUAbUAbZpbZqbUCbZrbZsbZtbUCaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbZubXXbXXbZvbWhbWhbXZbXZbZwbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabThbWjbWkbWjbThbUIbWlbWmbWnbWobWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZbWDbWEbWFbWGbWHbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRbWSbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAbXBbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXWbXVbUCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUEbYbbWjbWjbYcbYdbTkbYebYfbYgbTkbWqbYhbYibNzbNzbNzbNzbNzbNzbYjbUTbYkbYlbYmbYnbYnbYnbYobUZbYpbYqbYqbYqbYrbYsbYtbYubYvbYwbYxbYybYzbYAbYBbYCbVfbVibYDbVkbYEbYFbYGbYHbYIbVkbSmbQVbSnbSobYJbYKbYLbYMbYNbYObYPbYQbYRbVubYSbYTbYUbYVbYWbYXbYYbYZbZabZbbLgbLgbLgbLgbLgbZcbZdbZebLhbZfbXEbXEbZgbZhbXEbZibZjbZkbZlbRAbZmbZmbPTbPVbZnbPXbEXbUAbZobUAbUAbUAbUAbUAbUAbUAbZpbZqbUCbZrbZtbZsbUCaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbZubXXbXXbZvbWhbWhbXZbXZbZwbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabThbWkbWkbWkbThbUIbZxbZybZzbZAbTkbZBbZCbZDbZEbZFbZFbZFbZGbUTbUTbUTbWxbUVbZHbYnbZIbYnbZJbUZbYpbYqbZKbYqbZLbUZbZMbZNbZObVfbZPbZQbZRbZSbZTbZUbZVbZWbZXbZYbZZcaacabcaccadbVkbTQbQVbQVcaebYJbYKcafcagcahbXjcaicajcakcalcamcancaocapcaqcarcascasbXscatbVAcaucavcawcaxcaycazcaAbZjbZfcaBbXEbXEbXEcaCcaDbZjbZkcaEbRAbZmbZmbPTcaFcaGbPXbEXcaHcaIcaJbUAcaKcaLcaMcaNcaOcaPcaQbUCcaRcaScaTbUCbUAbUAbUAbUAbUAbUAbUAbUAaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaacaUbWhbZubWhbWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaabUEcaVcaWcaXbUEbUIbUIbUIbOVcaYcaZcaZcaZbOVbOVbUTcbacbacbbcbcbUTcbdcbebUVbZHbYnbYnbYncbfbUZbYpbYqbYqcbgcbhcbicbjcbkcblbVfbVfbVfbVfbVfcbmbVfbVfcbncbobVkbVkcbpbVkbVnbVkbVkbPlcbqcbqbPlbPlcbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcaocapcbCcbDcbEcbFcbGcbHbVAcbIcbJcbKcbLcbMcbNcbOcbPcbQcbPcbRcbRcbRcbPcbScbPcbPcbTcbUbZmbZmbPTcbVbZnbPXcbWcbXcbYcbZccaccbccccccccdcceccfccgcchcciccjcckcclccmccnccoccpccqccrccscctaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabWgbWhccuccvccvbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwbTgccxbTgccycczaabaaabOVbOVbUIbUIbUIbOVaaabUTccAccBccCccDbZFccEccFbUVccGccHccIbYnccJccKccLccMccNccOccPbUZccQccRccSccTccUccUccUccUccVccWccXccYccYccZccZcdacdbcdcbVibPlcddcdecdfcdgcdhbYKcdicbtcdjcdkcdlcdmbSwcdncdocdpcdqcdrcdrcdscdrcdrcdrcdtbVAcducdvcdwcdxcdycdzcdAcbPcdBcdCcdDcdEcdFcdCcdGcdHcdCcdIcdJbRBbPTbPTcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYcdZceacebceaceccebcebcebcedceecefcegcehaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabcejbUTbUTbUTcekbUTbUTcelbUVcemcenceocepceqcercescetceucevcewccKcexceycezceAceBceBceBceBceCceDceEceFceGceFceHceIceJceKceLceMceNceOcePceQceRceSceTceUceVceWceXceYceZcfacfbcfccfdcfdcfdcfecffcfgcfhcficfjcfjcfkcfjcflcfmcfncfocbPcfpcfqcfrcfscfrcftcfucfvcdCbPTcfwbPTbPTcfxcfybZnbBxbEXbUAcfzbUAbUAcfAcfBcfCcfDcfEcebcfFcfGcfHcdUcfHcdUcfIcdUcdUbUAcfJcfKcfLcfMaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabWhbXZbXZbXZbXZbXZbXZcfNbXZcfObXZbXZbXZbXZbXZbWhbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcfPcfQcfRbUTcfSbUVcfTcfUcfVbZHcfWcfXcfYbYpcfZcgacgbcfXcgccgdcgecgfcgfcggcghcgicgjcgkcglcgmbGycgnbVicgobGybGycgpcgqcgrcgscgtceQcgucgvcgwcgxcgycgzcgAcgBcgCcgzcgzcgDcgEcgEcgEcgEcgEcgGcgFcgHcgJcgJcgKcgLcgMcgNcgOcgPcbPcgQcgRcgScgTcgScgUcgVcfrcgWcgXcgYbBxcgZbBxcfybZnbBxbEXchachbchcbUAbUAbUAbUAbUAchdcdUchechfcfIcdUchgcdUbZpcdUchhbUAchichjchkbUAaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabWhchlchlchlchlchlchlchmbXZchnchlcfObXZbXZbXZbXZbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejchochpchqbUTcfSchrchrchrchrchrchrbUZbUZbUZbUZbUZbUZbUZchschtchuchvchwchxchychychzchAcglbGybGychBchCchDbGybGybGychEchFchGceOchHchIchJcgEchKchLchMbSqchLchNcfdcfdcfdcfdcfdcfdcfdcfdcfdcgIbSqchOchPchQchRchSchTchUchVcbPchWchXcfrchYcfrchZciacibciccidciecifbBxcigcfybZncihbEXbFeciicijcikbwobxXbxXbUAcilcimcinciocipciqcirciscitciucivbUAciwcixciycizaacaacaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaciAbXXbXXbXXbXXbXXbXXbXXciBciCbXZbXZbXZbXZciDbYabWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcfPcfQcfRbUTcfSbUVcfTcfUcfVbZHcfWcfXcfYbYpcfZcgacgbcfXcgccgdcgecgfcgfcggcghcgicgjcgkcglcgmbGycgnbVicgobGybGycgpcgqcgrcgscgtceQcgucgvcgwcgxcgycgzbMVcgBcgCcgzcgzcgDcgEcgEcgEcgEcgEcgGcgFcgHcgJcgJcgKcgLcgMcgNcgOcgPcbPcgQcgRcgScgTcgScgUcgVcfrcgWcgXcgYbBxcgZbBxcfybZnbBxbEXchachbchcbUAbUAbUAbUAbUAchdcdUchechfcfIcdUchgcdUbZpcdUchhbUAchichjchkbUAaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabWhchlchlchlchlchlchlchmbXZchnchlcfObXZbXZbXZbXZbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejchochpchqbUTcfSchrchrchrchrchrchrbUZbUZbUZbUZbUZbUZbUZchschtchuchvchwchxchychychzchAcglbGybGychBchCchDbGybGybGychEchFchGceOchHchIchJcgEchKchLchMbSqchLchNcfdcfdcfdcfdcfdcfdcfdcfdcfdcgIbSqchOchPchQchRchSchTchUchVcbPchWchXcfrchYcfrchZciacibciccidciecifbBxcigcfybZncihbEXbFeciicijcikbwobxXbxXbUAcilcimcinciocipciqcirciscitciucivbUAciwciycixcizaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaciAbXXbXXbXXbXXbXXbXXbXXciBciCbXZbXZbXZbXZciDbYabWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejbUTcfScejaaaaaaaaaaaaciEbaTciGciHciIciJciKciLciMciNciOciPciQciRciSciSciTciUciVciWciWciWciWciXciWbGybGybPlciYciZcjacjbcjccjdchScjecjfcjgcjhcjicjjcjkcfdcfdcjlcjpcjpcjpcjpckNclSckUcjqcjqcjrcjscjtcbAcjucjvcbPcjwcjxcjycjzcjAcfrcjBcbPcbPbEXcjCbEXbEXbEXcjDcjEcjFbEXbxXciicjGcjHbwobwobwobUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabWhccvccvccvccvccvccvcjIbXZccuccvcjJbXZbXZbXZbXZbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAjaaaaabaabcjKcjKcjKcjKcjKcjKcjLcjKbUTcelcjMaaacjNcjOcjPcjQcjRcjScjTcjUcjVcjWcjXcjYcjZckackbckcckdckeckfckgckhciVckickjckjckjckkciWbGybGycklcklcklcklckmcklckncknckocklcklckpcklckqckrckscktcksclZaPKcmacmmcmlcmocmnckzckAckBckCckDckEckFcdccbPcbPckGcbPckHcbPckIckJckKcgnckLckMckvckOckPckQckRckSckPbxXciickTbxXbxXckVckWckXchabxXbxXbxXbxXbxXbxXbxXckYckZbONaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWhbXZbXZbXZbXZbXZbXZcfNbXZcjJbXZbXZbXZbXZbXZbWhbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaclaclbclbclbclccldcleclfclgclhclicjLcljcelcjMaaaclkcllclmclnclocjSclpclqclrclsciLcltcgdcbkciPcluchyclvchyclwclxclyclzclAclAclAclBciWbGybGycklclCclDclEclFclGclHclHclIclJclKclLclMclNclOclPcfhcfhcmpcmrcmqctbcsZcuoctcckDclVclWclXckzclYcmtcmscmbcmbcmccmdcmecmfcmgcmhcmfcmfcmfcmicmfcmfcmjcmucnpcnlcqRcoXcrGcqScrHcrHcrIcrHcrHcrHcrHcrJcrKcrHcrHcrHcrMcmvbxXbONaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8398,10 +8395,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacnHcpccpdcpecpfcmBcpgcphcpicmBcpjcpkcplcpmcjMaaacpncjOcpocjQcppcjScjScpqcprcpscptcpucpvcpwcpxcgfcpycpzcpAcpBcpCciVcpDclAclAclAcpEciWbGybGycpFcpFcpGcpHcpIcpIcpIcpFcpJcpJcpJcpKcpLcpGcpMcnicfdcnjcEjbjVcEYdbndbmcxNclRckDcoucpNcovckDbGycuscoAcoAaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpRcpScpTcpUcpVcpWcpXcpXcpYcpXcpXcpXcpXcpXcpZcqacqbcqccqdbwocvvbXSbwobwoaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWhcqhcqicqjbWhbWhbXZbXZcqkbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnHcqlcnJcqmcnJcqncqocqpcqqcnNcqrcjKcqscelcejaaaaaaaaaaaaciEcqtcqucqvcqvciLcqwciLcqxcgdcbkcqycqzcqAcqBcqCcqCcqCcqDcqEclAcqFclAcqGciWbGybGycpFcqHcqIcqJcqKcqLcqMcpFcqLcqMcqKcqNcqOcqPcpMcoscqQcotcEjdbpdbodbrdbqdbsctcckDcpOcpPcpQckDbGycuscoAcvyaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpRcqUcqVcqWcqXcqYcqZcracrbcpXcpXcrccpXcpXcpZcqbcqbcqbcrdbwocvzbxXbwoaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWfcrhcribZvbWgbWhbWhbXZbYabXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbabLcrjcrjcrjcrjcrjcrjcrjcrjcrkcrkcrkcrkcrkcjKcjKcjKcjKcjKcjKcjKcekcrlcrmcrmcrmcrmcrmciEciLciLciLciLciLciLciLcrncgdcbkcrocrpcrqcrrcrscrtcrucrvcrwcrxcrycrzcrAciWbGybGycpFcrBcrCcqJcqKcqKcrDcpFcrEcqKcqKcqNcqJcrFcpMbGwbGwbGwcEjdbudbtdbvdbmdbxctcdbydbydbycoAcoAbGycuscoDcwpaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaacpRcrLcwqcrNcrOcrPcrQcrRcrScpXcpXcpXcpXcrTcrUcrVcrWcrXcrYbwocvzbxXbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsccsdcsecsfcsgcsgcshcsicsjcskcslcsmcsncsocspcspcspcsqcsrcsscstcstcsucsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcsEcsFcsGcgfcsHcmQcsIcsJcsKcsLcsMcsNcsObGybGycpFcsPcsQcsRcsScsTcsUcpFcsVcsTcsWcsXcsRcsYcwraaaaaaaaacEjdbAdbzdbAdbAdbCdbBdbEdbDdbycwFbVibGycuscoDcwpaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaactdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsccsdctuctvctwctvctxctyctzctActBctCctBctDctEctEctFctEcgdctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNctOctPctQctRctSctTctUctVctWctXctYctZcuacnqcubcuccudcuecufcugcuhcuicpFcujcqKcugcukcqJculcwraaaaaaaaadbFcmkdbGdbJdbIdbCdbKdbMdbLdbOdbNceFceJdbPcoDcwpaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaackPcurcyFcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsccuBctvcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQcuRceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKcvocpFcvpcqKcqKcqNcqJcyGcwraaaaaaaaadbFdbRdbQdbTdbSdbVdbUdbXdbWdbybGychCcyHcuscoAaaaaaaaaaaaaaaaaabckPckPckPckPckPckPckPckPckPcvucxScvwckPcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbabLcrjcrjcrjcrjcrjcrjcvFcvGcvGcvHctBcvIcrjcrmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvYcvWcvZcwacwbcwccwdcsObGycvrcwecwfcwgcwhcwicwjcwkcpFcwlcwjcwmcqNcwncwocpMaaaaaaaaadbFdbZdbYdcadbIdccdcbdbUczRdbycyObVibVicuscoAaaaaaaaaaaaaaaaaaackPcwtcwucwvcwwcwxcwycwzcwAcwBcxScwDckPcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSecsdcsecsfcsgcsgcshcsicsjcskcslcsmcsncsocspcspcspcsqcsrcsscstcstcsucsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcsEcsFcsGcgfcsHcmQcsIcsJcsKcsLcsMcsNcsObGybGycpFcsPcsQcsRcsScsTcsUcpFcsVcsTcsWcsXcsRcsYcwraaaaaaaaacEjdbAdbzdbAdbAdbCdbBdbEdbDdbycwFbVibGycuscoDcwpaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaactdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSecsdctuctvctwctvctxctyctzctActBctCctBctDctEctEctFctEcgdctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNctOctPctQctRctSctTctUctVctWctXctYctZcuacnqcubcuccudcuecufcugcuhcuicpFcujcqKcugcukcqJculcwraaaaaaaaadbFcmkdbGdbJdbIdbCdbKdbMdbLdbOdbNceFceJdbPcoDcwpaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaackPcurcyFcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSecuBctvcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQcuRceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKcvocpFcvpcqKcqKcqNcqJcyGcwraaaaaaaaadbFdbRdbQdbTdbSdbVdbUdbXdbWdbybGychCcyHcuscoAaaaaaaaaaaaaaaaaabckPckPckPckPckPckPckPckPckPcvucxScvwckPcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbabLcrjcrjcrjcrjcrjcrjcvFcvGcvGcvHctBcvIcrjcrmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvWcvWcvZcwacwbcwccwdcsObGycvrcwecwfcwgcwhcwicwjcwkcpFcwlcwjcwmcqNcwncwocpMaaaaaaaaadbFdbZdbYdcadbIdccdcbdbUczRdbycyObVibVicuscoAaaaaaaaaaaaaaaaaaackPcwtcwucwvcwwcwxcwycwzcwAcwBcxScwDckPcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGacGafxafxacGafxafxafxagiafxafxaabagiaqZaaaaabaabcwNcwNcwNcrjcwOcwPcwQcwRcwScwTcwUcwVcwWcwXcwYcwZcxacxbcxccxdcxecxfcxgcvKcxfcxhcxicxjcxjcxkcvKcxlcxmcxncxocbkcxpcxqcxrcxscxtcxucxtcxvcxwcxxcxycxzcxAcsOcsOcvrcwecpMcpMcxBcpMcpMcxCcxDcxEcxEcxEcxFcxEcyUcpMaaaaaaaaadbFdbFdbFdbFdbFdbydcedcgdcfdbybGybGyczhcuscoAaaaaaaaaaaaaaaaaaackPcxOcxPcxOcxQcxRcqUcxScwAcxTczicxTckPcxOcxOcMpckPaabaaacwGcxWcxXcwJcwJcxYcwGczjbxXcvzbzNczMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaaaaaabaabaaaaabaabaaaaaaaabaabaabaaaaqZaaaaaaaaaaabaabcwNcrjcrjcrjcrjcrjcrjcrjcrjcybcwWcwXcyccydcyecyfcyfcyfcyfcygcyhcyicxjcyjcxjcxjcykcxjcylcymcyncyocxocbkcypcyqcyrcxscyscytcyucxscyvcywcyxcyycyzcyAcyBcyCcyDcyEcyEcAaczUcAdcAccAeczTcALceJcAhbGycAMcoAcoAcoAcoAcoAaaaaaaaaaaaadcidchdckdcjdbydclbVibVicuscoAcoAcoAcoAcoAaaaaaackPcxOcxOcxOcyZczaczbczcczdczecAiczgckPcAVcAYcAWckPaaaaaacwGczkcwJczlcwJczmcwGbxXbxXcvzczMbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaacGaaaczoczpczqaaaczoczpczqaaaczoczpczqaabczraabaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaczscwWcwXcztcxjcykczucxjcxjcxjczvcxjcztcztcxjcxjcxjcxjczwczxcymczyctEczzcbkcyqcyqczAcxsczBczCczDcxsczEctWczFczGczHczIczJczKbGyczLcdcczLbGycBacAZcBccBccBccBccBPcBNcBNcBNcBNcBNcBQcoAaaaaaaaaaaaadcidchdckdcmdcnbGyckObVicusbGybGybGycgmcoAaaaaaackPcwAcwAcwAcwAczWcqUczXczYczZcCfcAbckPcCGcCYcCIckPaaaaaacwGcAfcAgcDLcwJcDNcwGcEdbxXcvzbwoaabaabaabaabaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8410,14 +8407,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaabaaaczocAkczqaabczocAkczqaaaczocAkczqaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaaaaabaabaaaaaacybcCicvKcCjcCkcCkcClcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcCmcCncCmcCocCmcrmcCpcCqcFbcCtcCtcCtcCucCvcBCcCwcCxcCycCzcCAcCBcBIcCCcCDcCEcCFcHzcCHcHAcCJaabcCKcCKcCKcCKcCKcHBcoAcHDcHCcIGcHHcIHctackycjocjnckuckycCScGucupcHwcCScoAcusbGycoAaaaaaackPcxOcxOcxOcAQcCTczbcCUcCVcCWcCXcCZcCZcDacqUcDbckPaabaabaaaaaaaaacIKaaaaaaaaabwobxXcvzcyJbxXbxXbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaacGacGafxaabaaaczocAkczqaabczocAkczqaaaczocAkczqaabaaaaaaaaaaaaaaaaaaaaaaaaaabcDccDdcDdcDdcDdcybcDecwWcDfcDgcDhcDhcDicDjcDkcDlcDlcDlcDlcDmcDncDocDncDncDpcDpcDncDqcDrcDscDtcDtcDucDvcDwcDxcDycDzcDzcDAcDBcDCcDDcDEcDFcCAcDGcBIcDHcDIcDJcDKcILcDMcIMcDOcDPcDQcDRcDScDTcCKcHBcoDcEhclUcvscvqcIOcINcxLckxckwdcrclUcuqczVcuqczVcuqcoAcusbGycoAcoAaaackPcwAcwAcwAcwAcEkcqUcCbcElcEmcCecqUcEncEocEocEpcEqcXYaabaaaaaaaaaaaaaaaaaaaaabwobxXcGybxXbxXcIPbwoaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaacGaaaaabaaaaabaabcEraabaabaabcEraabaaaaabcEraabaaaaaaaaaaaaaaaaaaaaaaaacDccDccDccEscEtcEucEvcEwcExcEycDfcDfcEzcEAcvKcvKcEBcECcECcECcECcEDcEEcEFcEEcEEcEEcDtcDtcEGcEHcEIcEJcEKcDzcELcDwcDzcDzcDzcDzcEMcBCcENcEOcCycDFcCAcDFcBIcDHcDIcEPcEQcERcEScETcEUaabcEVcEWcDTcEXcCKcHBcoDcHDcHCcxKcxJczVcxMclUcIIclQdcsclUcIQcIRczVcuqcyWclUcusbGycITcoAaaackPcwtcwucwvcFjcARczbcFkcJJcJIcJKcJKcFocFpcFqcJLckPaabaabaabaaaaaaaaaaaaaaaaaabwocJMcvzbwobwobwobwobwoaabaabaabcJNcJNcJNcJNcJNcJNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaafxaabcFscFtcFtcFucFvcFwcFwcFwcFvcFwcFwcFwcFvcFwcFwcFxcFtcFtcFtcFtcFtcFycFzcFAcFBcFCcFDcFEcFFcFGcfRcwWcFHcDfcvKcvKcvKcFIcEBcECcFJcFKcFLcFMcFNcFOcFPcFQcFRcFScFTcFUcFVcFWcFXcFScFYcFZcDwcGacDzcDzcDzcGbcBCcGccGccDFcGdcGecGfcGgcGhcGicGjcGkcGlcGmcGncDOcGocDQcGpcDTcDTcCKcHBcoDcEhclUcyMcyLcyNcFfclUcnkclTcFfclUcyQcyScyRcyTcyTclUcusbGycJOcoAaaackPcxOcxPcxOcGAcxRcqUcGBcJPcGCcqUcqUcGDcwAcwAcwAckPaaaaaaaabaabaaaaaaaaaaaaaaabwocyKcvzbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaafxaabcFscFtcFtcFucFvcFwcFwcFwcFvcFwcFwcFwcFvcFwcFwcFxcFtcFtcFtcFtcFtcFycFzcFAcFBcFCcFDcFEcFFcFGcfRcwWcFHcDfcvKcvKcvKcFIcEBcECcFJcFKcFLcFMcFNciFcFPcFOcFQcFScFTcFUcFVcFWcFXcFScFYcFZcDwcGacDzcDzcDzcGbcBCcGccGccDFcGdcGecGfcGgcGhcGicGjcGkcGlcGmcGncDOcGocDQcGpcDTcDTcCKcHBcoDcEhclUcyMcyLcyNcFfclUcnkclTcFfclUcyQcyScyRcyTcyTclUcusbGycJOcoAaaackPcxOcxPcxOcGAcxRcqUcGBcJPcGCcqUcqUcGDcwAcwAcwAckPaaaaaaaabaabaaaaaaaaaaaaaaabwocyKcvzbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaacGaaaaabaaaaabaabcGFaabaaaaabcGFaabaaaaabcGFaabaaaaaaaaaaaaaaaaaaaaaaaacDccDccDccGGcGHcGIcDdcGJcfRcGKcExcExcExcExcGLcExcFGcECcGMcGNcGOcGPcGQcGRcGScGTcGUcGVcGWcGXcGYcGZcHacHbcFYcELcDwcHccHdcDzcDzcHecBCcHfcHgcDFcHhcCAcHicHjcHkcHlcHmcHncHocHpcHocHqaabcCKcCKcCKcCKcCKcHBcoAcEhclUcIJcyVcyYcyXczNcJQczPczOcJhczQcyLczVczVczSclUcusbGycJRcoAaaackPcxOcxOcxOcFjcHEcHFcHGcJScHIcCZcCZcCZcHJcHKcHLcHMaaaaaaaaaaabaabaaaaaaaaaaaabwobwocvzbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaacGacGafxaabaabczocHOczqaaaczocHOczqaaaczocHOczqaabaaaaaaaaaaaaaaaaaaaaaaabaabcDccDdcDdcDdcDdcHPcHQcHRcfRcHScfRcfRcEBcHTcfRcECcHUcHVcGOcHWcFNcHXcHYcHZcIacIbcIccIdcIecIfcIgcIbcIhcIicIjcIkcIlcImcIncIocIpcIqcGfcIrcIscItcIucIvcIwcIxcIycIzcIAcIBcICcIDcDPcDQcIEcIFcIFcCKcHBcoAcEhclUclUclUclUclUcAOcANcBRcAPcBTcBScBUcAPcBWcBVclUcuscGqcGrcGrcGrcJTcJTcJTcJTcJTcJUcKTcKbcKUcIUczbcIVczbcIWczbcIXcHMaaaaaaaaaaaaaabaabaaaaaaaaaaaabwocvzbwoaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJaaaaaaaaaacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaczocHOczqaabczocHOczqaaaczocHOczqaaaaaaaaaaabaaaaaaaaaaaaaabaabaabaaaaaaaabaabcJbcJbcJbcJbcJbcJbcJbcJccJbcJbcECcJdcJecGOcHWcFNcJfcFNcJgcLhcDtcJicJjcFWcJkcJlcDtcJmcDzcDwcJncJocJpcIncJqcJrcJscJtcJucJvcJwcJtcJxcJycJzcJAcDFcJBcJCcJDcJEaabcEVcJFcJGcJHcCKcHBcoDcKWcKVcKVcKVcKXclUcBXcyLcCLcBYcyScCMcyTcyTcyScCNclUcuscGvbVibGycKYcKZcoAaaaaaackPcJVcJWcJXcJYcJVcJWcJZcKacJVcJWcLackPaabaabaabaabaabaabaabaabaabaabbwocvzbwobwobwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaafxaabczocHOczqaaaczocHOczqaaaczocHOczqaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabcJbcKjcKjcKkcKlcKmcKmcKncKocKocKpcKqcKrcGOcHWcGOcKscGOcGOcGOcDtcKtcKucKvcKwcKxcKycKzcKAcKBcKCcKCcKCcKDcKEcKFcKGcKHcKIcHhcCAcKJcKKcKLcKMcKNcDFcJBcKOcKPcKQcKRcDQcKScIFcIFcCKcHBcoDcEhbVibVibVibYDclUcCPcCOczVcCQcyScCRcCScyTcDUcCRclUcuscGvbVibGycyHbGycoAaaaaaackPcLicLjcLkcwAcLlcLmcLncwAcLocLpcLqckPaabaabaaaaaaaaaaaaaaaaaaaaaaaabwocvzbxXbxXbwoaabaabaaaaaaaaaaaaaaaaaaaaaaaacJaaaaaaacJaaaaaaacJacJacJacJacJacJacJaaaaaaacJaaaaaaacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaafxaabczocHOczqaaaczocHOczqaabczocHOczqaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacJbcKjcKjcKkcLscLscLscLtcLucLvcECcLwcLxcLycLzcLAcLBcLCcLDcLDcLEcLFcLGcGOcGOcGOcLHcLIcLJcLKcLLcLMcLNcLOcLPcECcLQcLQcLRcHhcCAcLScLTcLUcLVcLWcDFcLXcLYcLZcMacMbcCKcCKcCKcCKcCKcHBcoDcEhcLbbGybGybYDclUcDVczVcDXcDWcDZcDYcEacyTcEccEbclUcuscGvczhbGychCcITcoAaaaaaackPcMpcxOcxOcwAcMpcxOcxOcwAcMpcxOcxOckPaaaaabaabaaaaaaaaaaaaaaaaaaaaabwocLccyJbxXbwobwobwocJNcJNaabaabaabaabaaaaaacJacJacJacJaaaacJacJacJacJacJacJacJacJacJaaaacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaagiaabczocMqczqaaaczocMqczqaaaczocMqczqaabafxaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabcJbcMrcMscLscLscLscMtcMucMucMucMucMucMucMucMvcMwcMxcMycMzcMzcMzcMAcMBcMCcMzcMzcMzcMBcMDcMEcMFcLMcMGcLOcLPcMHcMIcMJcMKcMLcMMcMNcMOcKNcMPcMQcMRcMScMTcMUcIDcMVcDQcMWcMXcMXcCKcHBcoAcEhbVicozcLdbYDclUcEeczVczVcEfcyScYucEgcyTcEgcYuclUcuscGvbVibGybVibVicoAaabaabckPcNncBZcxOcwAcNncBZcxOcwAcNncBZcxOckPaaaaaaaabaabaaaaaaaaaaaaaaaaaabwocvzcyJcLecyJcLfbwoaabaabaabaaaaaaaaaaaaaaacJacJacJacJaaaacJacJacJacJacJacJacJacJacJaaaacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaafxaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaafxaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcJbcNocLscLscLscLscLscMucNpcNqcNrcNscNtcMucNucNvcNwcJecGOcGOcNxcNycNzcNAcNBcNCcNCcNDcECcNEcMFcLMcNFcLOcNGcECcNHcLQcNIcNJcDFcMNcMOcNKcDFcMQcMRcJBcJCcNLcJEcNMcEVcNNcNOcNPcCKcHBcoAcEhbVicLgcLgbYDclUcMcdbkcMecMdcEZclUclUclUclUclUclUcuscGvbVibGybGycMfcoAaaaaaackPcOacxOcxOcwAcOacxOcxOcwAcOacxOcxOckPaaaaaaaaaaabaabaaaaaaaaaaaaaaabwocvzcyJbxXbxXbxXcxHaaaaaaaaaaaaaaaaaaaaaaaacJacJacJacJaaaacJacJacJacJacJacJacJacJacJaaaacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaafxaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaafxaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcJbcNocLscLscLscLscLscMucNpcNqcFRcNrcNtcMucNucNvcNwcJecGOcGOcNxcNycNzcNAcNBcNCcNCcNDcECcNEcMFcLMcNFcLOcNGcECcNHcLQcNIcNJcDFcMNcMOcNKcDFcMQcMRcJBcJCcNLcJEcNMcEVcNNcNOcNPcCKcHBcoAcEhbVicLgcLgbYDclUcMcdbkcMecMdcEZclUclUclUclUclUclUcuscGvbVibGybGycMfcoAaaaaaackPcOacxOcxOcwAcOacxOcxOcwAcOacxOcxOckPaaaaaaaaaaabaabaaaaaaaaaaaaaaabwocvzcyJbxXbxXbxXcxHaaaaaaaaaaaaaaaaaaaaaaaacJacJacJacJaaaacJacJacJacJacJacJacJacJacJaaaacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaacGacGafxacGacGagiafxafxafxafxacGafxafxacGcOcaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJbcOdcLucOecOfcOgcOhcMucOicOjcOkcOlcOmcOncOocOpcOqcOrcGOcOscOtcOucOvcOwcOxcOycOzcOAcOBcNwcJecOCcODcLKcOEcECcOFcLQcOGcOHcDFcMNcMOcKNcDFcOIcMRcJBcOJcOKcKQcOLcDQcOMcMXcMXcCKcHBcoDcEhcMgchCbJGbYDclUclUclUcMhclUdblcFacFcbVicMjcMibGycuscGvbVibGycMkcITcoAaaaaaackPckPckPckPckPckPckPckPckPckPckPckPckPaaaaaaaaaaaaaabaabaaaaaabwobwobwocvzcyJcMmcMlbxXcxHaaaaaaaaaaaaaaaaaaaaaaaacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcJbcJbcJbcOWcOXcOXcOXcMucOYcOZcPacPacPbcPccMzcPdcPecPfcPgcPhcPhcPicPjcPkcPlcPmcPncPicPocPpcPqcPrcPscPtcPucPvcNHcLQcPwcPxcDFcMNcDFcPycDFcMQcMRcJBcJCcPzcJEcNMcCKcCKcCKcCKcCKcHBcoDcMncKXchCcITcMYcMocMocMocMZbVicFgcFecFhbVicNacKVcKVcNbcHrczhbGybGycoAcoAaaaaaacONaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaabaaabwocyKcNccNdcyJcNfcNebxXcxHaaaaaaaaaaaaaaaaaaaahaaacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabcPEcPFcPGcOXaabaabcMucPHcPIcPacPacPJcMucPKcPLcPMcPNcPOcPPcPQcECcPRcPScPTcGOcPUcECcPVcPWcPXcPNcPNcPYcPZcECcQacLQcQbcQccDFcMNcDFcLScLTcQdcQecMScQfcQgcIDcQhcDQcQicQjcQjcCKcHBcoDcNhcNgbVibVicEhbVibVibGycNibVibVicGwbVibVicNkcNjcNmcNlcNQcoAcoAcoAcoAaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaabaabbwocNRcunbOMcyJcyJcyJbxXbwoaabaaaaaaaaaaaaaaaaaaaaacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8450,7 +8447,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaabcUNcUYcUZcVacVacVbcVccVdcUQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQaaacIYcIYcIYcIYcIYaabcGEaabcIYcIYcIYcIYcIYaabagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaabcUNcVecVfcVacVacVgcVhcVicUQaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQaabcKccKdcKdcKdcKdcQQcQRcQQcKhcKhcKhcKhcObaabagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabcUNcUNcVjcVacVacUQcVkcUQcUQaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQaabcLrcLrcLrcLrcLraaacGEaaacLrcLrcLrcLrcLraaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabapqapqaaaaabaaacUPcVlcVacVacVmcVncUPaabaabaabapqapqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQaaaaaaaabaabaabaaaaaacGEaabaaaaaaaabaabaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaaaaabaaacUPcVlcVacVacVmcVncUPaabaabaabaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQaaaaaaaabaabaabaaaaaacGEaabaaaaaaaabaabaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGcVocVoacGacGaaacUPcVpcVqcVrcVscVtcUPaaaacGacGcVocVoacGacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQagQagQagQagQaaaaaaaaacGEaaaaaaaaaagQagQagQaqZagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOcTOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGcVucVvcVwcVxacGacGcUPcVycVzcVAcVacVBcUPacGacGcVCcVDcVEcVFacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQaabcSBaabagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTOcTOcTOcTOcTOaaacTOcTOcTOcTOcTOaaacTOcTOcTOcTOcTOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVGcVGcVGcVGcVGcVGcVGcVGcVGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGcVucVvcVEcVHcVIcVJcVJcVKcVLcVJcVMcVNcVJcVJcVIcVOcVvcVEcVFacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQaaaaabaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8472,7 +8469,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGcVucWdcVFaaaaabaaacXvcXwcXxcXycXzcXAcXvaaaaaaaaacVucWlcVFacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSKcSKcSKcSKcSKcSKcSKcSKcSKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGcVucWdcXBcVIcXCcXCcXvcXDcXEcXFcXGcXHcXvcVIcVIcVIcXdcWlcVFacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSKcSKcSKcSKcSKcSKcSKcSKcSKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGcVGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGcVucXIcVRcVRcVRcVRcXJcXKcXLcXMcXNcXOcXPcXQcWacWacWacXRcVFacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSKcSKcSKcSKcSKcSKcSKcSKcSKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVGcVGcVGcVGcVGaaacVGcVGcVGcVGcVGaaacVGcVGcVGcVGcVGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaacWfcWfcWfcWfcWfcXvcXScXTcXUcXVcXWcXXdcucWfcWfcXZcXZaaaacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSKcSKcSKcSKcSKcSKcSKcSKcSKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVGcVGcVGcVGcVGaaacVGcVGcVGcVGcVGaaacVGcVGcVGcVGcVGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaacWfcWfcWfcWfcWfcXvcXScXTcXUcXVcXWcXXcgAcWfcWfcXZcXZaaaacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSKcSKcSKcSKcSKcSKcSKcSKcSKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVGcVGcVGcVGcVGaaacVGcVGcVGcVGcVGaaacVGcVGcVGcVGcVGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGacGacGacGacGacGcXvcYacYbcYccYdcYecXvacGacGacGacGacGacGacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSKcSKcSKcSKcSKcSKcSKcSKcSKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVGcVGcVGcVGcVGaaaaaaaaaaaaaaaaaaaaacVGcVGcVGcVGcVGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabcXvcXvcYfcYfcYfcXvcXvaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSKcSKcSKcSKcSKcSKcSKcSKcSKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSKcSKcSKcSKcSKcSKcSKcSKcSKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWcTWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 68fee54af54..f594cbce969 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -475,8 +475,8 @@ "jg" = (/mob/living/silicon/decoy{icon_state = "ai-malf"; name = "GLaDOS"},/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/syndicate_mothership/control) "jh" = (/obj/structure/window/reinforced{dir = 4},/obj/item/device/radio/intercom/syndicate,/turf/unsimulated/floor{icon_state = "circuit"},/area/syndicate_mothership) "ji" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) -"jj" = (/obj/machinery/computer/shuttle_control/multi/vox,/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) -"jk" = (/obj/structure/table,/obj/machinery/door_control{id = "voxshutters"; name = "remote shutter control"; req_access_txt = "152"},/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) +"jj" = (/obj/structure/table,/obj/machinery/door_control{id = "voxshutters"; name = "remote shutter control"; req_access_txt = "152"},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) +"jk" = (/obj/machinery/computer/shuttle_control/multi/vox,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "jl" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/energy/sword/saber/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source) "jm" = (/obj/machinery/door/poddoor{id_tag = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source) "jn" = (/obj/machinery/door/poddoor{id_tag = "thunderdome"; name = "Thunderdome Blast Door"},/turf/unsimulated/floor{name = "plating"},/area/tdome/arena_source) @@ -661,7 +661,7 @@ "mK" = (/turf/space/transit/north/shuttlespace_ns4,/area/vox_station/transit) "mL" = (/turf/space/transit/north/shuttlespace_ns8,/area/vox_station/transit) "mM" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/shuttle/vox/station) -"mN" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station) +"mN" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/shuttle/vox/station) "mO" = (/obj/structure/rack,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/suit/space/vox/medic,/obj/item/clothing/head/helmet/space/vox/medic,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "mP" = (/obj/structure/rack,/obj/item/weapon/gun/launcher/pneumatic,/obj/item/weapon/harpoon,/obj/item/weapon/harpoon,/obj/item/weapon/harpoon,/obj/item/weapon/harpoon,/obj/item/weapon/tank/nitrogen,/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "mQ" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/vox/station) @@ -1819,6 +1819,7 @@ "IY" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1331; id_tag = "synd_pump"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "IZ" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1331; id_tag = "synd_pump"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "Ja" = (/obj/structure/closet/crate/medical,/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/weapon/storage/box/beakers,/obj/item/robot_parts/l_arm,/obj/item/robot_parts/r_arm,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) +"Jb" = (/mob/living/simple_animal/pet/cat/Syndi,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) (1,1,1) = {" aaabacadaeafagahaaaiajakalamanaoagafajacadahakaeamaiaoapaqarasatauavawaxayazaAaBaCaDaEaFaGaHaIaJaKawaxayazaAaBaCaDaEaFaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaOaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaQaPaPaPaPaPaR @@ -1855,7 +1856,7 @@ aabgaXbeaSbaaYcOcEdFdccFdncOcEdFdccFdncQbeaVbfaSbbaTaoaLadaYaWbgaXbcbaaTbebfaUbb ajaSaTaUaVaWaXaYaZbabbbcbdbebfbgaXaWbbaTaUaYbcaVbebaabaLalaXbfaSaTaZaWbaaUbcbdbeaVbgbbaYaWaZbdbfaSbabeaTbgbcagaLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihiiijikiliminihioipiqihaNaNirisisisisisitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNiuiviwaNiuiviwaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaN amaVbabdaYbfaTaXbbaWbeaZbgaUbcaSaTbfbebabdaXaZaYaUaWaeaLaoaTbcaVbabbbfaWbdaZbgaUaYaSbeaXbfbbbgbcaVaWaUbaaSaZacaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihikikikikikikikixiyizihaNaNisiAiBiCiDiEitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNiFiGiHiHiHiIiFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZiJiJiJiJiJbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZiKiKiKiKiKbZaNaNaNaNaN adaYaWbgaXbcbaaTbebfaUbbaSbdaZaVbabcaUaWbgaTbbaXbdbfahaLabbaaZaYaWbebcbfbgbbaSbdaXaVaUaTbcbeaSaZaYbfbdaWaVbbaiaLaMbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbabaaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihiLiLikikikiMihiNiOiPihaNaNisiQiRiRiRiQititititaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNiuiviSiviTiUiViWiXiUiYiviSiviwaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZiZiZiZiZiZjajbjcjcjcjcjcjcjcjcjcjcjcjcjcjbjaiZiZiZiZiZbZbZbZaNaNaN -alaXbfaSaTaZaWbaaUbcbdbeaVbgbbaYaWaZbdbfaSbabeaTbgbcagaLaeaWbbaXbfaUaZbcaSbeaVbgaTaYbdbaaZaUaVbbaXbcbgbfaYbeafaLaMaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaNaWaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihikikikikjdjdihihjeihihaNaNisiQjfjfjfiQitjgjhitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNiGiHiHiIiFaNiGiUjijjjkiUiIaNiFiGiHiHiIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpjpjpjpjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN +alaXbfaSaTaZaWbaaUbcbdbeaVbgbbaYaWaZbdbfaSbabeaTbgbcagaLaeaWbbaXbfaUaZbcaSbeaVbgaTaYbdbaaZaUaVbbaXbcbgbfaYbeafaLaMaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaNaWaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihikikikikjdjdihihjeihihaNaNisiQjfjfjfiQitjgjhitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNiGiHiHiIiFaNiGiUjijkjjiUiIaNiFiGiHiHiIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpjpjpjpjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN aoaTbcaVbabbbfaWbdaZbgaUaYaSbeaXbfbbbgbcaVaWaUbaaSaZacaLahbfbeaTbcbdbbaZjsjtjujvdVbYdzjwjxjyjzbeaTaZaSbcaXaUanaLaMbfaYbebfbfaYbebfaYbebfaYbebfaYbebfbfaYbebfaYbebfaYbebfaYbebfaYbebfbfaYaNaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihjAjAikjBjCjDihjEjejFihaNaNisiQjGjHjIiQititititititititititititaNaNaNaNaNaNaNaNaNaNiUjJjKiUiFiGjLjMjNjOjNjMjLiIiFiUjPjQiUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpjpjpjpjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN abbaaZaYaWbebcbfbgbbaSbdaXaVaUaTbcbeaSaZaYbfbdaWaVbbaiaLagbcaUbaaZbgbebbjzjRjSjTjUjVjWjXjYjZkaaUbabbaVaZaTbdakaLaMbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfaXaXaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihkbikikjBkckdihkekfkgihaNaNisiQkhjHjIiQkikjkkklkmknkjkokpkqkrksaNaNaNaNaNaNaNaNaNaNiUktkuiUiHkvkwjMjNkxjNjMkwkyiHiUkzkAiUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpkBkCkBjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN aeanamacakalajaaaeadahabaiagaoafajalahamacaaabakagadafaLacaZbdaWbbaSaUbekajXjYkDkEkFjUjTkGkHkIbdaWbeaYbbbabgaaaLaMbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcaTaTaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihkJikikikikihihihihihihaNaNisiQkhjHjIiQkKkjknknkLknkjknkrkrkrksaNaNaNaNaNaNaNaNaNaNiUkMkNiUiHkOkwjMkPjMjNjMkwkQiHiUkRkSiUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpkBkTkBjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN @@ -1880,7 +1881,7 @@ acaZbdaWbbaSaUbeaXbgaTaYbfbaaVbcaUaSaTbdaWbeaYbbbabgaaaLanaUaVaZlZjRkUkGkDjZaVjW aibbbgbfbeaVbdaUaTaSbaaXbcaWaYaZbdaVbabgbfaUaXbeaWaSajaLakbdaYbbmpjXjVkUjZjRbckDkEjWjTjSaVjXkHkFjUkUlnbgaZaXalaLaMaVaUaUbfaVaUbfaVaUbfaVaUbfjsngnxmRmRngngnxjsaUbfaVaUbfaVaUbfaVaUbfaVaUaUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjnynynynynyoWopopopoXopopopoYnynyoZnjpaoOpbpbpcoOpdpepfpgpgpgnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN afbeaSbcaUaYbgbdbaaVaWaTaZbfaXbbbgaYaWaSbcbdaTaUbfaVamaLaabgaXbemIjTkFjVkHjXaZbfaUbbaWbdaYjTjWjRkEjVlFaSbbaTaoaLaMaYbdbdbcaYbdbcaYbdbcaYbdbcjznwnLnfnfnwnwnLjzbdbcaYbdbcaYbdbcaYbdbcaYbdbdaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjnynynynynynynyouphowpiouqoomompjpknjplpbpmpnpboOpoppoSpqprnjnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN analahajaoacaeabanagakafamaaaiadaeacakahajabafaoaaagadaLajaSaTaUcMdndvcPcEdYcFeScQcBdFcNdvdncFcOdccPeSaVbebaabaLaMaXbgbgaZaXbgaZaXbgaZaXbgaZkamrmqnvnvmrmrmqkabgaZaXbgaZaXbgaZaXbgaZaXbgbgaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjnynynynynynynyoupsowptoupupvpvpvoCnjoOpbpwpxpboOpoppnjnjnjnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -bfbdaYbbbgaTaVaSbfaXbcaWbeaZbaaUaVaTbcaYbbaSaWbgaZaXaUaLamaVbabdaYbfaTaXbbaWbeaZbgaUbcaSaTbfbebabdaXaZaYaUaWaeaLaMaTaSaSbbaTaSbbaTaSbbaTaSbbkImLmJmKmKmLmLmJkIaSbbaTaSbbaTaSbbaTaSbbaTaSaSaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjnynyooopopopopoupsowptqdpypzpApzpBpCoOoOoOoOoOoOpoppnjnjnjnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +bfbdaYbbbgaTaVaSbfaXbcaWbeaZbaaUaVaTbcaYbbaSaWbgaZaXaUaLamaVbabdaYbfaTaXbbaWbeaZbgaUbcaSaTbfbebabdaXaZaYaUaWaeaLaMaTaSaSbbaTaSbbaTaSbbaTaSbbkImLmJmKmKmLmLmJkIaSbbaTaSbbaTaSbbaTaSbbaTaSaSaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjnynyooopopopopoupsowptqdpypzpApzpBpCoOJboOoOoOoOpoppnjnjnjnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN bcbgaXbeaSbaaYaVbcaTaZbfaUbbaWbdaYbaaZaXbeaVbfaSbbaTbdaLadaYaWbgaXbcbaaTbebfaUbbaSbdaZaVbabcaUaWbgaTbbaXbdbfahaLaMbaaVaVbebaaVbebaaVbebaaVbekVjsmTmUmUmRmRmSkVaVbebaaVbebaaVbebaaVbebaaVaVaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjnynyoupDowowpEoupsowptoupFqnoBpvoCnjpHpbpbpboOoOpoppnjpIpJpKnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aZaSaTaUaVaWaXaYaZbabbbcbdbebfbgaXaWbbaTaUaYbcaVbebabgaLalaXbfaSaTaZaWbaaUbcbdbeaVbgbbaYaWaZbdbfaSbabeaTbgbcagaLaMaWaYaYaUaWaYaUaWaYaUaWaYaUaWjznilnlnjzjzniaWaYaUaWaYaUaWaYaUaWaYaUaWaYaYaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjnynyoupDowpLpMoupsowptouopqppOpPpQnjpRpSpTpSpSoOpUpVpWpXpXpYnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN bbaVbabdaYbfaTaXbbaWbeaZbgaUbcaSaTbfbebabdaXaZaYaUaWaSaLaoaTbcaVbabbbfaWbdaZbgaUaYaSbeaXbfbbbgbcaVaWaUbaaSaZacaLaMbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfaXaXaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjpZnyouqaowowqbouqcowoFqqqvqvqvouqenjqfqgqhqiqjoOoOoOnjqkqlpYnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index 580da942390..e48d0383962 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -99,9 +99,9 @@ "bU" = (/obj/structure/table,/obj/item/device/radio,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/derelict/ship/start) "bV" = (/obj/structure/spacepoddoor,/turf/space,/area/space) "bW" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) -"bX" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "solarpanel"},/area/space) +"bX" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) "bY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) -"bZ" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "solarpanel"},/area/space) +"bZ" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) "ca" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/space) "cb" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) "cc" = (/obj/machinery/camera{c_tag = "Telecomms North Solars"; dir = 8; network = list("Telecomms")},/turf/space,/area/space) @@ -182,11 +182,11 @@ "dz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "dA" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "dB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/door/airlock/hatch{name = "Telecoms Control Room"; req_access_txt = "61"},/turf/simulated/floor,/area/tcommsat/computer) -"dC" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/tcommsat/computer) -"dD" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/tcommsat/computer) -"dE" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/tcommsat/computer) -"dF" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/tcommsat/computer) -"dG" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; initialize_directions = 10},/obj/machinery/power/apc{dir = 4; name = "Telecoms Sat. Control APC"; pixel_x = 25},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/tcommsat/computer) +"dC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/tcommsat/computer) +"dD" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/tcommsat/computer) +"dE" = (/obj/machinery/power/apc{dir = 4; name = "Telecoms Sat. Control APC"; pixel_x = 25},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/tcommsat/computer) +"dF" = (/obj/machinery/light{dir = 8},/obj/structure/table,/obj/item/device/multitool,/obj/structure/sign/electricshock{pixel_x = -32},/turf/simulated/floor,/area/tcommsat/computer) +"dG" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/tcommsat/chamber) "dH" = (/turf/simulated/wall/r_wall,/area/tcommsat/chamber) "dI" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/tcommsat/computer) "dJ" = (/obj/machinery/vending/cola,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/tcommsat/computer) @@ -202,37 +202,32 @@ "dT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat) "dU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/light,/turf/space,/area/turret_protected/tcomsat) "dV" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat) -"dW" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light{dir = 8},/obj/structure/table,/obj/item/device/multitool,/obj/structure/sign/electricshock{pixel_x = -32},/turf/simulated/floor,/area/tcommsat/computer) -"dX" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{current_temperature = 80; dir = 1; on = 1},/turf/simulated/floor,/area/tcommsat/computer) +"dW" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber) +"dX" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) "dY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/tcommsat/computer) -"dZ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/tcommsat/computer) +"dZ" = (/obj/machinery/power/solar,/obj/structure/cable,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) "ea" = (/obj/machinery/door/window/brigdoor{dir = 8; name = "Telecomms Server Access"; req_access = null; req_access_txt = "61"},/obj/machinery/door/window/brigdoor{dir = 4; name = "Telecomms Server Access"; req_access_txt = "61"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/tcommsat/chamber) "eb" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/tcommsat/chamber) "ec" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/tcommsat/computer) "ed" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge"; req_access_txt = "61"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/tcommsat/computer) "ee" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor/plating/airless,/area/turret_protected/tcomsat) "ef" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) -"eg" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/tcommsat/chamber) +"eg" = (/obj/machinery/telecomms/relay/preset/station,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eh" = (/obj/effect/spawner/window/reinforced,/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) "ei" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/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) -"ej" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber) -"ek" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; initialize_directions = 10},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/tcommsat/chamber) "el" = (/obj/machinery/door/window/brigdoor{dir = 1; name = "Telecomms Server Access"; req_access_txt = "61"},/obj/machinery/door/window/brigdoor{dir = 2; name = "Telecomms Server Access"; req_access_txt = "61"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/tcommsat/chamber) "em" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/tcommsat/chamber) "en" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) "eo" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "ep" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) -"eq" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{icon_state = "solarpanel"},/area/space) "er" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "es" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) "et" = (/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eu" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ev" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ew" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Telecoms Sat. Central Compartment APC"; pixel_x = -1; pixel_y = 26},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"ex" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ey" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ez" = (/obj/machinery/camera{c_tag = "Telecomms Server Room North"; dir = 2; network = list("Telecomms")},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"eA" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eB" = (/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eC" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eD" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/space) @@ -240,7 +235,6 @@ "eF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "eG" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "eH" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) -"eI" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eK" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) "eL" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) @@ -248,7 +242,6 @@ "eN" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/space) "eO" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "eP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) -"eQ" = (/obj/machinery/power/solar,/obj/structure/cable,/turf/simulated/floor{icon_state = "solarpanel"},/area/space) "eR" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "eS" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; level = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) "eT" = (/obj/machinery/telecomms/server/presets/supply,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber) @@ -273,7 +266,6 @@ "fm" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/machinery/status_display{pixel_x = 32; pixel_y = 0},/turf/simulated/floor,/area/turret_protected/tcomsat) "fn" = (/obj/machinery/camera{c_tag = "Telecomms East Solars"; dir = 4; network = list("Telecomms")},/turf/space,/area/space) "fo" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) -"fp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/space) "fq" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/space) "fr" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "fs" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 4},/turf/space,/area/turret_protected/tcomsat) @@ -282,7 +274,6 @@ "fv" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber) "fw" = (/obj/machinery/telecomms/relay/preset/telecomms,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "fx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/telecomms/hub/preset,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"fy" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/telecomms/relay/preset/station,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "fz" = (/obj/machinery/telecomms/processor/preset_four,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber) "fA" = (/obj/machinery/telecomms/bus/preset_four,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber) "fB" = (/obj/structure/sign/nosmoking_2{pixel_x = 32; pixel_y = 0},/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -308,13 +299,9 @@ "fV" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor,/area/turret_protected/tcomsat) "fW" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber) "fX" = (/obj/machinery/telecomms/server/presets/medical,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber) -"fY" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"fZ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ga" = (/obj/machinery/telecomms/server/presets/command,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber) "gb" = (/obj/machinery/telecomms/server/presets/security,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber) -"gc" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "gd" = (/obj/machinery/camera{c_tag = "Telecomms Server Room South"; dir = 1; network = list("Telecomms")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light,/obj/machinery/hologram/holopad,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"ge" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 120; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "gf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/wall/r_wall,/area/tcommsat/chamber) "gg" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "gh" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomsat) @@ -461,7 +448,7 @@ "iS" = (/obj/item/device/radio/beacon,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating/airless,/area/AIsattele) "iT" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating/airless,/area/AIsattele) "iU" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating/airless,/area/AIsattele) -"iV" = (/obj/item/weapon/shard,/obj/item/weapon/module/power_control,/turf/simulated/floor/plating/airless,/area/AIsattele) +"iV" = (/obj/item/weapon/shard,/obj/item/weapon/apc_electronics,/turf/simulated/floor/plating/airless,/area/AIsattele) "iW" = (/obj/structure/closet,/turf/simulated/floor/plating/airless,/area/AIsattele) "iX" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/simulated/floor/plating/airless,/area/AIsattele) "iY" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/obj/item/weapon/circuitboard/teleporter,/turf/simulated/floor/plating/airless,/area/AIsattele) @@ -587,18 +574,18 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcncpcscscscHcIcJcKcLcMcNcqcGcOcPcQcRcScqcTcqcUcGcGcGcGcGcqcncncraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcncpctcsctcVcWcXcKcYcZdacqdbcGdccGcGddcqcTcqdecGdfcGcGcGcqcncncraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcncpctcsctctdgdhdidjdkdldmdndodfcGdpdqcqdrcqdsdtcGdudvdwcqcncncraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcncpctcsctcVdxdydzdAdAdAdBdCdDdEdFdGdHdHdHcqdIdJcGdKdLdMdNdOdOdPdQdRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWcbbWbWbWbWbWbWbWbWbWbWcrcncpctcsctcVdSdTdUdVdVdVcqdWdXdYcGdZeaebdHcqcqecedcqcqcqcqcncncrbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWcbbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTcrcncpcseecsefdScNdHdHdHdHdHegeheiehejekelemdHdHeneoepcseecscpcncrbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaTeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqaaaacrcncpctcsctcVeresdHeteuevewexeyezeveveAeBeveCdHeneodactcsctcpcncoclaaaTeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaeDeEeEeEeEeEeEeEeEeEeEeEeEeEeEeEeFaacrcncpctcsctcVeGeHdHeveBeBeBeIeBeJeBeBeIeBeBevdHeneodaeKeLeMcpcncncraTeNeOeOeOeOeOeOeOeOeOeOeOeOeOeOeOePaTbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQchaacrcncpctcsctcVeReSdHeveTeUeBeIeBeVeBeBeIeWeXevdHeneodaeYeZfafbcpcncraacheQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaTaaaaaaaaaTaaaaaaaaaachfccrcncpctcsctcVfdfedHeveBeBeBeIffeVfgeBeIeBeBevdHfhfifjeYfkflfmcpcncrfnchaaaaaaaaaaaTaaaaaaaaaTaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaTaaaaaaaaaTaaaaaaaaaafofpfqcncpcscscseffrfsdHftfufvfweAevfxevevfyfzfAfBdHfCfDfEfFflfGfHcpcnfIfpePaaaaaaaaaaaTaaaaaaaaaTaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaTaaaaaaaaaTaaaaaaaaaachaacrcncpctcsctcVfrdadHevfJfKeBeIfLeVfMeBeIfNfOevdHcVfdfPfQflfRfScpcncraachaaaaaaaaaaaTaaaaaaaaaTaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqchaacrcncpctcsctcVfddadHeveBeBeBeIeBeVeBeBeIeBeBevdHcVfddafQfTfUfVcpcncraacheqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaeDeEeEeEeEeEeEeEeEeEeEeEeEeEeEeEcgaacrcncpctcsctcVdSdadHevfWfXfYfZeBeJeBeBeIgagbevdHcVfddafQfQfQcpcncncraTcdeOeOeOeOeOeOeOeOeOeOeOeOeOeOeOePaTbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaTeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQaaaacrcncpctcsctcVdSdadHevevevgcevevgdevevgeevevevdHcVfddactcsctcpcncicmaaaTeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcncpctcsctcVdxdydzdAdAdAdBdCdCdDdCdEdHdHdHcqdIdJcGdKdLdMdNdOdOdPdQdRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWcbbWbWbWbWbWbWbWbWbWbWcrcncpctcsctcVdSdTdUdVdVdVcqdFcGdYcGcGeaebdHcqcqecedcqcqcqcqcncncrbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWcbbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTcrcncpcseecsefdScNdHdHdHdHdHdGeheiehdWemelemdHdHeneoepcseecscpcncrbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaTdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXaaaacrcncpctcsctcVeresdHeteueveweyeyezeveveveBeveCdHeneodactcsctcpcncoclaaaTdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaeDeEeEeEeEeEeEeEeEeEeEeEeEeEeEeEeFaacrcncpctcsctcVeGeHdHeveBeBeBeBeBeJeBeBeBeBeBevdHeneodaeKeLeMcpcncncraTeNeOeOeOeOeOeOeOeOeOeOeOeOeOeOeOePaTbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaadZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZchaacrcncpctcsctcVeReSdHeveTeUeBeBeBeVeBeBeBeWeXevdHeneodaeYeZfafbcpcncraachdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaTaaaaaaaaaTaaaaaaaaaachfccrcncpctcsctcVfdfedHeveBeBeBeBffeVfgeBeBeBeBevdHfhfifjeYfkflfmcpcncrfnchaaaaaaaaaaaTaaaaaaaaaTaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaTaaaaaaaaaTaaaaaaaaaafocefqcncpcscscseffrfsdHftfufvfwevevfxevevegfzfAfBdHfCfDfEfFflfGfHcpcnfIceePaaaaaaaaaaaTaaaaaaaaaTaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaTaaaaaaaaaTaaaaaaaaaachaacrcncpctcsctcVfrdadHevfJfKeBeBfLeVfMeBeBfNfOevdHcVfdfPfQflfRfScpcncraachaaaaaaaaaaaTaaaaaaaaaTaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaadXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXchaacrcncpctcsctcVfddadHeveBeBeBeBeBeVeBeBeBeBeBevdHcVfddafQfTfUfVcpcncraachdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaeDeEeEeEeEeEeEeEeEeEeEeEeEeEeEeEcgaacrcncpctcsctcVdSdadHevfWfXeBeBeBeJeBeBeBgagbevdHcVfddafQfQfQcpcncncraTcdeOeOeOeOeOeOeOeOeOeOeOeOeOeOeOePaTbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaTdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZaaaacrcncpctcsctcVdSdadHevevevevevevgdevevevevevevdHcVfddactcsctcpcncicmaaaTdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcrcncpcseecseffdcNdHdHdHdHdHdHdHgfdHdHdHdHdHdHdHeffdcNcseecscpcncrbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWbWcbbWbWbWbWbWbWbWcrcncpctcsctcVggghgidldlgjgkglgmgngogpgqgjdldlgrgsfddactcsctcpcncrbWbWbWbWbWbWcbbWbWbWbWbWbWbWbWbWbWcbbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcncpctcsctcVgtgugugugugvgwgxgygzgAgBgCgDgufEgugugEdactcsgFcpcncraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -726,3 +713,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/cyberiad/z4.dmm b/_maps/map_files/cyberiad/z4.dmm index 047f634de9a..40ecf02b40e 100644 --- a/_maps/map_files/cyberiad/z4.dmm +++ b/_maps/map_files/cyberiad/z4.dmm @@ -39,11 +39,11 @@ "aM" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk10"; icon_state = "catwalk10"},/area/space) "aN" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/space) "aO" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) -"aP" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "solarpanel"},/area/engiestation/solars) +"aP" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/engiestation/solars) "aQ" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) -"aR" = (/obj/machinery/power/tracker,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "solarpanel"},/area/engiestation/solars) +"aR" = (/obj/machinery/power/tracker,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/engiestation/solars) "aS" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) -"aT" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "solarpanel"},/area/engiestation/solars) +"aT" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/engiestation/solars) "aU" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) "aV" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/engiestation/solars) "aW" = (/turf/simulated/wall/r_wall,/area/engiestation) @@ -71,7 +71,7 @@ "bs" = (/turf/simulated/wall,/area/engiestation) "bt" = (/obj/machinery/door/airlock/engineering{name = "Construction Area"; req_access_txt = "32"},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "bu" = (/turf/simulated/wall/r_wall,/area/space) -"bv" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{icon_state = "solarpanel"},/area/engiestation/solars) +"bv" = (/obj/machinery/power/solar,/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/engiestation/solars) "bw" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/telecomms/relay/preset/engioutpost,/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "bx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "by" = (/obj/machinery/light{dir = 1},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/solar_control/autostart{name = "Engineering Outpost Solar Control"},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/engiestation) @@ -101,11 +101,11 @@ "bW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engiestation) "bX" = (/obj/machinery/door/poddoor{id_tag = "constructiondriver0"; name = "Construction Driver Door"; protected = 0},/turf/simulated/floor/plating,/area/engiestation) "bY" = (/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/constructionsite/ai) -"bZ" = (/obj/machinery/power/solar,/obj/structure/cable,/turf/simulated/floor{icon_state = "solarpanel"},/area/engiestation/solars) +"bZ" = (/obj/machinery/power/solar,/obj/structure/cable,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/engiestation/solars) "ca" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engiestation) "cb" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/engineering{input_attempt = 1; input_level = 50000; inputting = 1; output_level = 15000},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "cc" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engiestation) -"cd" = (/obj/structure/rack,/obj/item/clothing/suit/space/rig,/obj/item/clothing/head/helmet/space/rig,/turf/simulated/floor,/area/engiestation) +"cd" = (/obj/structure/rack,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/head/helmet/space/rig/engineering,/turf/simulated/floor,/area/engiestation) "ce" = (/obj/machinery/driver_button{id_tag = "constructiondriver1"; name = "Construction Driver #1"; pixel_x = 25},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/engiestation) "cf" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) "cg" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) @@ -603,3 +603,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/cyberiad/z5.dmm b/_maps/map_files/cyberiad/z5.dmm index c00a7f8fe50..a729ff603f6 100644 --- a/_maps/map_files/cyberiad/z5.dmm +++ b/_maps/map_files/cyberiad/z5.dmm @@ -12,7 +12,7 @@ "al" = (/obj/machinery/light/small,/obj/structure/transit_tube,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "am" = (/obj/structure/transit_tube{icon_state = "W-SE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "an" = (/obj/structure/transit_tube{icon_state = "D-SW"},/turf/simulated/mineral,/area/mine/explored) -"ao" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/research_outpost/hallway) +"ao" = (/obj/structure/transit_tube,/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway) "ap" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway) "aq" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "NE-SW"},/turf/space,/area/space) "ar" = (/obj/structure/transit_tube{icon_state = "D-NW"},/obj/structure/lattice,/turf/space,/area/space) @@ -21,7 +21,7 @@ "au" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/maintstore1) "av" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/mineral,/area/mine/explored) "aw" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"ax" = (/obj/structure/transit_tube,/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating/airless/asteroid,/area/research_outpost/hallway) +"ax" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/xenos,/obj/item/clothing/head/xenos,/turf/simulated/floor/airless{dir = 8; icon_state = "green"},/area/mine/abandoned) "ay" = (/obj/structure/transit_tube/station,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/research_outpost/hallway) "az" = (/obj/structure/transit_tube,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/hallway) "aA" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway) @@ -92,8 +92,8 @@ "bN" = (/turf/simulated/wall/r_wall,/area/research_outpost/atmos) "bO" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/atmos) "bP" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube{icon_state = "N-S"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/atmos) -"bQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) -"bR" = (/obj/machinery/door/airlock/external,/turf/simulated/floor,/area/mine/abandoned) +"bQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"bR" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/airless,/area/mine/abandoned) "bS" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "S-NE"},/turf/space,/area/space) "bT" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/turf/simulated/floor{icon_state = "dark"},/area/research_outpost/spectro) "bU" = (/obj/structure/stool,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/spectro) @@ -119,8 +119,8 @@ "co" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister,/obj/machinery/camera{c_tag = "Research Outpost Atmospherics"; dir = 2; network = list("Research Outpost")},/turf/simulated/floor/plating,/area/research_outpost/atmos) "cp" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/research_outpost/atmos) "cq" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/atmos) -"cr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) -"cs" = (/turf/simulated/floor,/area/mine/abandoned) +"cr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"cs" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "ct" = (/turf/simulated/mineral/random/high_chance,/area/mine/unexplored) "cu" = (/obj/machinery/radiocarbon_spectrometer,/turf/simulated/floor{icon_state = "dark"},/area/research_outpost/spectro) "cv" = (/turf/simulated/floor{icon_state = "white"},/area/research_outpost/spectro) @@ -145,10 +145,10 @@ "cO" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 10},/turf/simulated/floor/plating,/area/research_outpost/atmos) "cP" = (/obj/machinery/door/window/westleft,/turf/simulated/floor,/area/research_outpost/atmos) "cQ" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/turf/simulated/floor{icon_state = "bot"},/area/research_outpost/atmos) -"cR" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating,/area/mine/abandoned) -"cS" = (/obj/item/stack/rods,/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/simulated/floor,/area/mine/abandoned) -"cT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned) -"cU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) +"cR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"cS" = (/obj/item/stack/rods,/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/simulated/floor/airless,/area/mine/abandoned) +"cT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"cU" = (/turf/simulated/floor/plating/airless,/turf/simulated/shuttle/wall{tag = "icon-pwall (SOUTHWEST)"; icon_state = "pwall"; dir = 10},/area/space) "cV" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/obj/machinery/camera{c_tag = "Research Outpost Mass Spectrometry"; dir = 8; network = list("Research Outpost")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/research_outpost/spectro) "cW" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/fuel,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric{name = "beaker 'sulphuric acid'"},/obj/item/weapon/reagent_containers/glass/beaker/water,/obj/item/weapon/reagent_containers/glass/bottle/toxin,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/sample) "cX" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/stool,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/sample) @@ -164,7 +164,7 @@ "dh" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/atmospherics/unary/tank/air{dir = 8},/turf/simulated/floor/plating,/area/research_outpost/atmos) "di" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor,/area/research_outpost/atmos) "dj" = (/turf/simulated/shuttle/wall{tag = "icon-pwall (NORTH)"; icon_state = "pwall"; dir = 1},/area/space) -"dk" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{tag = "icon-pwall (SOUTHWEST)"; icon_state = "pwall"; dir = 10},/area/space) +"dk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "dl" = (/obj/item/stack/rods,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) "dm" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) "dn" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/research_outpost/spectro) @@ -193,7 +193,7 @@ "dK" = (/obj/machinery/door/airlock/hatch,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/space) "dL" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) "dM" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"dN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned) +"dN" = (/turf/simulated/floor/plating/airless,/turf/simulated/shuttle/wall{tag = "icon-pwall (SOUTHEAST)"; icon_state = "pwall"; dir = 6},/area/space) "dO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/turf/simulated/wall/r_wall,/area/research_outpost/hallway) "dP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/door/firedoor{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/research{name = "Spectrometry Lab"; req_access_txt = "65"},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/spectro) "dQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/turf/simulated/wall/r_wall,/area/research_outpost/sample) @@ -215,7 +215,7 @@ "eg" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "eh" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-pwall (NORTHEAST)"; icon_state = "pwall"; dir = 5},/area/space) "ei" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-pwall (NORTHWEST)"; icon_state = "pwall"; dir = 9},/area/space) -"ej" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{tag = "icon-pwall (SOUTHEAST)"; icon_state = "pwall"; dir = 6},/area/space) +"ej" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating/airless,/area/research_outpost/atmos) "ek" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) "el" = (/turf/simulated/wall,/area/mine/abandoned) "em" = (/turf/space,/area/shuttle/research/outpost) @@ -246,8 +246,8 @@ "eL" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/wall/r_wall,/area/research_outpost/power) "eM" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "eN" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/mineral,/area/mine/explored) -"eO" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating,/area/research_outpost/atmos) -"eP" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/mine/abandoned) +"eO" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"eP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "eQ" = (/obj/item/stack/rods,/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) "eR" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) "eS" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) @@ -278,7 +278,7 @@ "fr" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/sign/electricshock{pixel_x = 32},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/camera{c_tag = "Research Outpost Power Room"; dir = 2; network = list("Research Outpost")},/turf/simulated/floor/plating,/area/research_outpost/power) "fs" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "ft" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area/space) -"fu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned) +"fu" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless,/area/mine/abandoned) "fv" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) "fw" = (/obj/structure/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) "fx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) @@ -334,9 +334,9 @@ "gv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "gw" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) "gx" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"gy" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor,/area/mine/abandoned) -"gz" = (/obj/structure/alien/weeds,/turf/simulated/floor/plating,/area/mine/abandoned) -"gA" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/plating,/area/mine/abandoned) +"gy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"gz" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/obj/effect/decal/remains/xeno,/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"gA" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/mineral/unloading_machine,/turf/simulated/floor{dir = 1; icon_state = "vault"},/area/research_outpost/tempstorage) "gB" = (/obj/machinery/light_switch{pixel_y = -23},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/research_outpost/hallway) "gC" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/research_outpost/hallway) "gD" = (/obj/structure/bookcase/manuals/xenoarchaeology,/turf/simulated/floor/wood,/area/research_outpost/hallway) @@ -364,7 +364,7 @@ "gZ" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) "ha" = (/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) "hb" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"hc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) +"hc" = (/obj/machinery/door/airlock,/turf/simulated/floor/airless,/area/mine/abandoned) "hd" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) "he" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/wall,/area/research_outpost/entry) "hf" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry) @@ -396,7 +396,7 @@ "hF" = (/obj/item/weapon/shard,/obj/structure/lattice,/turf/space,/area/space) "hG" = (/obj/effect/gibspawner/robot,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) "hH" = (/obj/effect/gibspawner/human,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) -"hI" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/obj/effect/decal/remains/xeno,/turf/simulated/floor/plating,/area/mine/abandoned) +"hI" = (/obj/structure/alien/weeds,/turf/simulated/floor/airless,/area/mine/abandoned) "hJ" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube{icon_state = "N-S"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry) "hK" = (/obj/machinery/computer/shuttle_control/research{req_access_txt = "65"},/turf/simulated/floor{icon_state = "bot"},/area/research_outpost/entry) "hL" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/research_outpost/entry) @@ -412,7 +412,7 @@ "hV" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/fire,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/med) "hW" = (/turf/simulated/wall/r_wall,/area/research_outpost/tempstorage) "hX" = (/obj/machinery/camera{c_tag = "Research Outpost Temporary Storage"; dir = 2; network = list("Research Outpost")},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/research_outpost/tempstorage) -"hY" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/mineral/unloading_machine,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/research_outpost/tempstorage) +"hY" = (/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned) "hZ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/light_switch{pixel_x = 0; pixel_y = 23},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/research_outpost/tempstorage) "ia" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/wall/r_wall,/area/research_outpost/tempstorage) "ib" = (/obj/machinery/camera{c_tag = "Research Outpost Hallway Central"; dir = 4; network = list("Research Outpost")},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/research_outpost/hallway) @@ -440,7 +440,7 @@ "ix" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "small"},/turf/space,/area/mine/abandoned) "iy" = (/obj/structure/lattice,/turf/space,/area/mine/abandoned) "iz" = (/obj/structure/alien/weeds,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"iA" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/mine/abandoned) +"iA" = (/obj/structure/rack,/turf/simulated/floor/airless,/area/mine/abandoned) "iB" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) "iC" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) "iD" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube{icon_state = "N-SE"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry) @@ -488,11 +488,11 @@ "jt" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "ju" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) "jv" = (/turf/simulated/floor/airless,/area/mine/abandoned) -"jw" = (/obj/structure/alien/weeds,/turf/simulated/floor,/area/mine/abandoned) +"jw" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/airless{icon_state = "dark"},/area/mine/abandoned) "jx" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) -"jy" = (/obj/structure/table,/turf/simulated/floor,/area/mine/abandoned) -"jz" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/abandoned) -"jA" = (/obj/structure/rack,/turf/simulated/floor,/area/mine/abandoned) +"jy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"jz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"jA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "jB" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube{icon_state = "D-NE"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry) "jC" = (/obj/structure/transit_tube{icon_state = "S-NW"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/entry) "jD" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor,/area/research_outpost/entry) @@ -606,16 +606,16 @@ "lH" = (/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/machinery/camera{c_tag = "Research Outpost Exotic Particles Lab"; dir = 4; network = list("Research Outpost")},/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/research_outpost/harvesting) "lI" = (/obj/machinery/alarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/research_outpost/harvesting) "lJ" = (/obj/machinery/artifact_scanpad,/obj/machinery/light/small,/obj/machinery/firealarm{pixel_y = -24},/turf/simulated/floor/bluegrid,/area/research_outpost/harvesting) -"lK" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/mine/abandoned) -"lL" = (/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"lM" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"lN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) -"lO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/mine/abandoned) -"lP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned) -"lQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) -"lR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) -"lS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) -"lT" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor,/area/mine/abandoned) +"lK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"lL" = (/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned) +"lM" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned) +"lN" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless,/area/mine/abandoned) +"lO" = (/obj/machinery/conveyor_switch{id = "anosample"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/research_outpost/maint) +"lP" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless,/area/mine/abandoned) +"lQ" = (/turf/simulated/floor/airless{dir = 8; icon_state = "green"},/area/mine/abandoned) +"lR" = (/turf/simulated/floor{dir = 1; icon_state = "vault"},/area/research_outpost/longtermstorage) +"lS" = (/obj/machinery/firealarm{pixel_y = -24},/turf/simulated/floor{dir = 4; icon_state = "vault"},/area/research_outpost/longtermstorage) +"lT" = (/turf/simulated/floor{dir = 4; icon_state = "vault"},/area/research_outpost/longtermstorage) "lU" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) "lV" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "lW" = (/obj/structure/transit_tube{tag = "icon-E-SW"; icon_state = "E-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) @@ -635,7 +635,6 @@ "mk" = (/obj/machinery/conveyor{dir = 2; id = "anotempload"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/research_outpost/maint) "ml" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'MOVING PARTS'."; name = "\improper MOVING PARTS"; pixel_y = 32},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/research_outpost/maint) "mm" = (/obj/machinery/conveyor{dir = 1; id = "anosample"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/research_outpost/maint) -"mn" = (/obj/machinery/conveyor_switch{id = "anosample"},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; nitrogen = 0.01; oxygen = 0.01},/area/research_outpost/maint) "mo" = (/turf/simulated/floor/plating,/area/research_outpost/maint) "mp" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/research_outpost/maint) "mq" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/research_outpost/iso1) @@ -655,7 +654,7 @@ "mE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/longtermstorage) "mF" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet,/turf/simulated/floor,/area/research_outpost/longtermstorage) "mG" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/harvesting) -"mH" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor,/area/mine/abandoned) +"mH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "mI" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) "mJ" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "mK" = (/obj/structure/transit_tube{tag = "icon-NE-SW"; icon_state = "NE-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) @@ -690,7 +689,7 @@ "nn" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "no" = (/obj/structure/transit_tube{icon_state = "W-NE"},/obj/structure/lattice,/turf/space,/area/space) "np" = (/obj/structure/transit_tube{icon_state = "D-NW"},/turf/space,/area/space) -"nq" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/mine/abandoned) +"nq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "nr" = (/obj/effect/gibspawner/human,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) "ns" = (/obj/structure/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) "nt" = (/turf/simulated/wall,/area/mine/explored) @@ -721,14 +720,14 @@ "nS" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3) "nT" = (/obj/structure/closet/walllocker/emerglocker/west,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "nU" = (/obj/structure/dispenser,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) -"nV" = (/obj/machinery/firealarm{pixel_y = -24},/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/research_outpost/longtermstorage) -"nW" = (/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/research_outpost/longtermstorage) -"nX" = (/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/research_outpost/longtermstorage) +"nV" = (/obj/structure/transit_tube{tag = "icon-N-S"; icon_state = "N-S"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/airless,/area/mine/explored) +"nW" = (/obj/effect/decal/remains/human,/turf/simulated/floor/airless,/area/mine/abandoned) +"nX" = (/obj/item/weapon/table_parts,/turf/simulated/floor/airless,/area/mine/abandoned) "nY" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"nZ" = (/obj/effect/decal/remains/human,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/mine/abandoned) +"nZ" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; tag = "icon-closed (EAST)"},/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/airless,/area/mine/explored) "oa" = (/obj/structure/alien/resin/wall,/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned) -"ob" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) -"oc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned) +"ob" = (/obj/structure/transit_tube{tag = "icon-N-SE"; icon_state = "N-SE"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/airless,/area/mine/explored) +"oc" = (/obj/structure/transit_tube,/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/airless,/area/mine/explored) "od" = (/obj/structure/ore_box,/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "oe" = (/obj/structure/sign/xeno_warning_mining,/turf/simulated/wall,/area/mine/explored) "of" = (/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) @@ -758,9 +757,9 @@ "oD" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) "oE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/abandoned) "oF" = (/obj/machinery/door/airlock/glass{name = "Glass Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) -"oG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned) +"oG" = (/obj/structure/transit_tube/station{dir = 2; icon_state = "closed"; tag = "icon-closed (EAST)"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/airless,/area/mine/explored) "oH" = (/obj/machinery/door/window/westleft,/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"oI" = (/obj/structure/transit_tube{tag = "icon-N-S"; icon_state = "N-S"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored) +"oI" = (/turf/simulated/floor/mech_bay_recharge_floor/airless,/area/research_outpost/gearstore) "oJ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/mine/explored) "oK" = (/obj/machinery/suspension_gen,/turf/simulated/floor,/area/research_outpost/gearstore) "oL" = (/obj/machinery/floodlight,/turf/simulated/floor,/area/research_outpost/gearstore) @@ -785,13 +784,13 @@ "pe" = (/turf/simulated/mineral/random/low_chance,/area/mine/explored) "pf" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/simulated/mineral/random/low_chance,/area/mine/explored) "pg" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"ph" = (/obj/effect/decal/remains/human,/turf/simulated/floor,/area/mine/abandoned) -"pi" = (/obj/item/weapon/table_parts,/turf/simulated/floor,/area/mine/abandoned) +"ph" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; tag = "icon-opening (EAST)"},/obj/structure/transit_tube_pod,/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/airless,/area/mine/explored) +"pi" = (/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/airless,/area/mine/explored) "pj" = (/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) "pk" = (/obj/structure/rack,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) "pl" = (/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) "pm" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"pn" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; tag = "icon-closed (EAST)"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/mine/explored) +"pn" = (/obj/structure/transit_tube{tag = "icon-W-NE"; icon_state = "W-NE"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/airless,/area/mine/explored) "po" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/space) "pp" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/gearstore) "pq" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "research_inner"; locked = 1; name = "Research Outpost External Access"; req_access = null; req_access_txt = null},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor,/area/research_outpost/gearstore) @@ -801,21 +800,21 @@ "pu" = (/obj/item/weapon/rack_parts,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) "pv" = (/obj/structure/girder/displaced,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/abandoned) "pw" = (/obj/machinery/door/window/westleft,/obj/machinery/light/small,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"px" = (/obj/structure/transit_tube{tag = "icon-N-SE"; icon_state = "N-SE"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored) +"px" = (/obj/structure/transit_tube/station,/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/airless,/area/mine/explored) "py" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/obj/structure/lattice,/turf/space,/area/mine/explored) "pz" = (/obj/structure/lattice,/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/space,/area/mine/explored) "pA" = (/obj/structure/lattice,/obj/structure/transit_tube{tag = "icon-E-SW"; icon_state = "E-SW"},/turf/space,/area/mine/explored) "pB" = (/obj/structure/lattice,/obj/structure/transit_tube,/turf/space,/area/mine/explored) -"pC" = (/obj/structure/transit_tube,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored) -"pD" = (/obj/structure/transit_tube/station{dir = 2; icon_state = "closed"; tag = "icon-closed (EAST)"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/mine/explored) +"pC" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"pD" = (/turf/simulated/mineral/random,/area/mine/north_outpost) "pE" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) -"pF" = (/turf/simulated/floor/mech_bay_recharge_floor{icon_state = "recharge_floor_asteroid"},/area/research_outpost/gearstore) +"pF" = (/turf/simulated/mineral/random/high_chance,/area/mine/north_outpost) "pG" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) "pH" = (/obj/machinery/light/small{dir = 8},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "research_pump"; tag_exterior_door = "research_outer"; frequency = 1379; id_tag = "research_airlock"; tag_interior_door = "research_inner"; pixel_x = -25; pixel_y = 0; req_access_txt = null; tag_chamber_sensor = "research_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "research_pump"},/turf/simulated/floor,/area/research_outpost/gearstore) "pI" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor,/area/research_outpost/gearstore) "pJ" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "research_pump"},/turf/simulated/floor,/area/research_outpost/gearstore) "pK" = (/obj/machinery/door/window/westleft,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"pL" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; tag = "icon-opening (EAST)"},/obj/structure/transit_tube_pod,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/mine/explored) +"pL" = (/turf/simulated/mineral,/area/mine/north_outpost) "pM" = (/turf/simulated/wall/r_wall,/area/mine/explored) "pN" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/simulated/mineral,/area/mine/explored) "pO" = (/obj/structure/transit_tube{tag = "icon-NE-SW"; icon_state = "NE-SW"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) @@ -837,20 +836,19 @@ "qe" = (/obj/structure/ore_box,/obj/machinery/camera{c_tag = "Research Outpost External Airlock"; dir = 8; network = list("Research Outpost")},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "research_pump"},/turf/simulated/floor{icon_state = "warning"},/area/research_outpost/gearstore) "qf" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/turf/simulated/wall/r_wall,/area/mine/explored) "qg" = (/obj/effect/glowshroom,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"qh" = (/obj/item/stack/sheet/animalhide/xeno{amount = 3},/obj/structure/alien/resin/wall,/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned) "qi" = (/obj/machinery/door/airlock/external{name = "Mining Bridge"; req_access_txt = "65"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore) "qj" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/mine/explored) "qk" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "research_outer"; locked = 1; name = "Research Outpost External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/research_outpost/gearstore) "ql" = (/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/explored) "qm" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = -32},/obj/machinery/door/window/westleft,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"qn" = (/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored) +"qn" = (/turf/space,/area/mine/explored) "qo" = (/obj/structure/transit_tube{tag = "icon-E-NW"; icon_state = "E-NW"},/turf/simulated/wall/r_wall,/area/mine/explored) "qp" = (/obj/structure/transit_tube,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "qq" = (/obj/structure/transit_tube,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"qr" = (/obj/structure/transit_tube/station,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/mine/explored) -"qs" = (/obj/structure/transit_tube{tag = "icon-W-NE"; icon_state = "W-NE"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored) +"qr" = (/obj/structure/lattice,/turf/space,/area/mine/north_outpost) +"qs" = (/turf/space,/area/mine/north_outpost) "qt" = (/obj/machinery/door/airlock/external{name = "External Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned) -"qu" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/mine/abandoned) +"qu" = (/obj/machinery/camera{c_tag = "Mining Outpost West Outpost Mech Recharge Station"; dir = 1; network = list("Mining Outpost")},/turf/simulated/floor/mech_bay_recharge_floor/airless,/area/mine/west_outpost) "qv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/explored) "qw" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/mine/explored) "qx" = (/turf/simulated/floor/airless{tag = "icon-asteroidwarning (SOUTHWEST)"; icon_state = "asteroidwarning"; dir = 10},/area/mine/explored) @@ -992,7 +990,7 @@ "td" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/machinery/door/airlock/glass_security{name = "Labor Camp Backroom"; req_access_txt = "2"},/turf/simulated/floor/plating,/area/mine/laborcamp/security) "te" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/mine/laborcamp/security) "tf" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/mine/laborcamp/security) -"tg" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/alarm{pixel_y = 25; target_temperature = 283.15},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/mine/laborcamp/security) +"tg" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/mine/laborcamp/security) "th" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Labor Camp APC"; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; initialize_directions = 10},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=5-Central"; location = "4-Maint"},/turf/simulated/floor/plating,/area/mine/laborcamp) "ti" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/mine/laborcamp/security) "tj" = (/obj/machinery/door/airlock/glass_security{name = "Labor Camp External Access"; req_access_txt = "2"},/turf/simulated/floor/plating,/area/mine/laborcamp/security) @@ -1050,59 +1048,10 @@ "uj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (WEST)"; icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) "uk" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (EAST)"; icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) "ul" = (/turf/simulated/floor/plating/airless,/area/mine/explored) -"um" = (/obj/structure/ore_box,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/mine/north_outpost) -"un" = (/obj/structure/ore_box,/turf/simulated/floor/plating,/area/mine/north_outpost) -"uo" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/plating,/area/mine/north_outpost) -"up" = (/obj/structure/rack,/obj/item/clothing/suit/space/rig/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/mining,/turf/simulated/floor/plating,/area/mine/north_outpost) -"uq" = (/obj/structure/rack,/obj/item/weapon/storage/backpack/satchel,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/belt/utility,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/mine/north_outpost) -"ur" = (/obj/machinery/portable_atmospherics/pump,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/mine/north_outpost) -"us" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating,/area/mine/north_outpost) -"ut" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/mine/north_outpost) -"uu" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/plating,/area/mine/north_outpost) -"uv" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "arrivals_pump"},/turf/simulated/floor/plating,/area/mine/north_outpost) -"uw" = (/obj/machinery/atmospherics/unary/tank/air{dir = 8},/turf/simulated/floor/plating,/area/mine/north_outpost) -"ux" = (/obj/machinery/conveyor_switch/oneway{id = "nmining"; pixel_y = 16},/turf/simulated/floor/plating/airless,/area/mine/north_outpost) -"uy" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/mine/explored) +"um" = (/obj/machinery/conveyor{dir = 4; id = "mining_internal"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/mine/production) +"un" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/rack,/obj/item/clothing/suit/space/rig/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/mining,/turf/simulated/floor,/area/mine/living_quarters) "uz" = (/obj/structure/lattice,/obj/structure/window/reinforced,/turf/space,/area/mine/explored) "uA" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/mine/explored) -"uB" = (/turf/simulated/floor/plating,/area/mine/north_outpost) -"uC" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1399; master_tag = "nmining_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = null},/turf/simulated/floor/plating,/area/mine/north_outpost) -"uD" = (/obj/machinery/door/airlock/external{frequency = 1399; icon_state = "door_locked"; id_tag = "nmining_inner"; locked = 1; name = "North Mining External Access"; req_access = null; req_access_txt = "null"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating,/area/mine/north_outpost) -"uE" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1399; id_tag = "nmining_pump"},/obj/machinery/airlock_sensor{frequency = 1399; id_tag = "nmining_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plating,/area/mine/north_outpost) -"uF" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "nmining_pump"; tag_exterior_door = "NMining_outer"; frequency = 1399; id_tag = "nmining_airlock"; tag_interior_door = "nmining_inner"; pixel_x = 0; pixel_y = 25; req_access_txt = "null"; tag_chamber_sensor = "nmining_sensor"},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/mine/north_outpost) -"uG" = (/obj/machinery/door/airlock/external{frequency = 1399; icon_state = "door_locked"; id_tag = "NMining_outer"; locked = 1; name = "North Mining External"; req_access = null; req_access_txt = "null"},/turf/simulated/floor/plating,/area/mine/north_outpost) -"uH" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1399; master_tag = "nmining_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = null},/turf/simulated/floor/plating/airless,/area/mine/explored) -"uI" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plating,/area/mine/north_outpost) -"uJ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light/small{dir = 4},/obj/machinery/light_switch{pixel_x = 23; pixel_y = 0},/turf/simulated/floor/plating,/area/mine/north_outpost) -"uK" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/explored) -"uL" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plating,/area/mine/north_outpost) -"uM" = (/obj/structure/table,/turf/simulated/floor/plating,/area/mine/north_outpost) -"uN" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/plating,/area/mine/north_outpost) -"uO" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating,/area/mine/north_outpost) -"uP" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/plating,/area/mine/north_outpost) -"uQ" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating{tag = "icon-warnplate (NORTHWEST)"; icon_state = "warnplate"; dir = 9},/area/mine/north_outpost) -"uR" = (/obj/structure/stool,/turf/simulated/floor/plating{tag = "icon-warnplate (NORTHEAST)"; icon_state = "warnplate"; dir = 5},/area/mine/north_outpost) -"uS" = (/obj/structure/window/reinforced,/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/mine/north_outpost) -"uT" = (/obj/machinery/mineral/unloading_machine,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) -"uU" = (/obj/machinery/conveyor{dir = 4; id = "nmining"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/north_outpost) -"uV" = (/obj/structure/lattice,/obj/machinery/disposal/deliveryChute{dir = 8},/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/mine/north_outpost) -"uW" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/mine/explored) -"uX" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"uY" = (/obj/machinery/light/small,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) -"uZ" = (/obj/structure/disposalpipe/junction{tag = "icon-pipe-j2 (EAST)"; icon_state = "pipe-j2"; dir = 4},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored) -"va" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/mine/north_outpost) -"vb" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/mine/north_outpost) -"vc" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/mine/north_outpost) -"vd" = (/obj/machinery/light/small,/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plating,/area/mine/north_outpost) -"ve" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/turf/simulated/floor/plating,/area/mine/north_outpost) -"vf" = (/obj/machinery/power/apc{dir = 2; name = "North Mining Outpost"; pixel_x = 1; pixel_y = -23; power_channel = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/mine/north_outpost) -"vg" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/mine/north_outpost) -"vh" = (/obj/machinery/alarm{dir = 8; frequency = 1440; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/mine/north_outpost) -"vi" = (/obj/machinery/power/smes{charge = 1e+006},/obj/structure/cable,/turf/simulated/floor/plating,/area/mine/north_outpost) -"vj" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/terminal{dir = 8},/turf/simulated/floor/plating,/area/mine/north_outpost) -"vk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/light/small,/obj/machinery/firealarm{pixel_y = -24},/turf/simulated/floor/plating,/area/mine/north_outpost) -"vl" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/mine/north_outpost) -"vm" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/mine/north_outpost) "vn" = (/obj/machinery/light/small,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "vo" = (/turf/space,/area/mine/unexplored) "vp" = (/obj/machinery/door/airlock/external{name = "Mining Bridge"; req_access_txt = "54"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/west_outpost) @@ -1155,7 +1104,6 @@ "wk" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) "wl" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored) "wm" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/west_outpost) -"wn" = (/obj/machinery/camera{c_tag = "Mining Outpost West Outpost Mech Recharge Station"; dir = 1; network = list("Mining Outpost")},/turf/simulated/floor/mech_bay_recharge_floor{icon_state = "recharge_floor_asteroid"},/area/mine/west_outpost) "wo" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/west_outpost) "wp" = (/obj/structure/disposalpipe/segment,/obj/structure/sign/deathsposal,/turf/simulated/wall,/area/mine/living_quarters) "wq" = (/obj/structure/table/reinforced,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) @@ -1229,7 +1177,6 @@ "xG" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/mine/living_quarters) "xH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/mine/living_quarters) "xI" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/mine/living_quarters) -"xJ" = (/obj/structure/ore_box,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/mine/living_quarters) "xK" = (/obj/machinery/camera{c_tag = "Mining Outpost Storage Room"; dir = 1; network = list("Mining Outpost")},/turf/simulated/floor,/area/mine/living_quarters) "xL" = (/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor,/area/mine/living_quarters) "xM" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/mine/living_quarters) @@ -1488,7 +1435,7 @@ "CI" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor,/area/mine/production) "CJ" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Mining Station Loading Bay APC"; pixel_x = 1; pixel_y = 25},/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/mine/production) "CK" = (/obj/machinery/mineral/mint{input_dir = 8; output_dir = 4},/turf/simulated/floor,/area/mine/production) -"CL" = (/obj/machinery/alarm{pixel_y = 25; target_temperature = 283.15},/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/mine/production) +"CL" = (/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/mine/production) "CM" = (/obj/machinery/camera{c_tag = "Mining Outpost Production Room"; dir = 4; network = list("Mining Outpost")},/obj/machinery/conveyor_switch/oneway{id = "mining_internal"; name = "mining conveyor"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/mine/production) "CN" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/mine/production) "CO" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/mine/production) @@ -1500,11 +1447,7 @@ "CU" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/window/reinforced,/obj/structure/closet/crate,/turf/simulated/floor,/area/mine/production) "CV" = (/obj/structure/closet/walllocker/emerglocker/east,/turf/simulated/floor,/area/mine/production) "CW" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/mine/production) -"CX" = (/obj/machinery/conveyor{dir = 4; id = "mining_internal"},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; nitrogen = 0.01; oxygen = 0.01},/area/mine/production) -"CY" = (/obj/machinery/conveyor{dir = 4; id = "mining_internal"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/mine/production) "CZ" = (/obj/machinery/telepad_cargo,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/mine/production) -"Da" = (/turf/simulated/floor,/area/mine/unexplored) -"Db" = (/turf/simulated/floor{icon_state = "bar"},/area/mine/unexplored) "Dc" = (/turf/space,/area/vox_station/mining) (1,1,1) = {" @@ -1550,41 +1493,41 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeafafafafafafafafagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaahaiajajakakakakakalakamanafafafafafafafafaoapapapagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaahaqarafafafafafafasasasatauanafafafavawakakaxayazaAaBaBajaCaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaahaiajajakakakakakalakamanafafafafafafafafapapapapagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaahaqarafafafafafafasasasatauanafafafavawakakaoayazaAaBaBajaCaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaEarafafafafafafafasaFaGaHatauaIasaJaKaLaMaMaMaNaOaMaMaMaMaPaQaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaRafafafafafafafafasaSaTaUaVaWaXaYaZbabbbcbdbbbeaNbbbfbgaMagbhbiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacbkbkacacbkbkbkbkacbkbkbkbkbkbkbkacacacacacacacacaaaaaaaaaaaaaaaaahblafafafafbmbmbmbmbmbnbobpbqbrbrbrbsbtbbbubvbwaNaNbxbvbuaMagagbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacbkacacacacacacbkbkacacacacbkbkbkbkacbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaabzbAaBaBaBbBbCafafafafbmbmbDbEbmbFbFbFbFbGbrbHbIbJbbbbbKbbbLbMbNbNbNbNbNbObPbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQbRbQaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacbkacacacbkbkacbkbkbkacacbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaabSbCagagagagagafafafafbmbTbUbVbWbXbYbZcacbcccdcecfbbcgchbKcicjckclcmcncocpcqbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcscragaaaaaaacacacacacacacacacacacacbkbkbkbkbkbkacacacacacacacbkbkbkbkbkacacacbkbkbkbkbkctbkbkbkbkbkbkbkbkacacacacaaaaaRaaaaaaaaaaaaafafafafbmcucvcwbmcxcybXczcAcBcCcDcEcFcGcHcIcJcKbNcLcMcNcOcPcQbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRcScTcUagaaaaacacacacacacacbkacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaRaaaaaaaaaaaaafafafafbmcucvcVbmcWbXcXcYcZdadbdadcdadadadadddebNdfcMdgdhdicqbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjdjdkdldmcragaaaaacacacacbkbkbkacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaagaRaaaaaaaaaaaaafafafafbmcudndobmdpdqdrdsdtdudvdwdxdydzdAdadBdCbNdDdEdFdGbNbPbOagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHdIdJdKdLdMdNagagacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaagaRaaagagagagagafaMaMaMaMaMdOdPaMbFbFdQdRdSdadTdUdVdWdXdYdadZeaebecedeeefbNegafagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaadadadadadaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehdjeiejekdmelacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacaaaaaRememememememembbeneoepeqereseteuevewexeydaezeAeBeCeDeEeFeGeHeIeIeIeJeKeLeMeNeNeOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaadadadadadaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagePeQeRelacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkacacacacacacaaaaaRemememememememapeSeTeUeVeWeXeYeZfafbfcfdfefffgfhfifjfkflfmfneIfofpfqfreIfsafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagftfufvfwelacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacaaaaaaaaaRemememememememapfxeofyfzfAfBfCfDfEaMfFfGfHfIfJfKfLfMfNdafOfPfQfRfRfSfTfUfVfWafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrjvcragaaaaaaacacacacacacacacacacacacbkbkbkbkbkbkacacacacacacacbkbkbkbkbkacacacbkbkbkbkbkctbkbkbkbkbkbkbkbkacacacacaaaaaRaaaaaaaaaaaaafafafafbmcucvcwbmcxcybXczcAcBcCcDcEcFcGcHcIcJcKbNcLcMcNcOcPcQbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacscScRcTagaaaaacacacacacacacbkacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaRaaaaaaaaaaaaafafafafbmcucvcVbmcWbXcXcYcZdadbdadcdadadadadddebNdfcMdgdhdicqbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjdjcUdldmcragaaaaacacacacbkbkbkacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaagaRaaaaaaaaaaaaafafafafbmcudndobmdpdqdrdsdtdudvdwdxdydzdAdadBdCbNdDdEdFdGbNbPbOagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHdIdJdKdLdMdkagagacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaagaRaaagagagagagafaMaMaMaMaMdOdPaMbFbFdQdRdSdadTdUdVdWdXdYdadZeaebecedeeefbNegafagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaadadadadadaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehdjeidNekdmelacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacaaaaaRememememememembbeneoepeqereseteuevewexeydaezeAeBeCeDeEeFeGeHeIeIeIeJeKeLeMeNeNejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaadadadadadaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagageOeQeRelacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkacacacacacacaaaaaRemememememememapeSeTeUeVeWeXeYeZfafbfcfdfefffgfhfifjfkflfmfneIfofpfqfreIfsafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagftePfvfwelacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacaaaaaaaaaRemememememememapfxeofyfzfAfBfCfDfEaMfFfGfHfIfJfKfLfMfNdafOfPfQfRfRfSfTfUfVfWafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagfXfYfZelgagbelelelelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaRemememememememapfxeofyfzgcgdfCgegfaMggghdagidadadadagjdagkgleIgmgngogpgqeggraeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggsgtgugvgwgxbQdMgyelgzgAelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaRememememememembbfxeogBfzgCgDfCgEgFaMgGgHgIgJgKgLgMdagNgOgPgQgRgSgTgUgVgqegafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggWgXgtgYgZhahbhcgyhdgAgAgzelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaahehfhfhfhghfhfhfhhhihjbbhkhlaMaMaMaMaMhmhnhogJhpgLhqdahrhshthuhvhwhxhyhzhAhBhCaMhDbAaBaBaBaBaBaBaChEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFgWgXgWgugugahGgZelfwhHelgAhIelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaahJhKhLhMhNhNhOhPhQhRhShThUhVhWhXhYhZiaibicidieifigihdaiiijikileIeIimeIeIeIinioipiqirisisitisisisiubiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagiviwguixiygueRizhaiAiBiCelelelelelelbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacacaaaaaaaaaaiDiEhNhNhNhNiFiGiHiIiJiKiLiMhWiNiOiPiQiRiSiTiUiViWiXiYiZiWjajbjcjdjejfjcjgjciWjhjijjjkjljmjnjojpisbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagjqjrjsguiyjtgYjugZjveljwjxeljygyjzjAelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacacacaaaaaaaaaajBjChNhNjDhNjEjFjGjHjIjJjKjLhWjMjNjOjPjQjRjSjTjUjVjWjXjYjZjWkajXkbjWjXkckdkekfkgkhkikjkkklkmkmknisbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagbkbkelgxkokpkqjskrgZhaksbQdMkteljyfwgyjAelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacafafafafafafacacacacacacacaaaaaaaahfkuhNkvkwkxkykzkAkBkCkDkEkFhWkGkHkIkJkJkJkJkKkLkMkNkLkOkPkQkOkRkSkTkRkRkUkVkWkXiskYkZislakmkmlbisbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagelelelelelelgwgZlckogZizldkskshcgyjweljyeRlejAelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacafafafaeaeaeaeafafafacacacaclflgaaaaaalhlihfhfljljljljlklllmbblnlnhWlokJlpkJlqlrlsltkLlulvlwkOlxlylzkRlAlBlCkRlDlEkWlFlGisisislHlIlJjpisbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagellKdMlLlMellNlOlPeliAellQlRlSeldMlTcslUeRfvcselbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkacacacafafaeaeaeaeaeaeaeaeafafacaclVlWaBaBajaBbBbCagaglXlYlZmambmcmdmemfmgmhmimjmkmlmmmnmompkLmqmrmskOmtmumvkRmwmxmykRmzmAmBmCmDmEmFisisisisismGblaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacellKeRdMgYiAlTkodMkofvdMdMmHgydMeReRelcsmIeRdMelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacafafaeaeaeaeaeaeaeaeaeaeafafmJmKmLacaaaaaaaaaaaaaglXmMmNmOmPmQmRmSlnmTmUhWkJlpkJmVkJmWmXkLmYmZnakOnbncndkRnenfngkRnhninjnknlnlnmlGnnaiaBaBnonpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacellKnqeReRiAeRlegaeRnrfvlektcseRnsfwelkocslTdMelbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafntaeaeaeaeaeaeaeaeaeaeaenuafnvnwafafaaaaaaaaaaaaaglXnxnynznAnznBnClnlnnDhWnEnFnGnHkJnInJkLnKnLnMkOnNnOnPkRnQnRnSkRnTnUlGnVnWnXnWlGnvnYafagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacellKnZgYgweloaelobocelhaelobocelgZlTelmHiCcsjwelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafodaeaeaeaeoeaeaeaeaeaeaeofntogntafaaaaaaaaaaaaaaaglXohnCnCoiojoknCollnomhWononononkJoomokLopoqorkOosotoukRovowoxkRoyozoAlGlGlGlGoBoCafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaceleleleleleloaeloDgyhajwfwgZkrgZiCgYeloboEoFoGelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafnuaeaeaeaeaeaeaeaeaeaeaeaeoHoIoJaaaaaaaaaaaaaaagaglXoKoKoLoioMoNoOoPlnoQhWaeaeaeaekJoRoSkLoToUoVkOoWoXoYkRoZpapbkRpcpdoAafpeafpfmKpgafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacbkbkbkbkbkeloaelgyjwphizdmgYgyelgZfwelpipjpjpkelplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafafaeaeaeaeaeaeaeaeaeaeaeaepmpnpoaaaaaaaaaaaaagagaglXlXpppplXlXoipqoilXpraeaeaeaeaekJkJkJkLkLkLkLkOkOkOkOkRkRkRkRkRoAoApslWakakptnYafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacbkbkbkbkbkbkeloaeljwdMiCgygZfwiCeloaeleljycspjpupvplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafafaeaeaeaeaeaeaeaeaeaeaeaepwpxpyaaaaaaaaaaagpzpApBpCpDpEpFpGlXpHpIpJlXpraeaeaeaeaepKpLpMafafafafafafafafafafafafafafpNpOnYpPafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbkbkbkbkbkbkbkbkeloaeleleleleleleleleloaeljycsjzcspkpQplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafaeaeaeaeaeaeaeaeaeaeaeaeaepRpSpTpUpUpUpUpUpUpVpWpXpYpYpZqaqblXqcqdqelXpraeaeaeaeaepmpxqfafafpepepepepepeafafafafafpNpOnYqgaeqgafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkeloaoaoaoaqhoaoaoaoaoaoaeljyjzjzjzjAelplplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkacafaeaeaeaeaeaeaeaeoeaeaeaeaeaeqiqjqjqjqjqjqjqjqjqiaeaeaeaeaeaelXoiqkoilXqlaeaeaeaeaeqmqnqoakakakakqpakakakakakqqpCqrqsnYaeaeaeqgntafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkeleleleleleleleleleleleleleloGqtquelelplplplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafaeaeaeaeaeaeaeaeaeaeaeaeaepRqvqwqwqwqwqwqwqwqwpXpXaeaeaeaeaeaeqxqyqzqAqBqCaeaeaeaepMpMpMafafpepepepepepepepeqDqEpYqFaeqgaeaeqgafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkplplplelpjpjjzelplplplplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaafafafafafafafafaeaeaeaeaeaeqxqGqzaeaeaeafafafafafafpepepepepepepentqgaeqHaeqgaeaeaeafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggsgtgugvgwgxbQdMfuelkqjtelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaRememememememembbfxeogBfzgCgDfCgEgFaMgGgHgIgJgKgLgMdagNgOgPgQgRgSgTgUgVgqegafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggWgXgtgYgZhahbgyfuhdjtjtkqelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaahehfhfhfhghfhfhfhhhihjbbhkhlaMaMaMaMaMhmhnhogJhpgLhqdahrhshthuhvhwhxhyhzhAhBhCaMhDbAaBaBaBaBaBaBaChEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFgWgXgWgugugahGgZelfwhHeljtgzelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaahJhKhLhMhNhNhOhPhQhRhShThUhVhWhXgAhZiaibicidieifigihdaiiijikileIeIimeIeIeIinioipiqirisisitisisisiubiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagiviwguixiygueRizhahciBiCelelelelelelbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacacaaaaaaaaaaiDiEhNhNhNhNiFiGiHiIiJiKiLiMhWiNiOiPiQiRiSiTiUiViWiXiYiZiWjajbjcjdjejfjcjgjciWjhjijjjkjljmjnjojpisbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagjqjrjsguiyjtgYjugZjvelhIjxelksfuhYiAelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacacacaaaaaaaaaajBjChNhNjDhNjEjFjGjHjIjJjKjLhWjMjNjOjPjQjRjSjTjUjVjWjXjYjZjWkajXkbjWjXkckdkekfkgkhkikjkkklkmkmknisbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagbkbkelgxkokpkqjskrgZhaksbQdMktelksfwfuiAelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacafafafafafafacacacacacacacaaaaaaaahfkuhNkvkwkxkykzkAkBkCkDkEkFhWkGkHkIkJkJkJkJkKkLkMkNkLkOkPkQkOkRkSkTkRkRkUkVkWkXiskYkZislakmkmlbisbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagelelelelelelgwgZlckogZizldksksgyfuhIelkseRleiAelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacafafafaeaeaeaeafafafacacacaclflgaaaaaalhlihfhfljljljljlklllmbblnlnhWlokJlpkJlqlrlsltkLlulvlwkOlxlylzkRlAlBlCkRlDlEkWlFlGisisislHlIlJjpisbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaageljwdMhagweljqjyjrelhceljAjzlKeldMlNjvlUeRfvjvelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkacacacafafaeaeaeaeaeaeaeaeafafacaclVlWaBaBajaBbBbCagaglXlYlZmambmcmdmemfmgmhmimjmkmlmmlOmompkLmqmrmskOmtmumvkRmwmxmykRmzmAmBmCmDmEmFisisisisismGblaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceljweRdMgYhclNkodMkofvdMdMlPfudMeReReljvmIeRdMelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacafafaeaeaeaeaeaeaeaeaeaeafafmJmKmLacaaaaaaaaaaaaaglXmMmNmOmPmQmRmSlnmTmUhWkJlpkJmVkJmWmXkLmYmZnakOnbncndkRnenfngkRnhninjnknlnlnmlGnnaiaBaBnonpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaceljwlQeReRhceRlegaeRnrfvlektjveRnsfwelkojvlNdMelbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafntaeaeaeaeaeaeaeaeaeaeaenuafnvnwafafaaaaaaaaaaaaaglXnxnynznAnznBnClnlnnDhWnEnFnGnHkJnInJkLnKnLnMkOnNnOnPkRnQnRnSkRnTnUlGlSlRlTlRlGnvnYafagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaceljwaxgYgweloaelmHfZelhaelmHfZelgZlNellPiCjvhIelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafodaeaeaeaeoeaeaeaeaeaeaeofntogntafaaaaaaaaaaaaaaaglXohnCnCoiojoknCollnomhWononononkJoomokLopoqorkOosotoukRovowoxkRoyozoAlGlGlGlGoBoCafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaceleleleleleloaeloDfuhahIfwgZkrgZiCgYelmHoEoFnqelbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafnuaeaeaeaeaeaeaeaeaeaeaeaeoHnVoJaaaaaaaaaaaaaaagaglXoKoKoLoioMoNoOoPlnoQhWaeaeaeaekJoRoSkLoToUoVkOoWoXoYkRoZpapbkRpcpdoAafpeafpfmKpgafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacbkbkbkbkbkeloaelfuhInWizdmgYfuelgZfwelnXpjpjpkelplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafafaeaeaeaeaeaeaeaeaeaeaeaepmnZpoaaaaaaaaaaaaagagaglXlXpppplXlXoipqoilXpraeaeaeaeaekJkJkJkLkLkLkLkOkOkOkOkRkRkRkRkRoAoApslWakakptnYafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacbkbkbkbkbkbkeloaelhIdMiCfugZfwiCeloaelelksjvpjpupvplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafafaeaeaeaeaeaeaeaeaeaeaeaepwobpyaaaaaaaaaaagpzpApBocoGpEoIpGlXpHpIpJlXpraeaeaeaeaepKphpMafafafafafafafafafafafafafafpNpOnYpPafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbkbkbkbkbkbkbkbkeloaeleleleleleleleleloaelksjvhYjvpkpQplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafaeaeaeaeaeaeaeaeaeaeaeaeaepRpSpTpUpUpUpUpUpUpVpWpXpYpYpZqaqblXqcqdqelXpraeaeaeaeaepmobqfafafpepepepepepeafafafafafpNpOnYqgaeqgafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkeloaoaoaoalMlLoaoaoaoaoaelkshYhYhYiAelplplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkacafaeaeaeaeaeaeaeaeoeaeaeaeaeaeqiqjqjqjqjqjqjqjqjqiaeaeaeaeaeaelXoiqkoilXqlaeaeaeaeaeqmpiqoakakakakqpakakakakakqqocpxpnnYaeaeaeqgntafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkelelelelelelelelelelelelelelnqqtpCelelplplplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafaeaeaeaeaeaeaeaeaeaeaeaeaepRqvqwqwqwqwqwqwqwqwpXpXaeaeaeaeaeaeqxqyqzqAqBqCaeaeaeaepMpMpMafafpepepepepepepepeqDqEpYqFaeqgaeaeqgafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkplplplelpjpjhYelplplplplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaafafafafafafafafaeaeaeaeaeaeqxqGqzaeaeaeafafafafafafpepepepepepepentqgaeqHaeqgaeaeaeafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkplplplelqIqJqIelplplplplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaafafafafafafafafafafaeaeaeaeaeqKaeaeaeaeafafafafpepepepepepepepepepepepentpeaepPpeafafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkplplelqLqtoGelplplplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafafaeaeqMaeaeaeaeaeafafafaaaaaaaaaaaaaaaaaaafafafafafafafafafafafaeaeaeqKaeaeafafafafafpepepepepepepepepepepepepepepepepepeafafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkplplelqLqtnqelplplplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafafaeaeqMaeaeaeaeaeafafafaaaaaaaaaaaaaaaaaaafafafafafafafafafafafaeaeaeqKaeaeafafafafafpepepepepepepepepepepepepepepepepepeafafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkplplplqNqOqPplplplplbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacafafafntafaeaenunuafacacaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafaeaeqKaeaeafafafafpepepepepepepepepepepepepepepepepepepeafafafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkqQbkbkbkbkbkbkbkbkbkbkplplplplplqRplplplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacafafafafafafacacaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafaeaeqKaeaeaeafafafpepepepepepepepepepepepepepepepepepepeafafafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacctacaaaaaaaaaaaaaaaaaaaaaaaaqQbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkqQqQbkbkbkbkbkbkbkbkbkplplplplplplplqRplplbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkacacacacacacacacacacacaaaaaaaabkbkaaaaaaaaafafafafpepepepeafafafaeaeqSqTaeaeafafafpepepepepepepepepepepepepepepepepepepeafafafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1621,9 +1564,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacaaaaaaaaaaaaaaaaaaaaaaacbkctacacaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafaeaeqKaeafafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkacaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaacacbkbkacacaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafaeaeqKofntafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkacacaaaaaaaaaaaaaaacacacaaaaaaaaaaaaacacbkacaaaaaaaaaaaaaaaaaaaaaaacbkacacacaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafaeaeuhuiaeafafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkbkacaaaaaaaaaaaaaaacacbkacacacaaaaaaaaacbkbkacaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaeaeqKaeaeafafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkbkacaaaaaaaaaaaaaaacacbkacacacaaaaaaaaacbkbkacaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaeaeqKaeaeafafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacctbkacaaaaaaaaaaaaaaacacbkbkacacaaaaaaaaacctbkacaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaeaeaeaeqKaeaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkbkacaaaaaaaaaaaaaaaaacctbkacacaaaaaaaaacbkbkacaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeqKaeaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkbkacaaaaaaaaaaaaaaaaacctbkacacaaaaaaaaacbkbkacaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeqKaeaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaacbkbkacacacaaaaaaacacacacacacaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeqKaeaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkbkacacaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeqKaeaeaeafafafafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeqKaeaeaeafafafafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1633,41 +1576,41 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeqKaesdqCaeaeaeaeaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacctacacaaaaaaaaaaaaaaacbkbkacacaaaaaaaaaaaaaaaaaaaaaaacacbkbkacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeqSrAujukrArArAqTaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaacacacacacaaaaaaaaaaaaacacbkctbkacaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeqxqzaeaeaeqKaeaeaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkacacaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaacacacbkacaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeululaeaeaeqSrAqTaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacacaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkntntntntntntntntntntntntntntntntacacacacaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeululaeaeaeaeaeqKaeaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkacacaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkntumunuououpuqurusutuuuuuuuvuwntntntntuxuyuzuzuzuzuzuzuzuzuzuAaeaeaeaeaeaeululaeaeaeaeaeqKaeaeaeaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacaaaaaaaaaaaaacbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkntuBuBuBuBuBuBuBuBuBuBuBuBuBuCuDuEuFuGuHulululululululululululululululululululaeaeaeaeaeqSrArAqTaeaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacaaaaaaaaaaacacctacaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkntuBuBuBuBuBuBuIuIuBuBuBuBuBuJntntntntuKulululululululululululululululululululaeaeaeaeaeaeaeaeqKaeaeaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaacacbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkntuBuBuBuBuBuLuMuNuOuBuBuBuBuPuQuRntntuSuTuUuUuUuUuVuWuWuWuWuWuWuWuWuXuYuXuXuXuXuXuXuXuXuXuXuXuZrArAqTaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaacbkbkacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkbkacacaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkntvauBvbvcuBvdveuMuOuBvfvguBuBuBvhntafagagagaaaaaaaaaaaaaaaaaaaaaaaaaantafafafafafafafafafafaeqMaeaeqKaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkntntntntntntntntntntntntvivjvkvlvmntafagagaabkaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafntaeaeqKaeaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkacacaaaaacaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkntntntntntntntafagaaplbkbkbkbkplplaaaaaaaaaaaaaaafafafafafafafafafafafafafafaeqSrAqTaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacafafaaplplbkbkbkplplplaaaaaaaaaaaaaaafafafpepepepepepeafafafafafaeaeaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacafafaaaaplplbkbkbkplplaaaaaaaaaaaaaaaaafafafpepepepepepeafafafafafafaeaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafafaaaaaaplplbkbkbkplplaaaaaaaaaaaaaaafafafpepepepepepepeafafafafafafaesdqBqCaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacafaaaaaaaaaabkbkbkplplaaaaaaaaaaaaafafafafpepepepepepepepeafafafafafafaeqxqGqzaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkacacaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaacacacbkacaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacvoaaaaaaaaaaaaaaaaaaaaaaafafaeaeaeaeaeaeaeaeaeaeqSrAqTaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacacaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbktGtGtGtGtGtGtGtGtGtGtGtGtGtGafafacacacvoaaaaaaaaaaaaaaaaaaaaafafafafafafaeaeaeaeaeaeaeaeqKaeaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkacacaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbktGpDpDpDpDpDpDpFpDpDpDpDpDpDpLafafafafpLqnqnqnqnqnqnqnqnqnqnqnafafafafafafafafafaeaeaeaeqKaeaeaeaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacaaaaaaaaaaaaacbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbktGpDpDpDpDpDpDpDpDpDpDpDpDpDpDpDpLpLpLafvFvFvFvFvFvFvFvFvFvFvFafafafafafafafafafafafaeaeqSrArAqTaeaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacaaaaaaaaaaacacctacaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbktGpDpDpDpDpDpDpDpDpDpDpDpDpDpDafafafafululululululululululululululafafafafafafafafafaeaeaeaeaeqKaeaeaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaacacbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbktGpDpDpDpDpDpDpDpDpDpDpDpDpDpLpLpLafvFqrqrqrqrqrqrqrvFvFvFvFvFvFvFvFafafafafafafafafaeaeaeaeaeqSrArAqTaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaacbkbkacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkbkacacaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbktGpDpDpDpDpDpDpDpDpDpDpDpLpLpLpLpLqnqnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafaeaeaeaeaeqKaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbktGtGtGtGtGtGtGtGtGtGtGafpLpLpLqsqsqnqnaaaaaabkaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafaeaeaeqKaeaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkacacaaaaacaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkafafafafqnqnqnqnaaaaplbkbkbkbkplplaaaaaaaaaaaaaaafafafafafafafafafafafafafafaeqSrAqTaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacvovovoqnqnaaplplbkbkbkplplplaaaaaaaaaaaaaaafafafpepepepepepeafafafafafaeaeaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacvovoqnqnaaaaplplbkbkbkplplaaaaaaaaaaaaaaaaafafafpepepepepepeafafafafafafaeaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacvoqnqnaaaaaaplplbkbkbkplplaaaaaaaaaaaaaaafafafpepepepepepepeafafafafafafaesdqBqCaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacqnaaaaaaaaaabkbkbkplplaaaaaaaaaaaaafafafafpepepepepepepepeafafafafafafaeqxqGqzaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaacacacacacacacacaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafpepepepepepepepeafafafafafafafaeaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacugacaaaaaaaaaaaaaaaaaaaaaaaaacaaacacacacaaaaacacacaaaaaaaaaaacacacacacacacacaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafpepepepepepepepepeafafafafafaeaeaeaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacugacaaaaaaaaaaaaaaaaaaaaaaaaacaaacacacacaaaaacacacaaaaaaaaaaacacacacacacacacaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafpepepepepepepepepeafafafafafaeaeaeaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkacacacacbkacaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacaaaaaaaaaaaaaaaaaaaaaaaaafafafafpepepepepepepepepeafafafaeaeaeaeaeaeqKaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkacacacacacaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacaaaaaaaaaaaaaaaaaaaaaaafafafafpepepepepepepepepeafafafaeuhrArArArAuiaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaafafafafpepepepepepepepepeafafafaeqKaeaeaeaevnaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacctacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaafafafafpepepepepepepepepeafafafaeqKaeaeaeaentafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkbkacacacacacaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaafafafafpepepepepepepepeafafafaeqKaeaeaeafafafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacacacacacaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaacacacacacaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaafafafafpepepepepepepeafafafaeqKaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacaaaaaaaaacbkbkacacacaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaavoacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaaaaaafafafpepepepepepeafafafaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaacacbkacaaacaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaaaaaafafafpepepepeafafafaeaeqKaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaacctacaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaaaafafafpepepeafafafaeaeqKaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaacbkacacaaaaaaaaacbkbkbkacacaaaaaaaaaaaaaaacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaafafafafpepeafafafaeuhuiaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaacacbkacaaaaaaacacacacacacaaaaaaaaaaaaacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaafafafafpepeafafaeaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkacacacacacaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacaaaaaaaaaaaaaaaaaaaaaaafafafafpepepepepepepepepeafafafaeuhrArArArAuiaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacaaaaaaaaaaaaaaaaaaaaafafafafpepepepepepepepepeafafafaeqKaeaeaeaevnaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacctacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaafafafafpepepepepepepepepeafafafaeqKaeaeaeaentafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkbkacacacacacaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaafafafafpepepepepepepepeafafafaeqKaeaeaeafafafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacacacacacaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaacacacacacaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaafafafafpepepepepepepeafafafaeqKaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacaaaaaaaaacbkbkacacacaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaavoacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacaaaaaaaaaaaaaaaaaaaaaaaaafafafpepepepepepeafafafaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaacacbkacaaacaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaaaafafafpepepepeafafafaeaeqKaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaacctacaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaaaaaafafafpepepeafafafaeaeqKaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaacbkacacaaaaaaaaacbkbkbkacacaaaaaaaaaaaaaaacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacaaaaaaaaaaaaaaaaaaaaaaafafafafpepeafafafaeuhuiaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaacacbkacaaaaaaacacacacacacaaaaaaaaaaaaacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaaaafafafafpepeafafaeaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkacacaaaaaaaaaaaaacacacaaaaaaacacacaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaafafafafpeafafntudsdqBqCaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaafafafpepeafafafaeqxqGqzaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaafafafpepepepeafafafaeaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaeaeafaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacafafagagagagagagagagagagafafafpepepepeafafafaeaeqKaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaacacacaaaaaaaaaaaaaeaeaeaeaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacafafafueueueueueueueueueafafafafpepepepeafafafafaeqKaeaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaacbkacaaaaaaaaaaaaaeaeaeaeaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacafagagagagagszszagagagafafafafpepepepeafafafafaeqKaeaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaacacctacacaaaaaaaaaeaeaeaeafafafafaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaszszszszaaaaaaafafafafpepepepeafafafafaeqKaeaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaacacacacacacaaaaaaaaaeaeaeaeaeafafafaaaaaaacacacbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaszszszszaaaaaaaaafafafafpepepepeafafafaeaeqKaeaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkacaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaacacaaaaaaaaacacacaaaaaaaaaaaaaaaeaeaeaeaeafafaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaszszaaaaaaaaaaafafafafpepepepeafafafaeaeqKaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacaaaaaaaaaaaaacbkacaaaaaaaaaaaaaeaeaeaeaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacafagagagagagvFvFagagagafafafafpepepepeafafafafaeqKaeaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaacacctacacaaaaaaaaaeaeaeaeafafafafaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaqnqnqnqnaaaaaaafafafafpepepepeafafafafaeqKaeaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaacacacacacacaaaaaaaaaeaeaeaeaeafafafaaaaaaacacacbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaqnqnqnqnaaaaaaaaafafafafpepepepeafafafaeaeqKaeaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkacaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaacacaaaaaaaaacacacaaaaaaaaaaaaaaaeaeaeaeaeafafaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaqnqnaaaaaaaaaaafafafafpepepepeafafafaeaeqKaeaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkacacaaaaaaaaaaacacaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaapXaepXaeafafafaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafpepepeafafaeaeaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbkbkbkbkbkacaaaaaaaaaaacacaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaapXvppXaeafaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafpepepeafafafaeaeaeqKaeaeafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacctbkbkbkacacaaaaaaaaaaacacacaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaavqvrvsaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafpepepeafafaeaeaeaeqKaeafafafafpepepepepepepepepepepepepepepepepepepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1681,11 +1624,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaapXvppXaeaeaeaeaeaeaeafafacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkvZbkacvNvNvNvNwavNaeaeafafntafafaaaaaaaaaaaaaaaaaaaaaaafafafpepepeafafafafafafafafaeqKaeaeaeaeaeaeafafafafafpepepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkacacaaaaaaaaaaaaaaaaaaaeaepXonpXaeaeaeaeaeaeaeaeafacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkwbbkbkvNvRwcvNwdweaeaeaeaewfaeafafaaaaaaaaaaaaaaaaaaaaafafafafafafafntntntntntntafaeqKaeaeaeaeaeaeaeafafafafafpepepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaaaaaaaacacbkbkacaaaaaaaaaaaaaaaaaaaeaeaeaeononononwgwgwgaeaeaeafacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkwbbkbkvNvVvWwhvTweaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaafafafafafafntwiwjwkwkwlaeaeqKaeaeaeaeaeaeaeaeaeafafafafpepepepepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacctacacacacaaaaaaaaaaaaaaacacacbkbkacaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaewmwnwoaeaeaeafacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkacacacafafafafafafafacacacacacacacacbkbkbkbkbkbkbkbkbkbkvNwpvNvNvNvNvNvNvTweaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafafafntwqwrwrwrwsaesdqBqCaeaeaeaeaeaeaeaeaeafafafafafpepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacctacacacacaaaaaaaaaaaaaaacacacbkbkacaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaewmquwoaeaeaeafacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkacacacafafafafafafafacacacacacacacacbkbkbkbkbkbkbkbkbkbkvNwpvNvNvNvNvNvNvTweaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafafafntwqwrwrwrwsaesdqBqCaeaeaeaeaeaeaeaeaeafafafafafpepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaacacacbkbkacaaaaaaaaaeaewtwtwtwtwtwtwuwuwuwtwvwtwtwtaeaeaeafacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacafafaeaeaeaeaeafafafafafacacacacacacacbkbkbkbkvNvNvNvNwwwxwyvNvRwzvNwAvNvNvNwewewevNaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafafntwBwCwCwCwDaeqxqGqzaeaeaeaeaeaeaeaeaeafafafafafpepepepepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaacacacacacaaaaafaeaeaewtwEwFwGwHwIwJwKwLwMwNwOwPwHqCaeaeafafafafacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacafafaeaeaeaeaeaeaeaeaeaeafafafafafacacacacbkbkbkvNwQwRwSwTwRwRvNvVvWwUvTvNwVwWwXwXwXweaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafaeaeaeaeaeaeaeaewYwZxaxawZwZaeaeaeaeaeaeafafafafpepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaacacacaaaaacafaeaeaewtxbxcxdwHxcxexcxcxfxgxhwPxixjaeaeaeaeaeafafafacacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkacacafafntaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafacacacacacacvNxkwRxlxmxnxovNvNvNvNvTvNwVxpxpxpxqweaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaewYxrxsxsxtwZaexuaeaeaeofntafafafpepepepepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacafaeaeaewtxvxcxcxwxcxexxxcxcwHxyxzwHqzaeaeaeaeaeaeaeafafafafacacacacacacbkbkbkbkbkbkbkbkbkacacafafaewfaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafacacacvNxAxBxCwRxDxExFxqxGxHxIvNxJxpxKxLxMweaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaexNxNxOxOwYxPxQxRxSwZwZwZwZaeaeaeaeafafafafpepepepepepepepepeafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacafaeaeaewtxvxcxcxwxcxexxxcxcwHxyxzwHqzaeaeaeaeaeaeaeafafafafacacacacacacbkbkbkbkbkbkbkbkbkacacafafaewfaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafacacacvNxAxBxCwRxDxExFxqxGxHxIvNunxpxKxLxMweaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaexNxNxOxOwYxPxQxRxSwZwZwZwZaeaeaeaeafafafafpepepepepepepepepeafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacafafaeaewtxTxcxUwNxVxWxXxcwtwtwtwtwtwvsdqCaeaeaeaeaeaeaeaeafafafacacacacacbkbkbkbkbkbkbkacacacafaeaeaeaeaeaeaeaeaeaeaesdqCaeaeaeaeaeaeaeaeaeafafacacxYvNvNvNxZvNvNyaybycyaybvNvNvNvNvNydvNvNweweaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaexOxOyeyfygyhyiyjyjykyoymynyoqCaeaeaenuafafafpepepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafaeaewtypyqyrwHysytyuyvywsNsMylyAyBujukrArArArArAqTaeaeaeaeafafafacacacacacbkbkbkacacacacafafaeaeuhrArArArArArArArAujukrArArArAqTaeaeaeaeaeafacacacacacxZyCyDyExpxMyFxqxMxFyGyHyIxqxMxpyJyKweweweyLyMyMyMyMyMyMyMyNyNyNyNyNyNyNxOxOxOyOyfyPyQyRySyjyjyTyUyVyWyXyYaeaeaenuafafafpepepepepepeafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafaeaewtwtwtwtwtyZzazbwtwtzcwtwtwtwtqxqzaeaeaeaeaeqKaeaeaeaeafaeafafacacacacacacacacacacafafaeaeaeqKaeaeaeaeaeaeaeaeqxqzaeaeaeaeqKaeaeaeaeaeafafntafafacvNvNvNvNxpxMzdzezfxHzgzhzhzizizjzhzkzlzhzlzmzmzmzmzmzmzmzmznznznznznznznzozpzozqzpzrzsztzuzvzwzxyozyzzyoqzaeaeaeaeafafafafpepepepepeafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1704,15 +1647,15 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacafafafafafafafafafafntudaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaaaaaaaaaaaaaaaaaaaaaaCDCGCHCICJCKCLCDaeaeaeaeaeaeaeafafafafpepepepepepepeafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacacafaeaeaeaeaeaeaeaeaeaeaeaeaeqMaeaeaaaaaaaaaaaaaaaaaaaaaaCDCMCNCOCPBiCQCDaeaeaeaeaeaeafafafafpepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacafaeaeaeaeaeaeaeaeaeaeaeaeafntafafaaaaaaaaaaaaaaaaaaaaaaCDCRCSCTCUBiCVCDaeaeaeaeofntafafafpepepepepepepeafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacafafaeaeaeaeaeaeaeaeaeafacacafafafaaaaaaaaaaaaaaaaaaaaaaCDCWCXCXCXCYCZCDaeaeaeaeaeafafafpepepepepepepeafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacafafaeaeaeaeaeaeaeaeaeafacacafafafaaaaaaaaaaaaaaaaaaaaaaCDCWumumumumCZCDaeaeaeaeaeafafafpepepepepepepeafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacafafafafafafafafafafafacacacafafafaaaaaaaaaaaaaaaaaaaaCDCDCDCDCDCDCDCDaeaeaeaeafafafpepepepepepepeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaeaeaeaeaevnaeaeaeafafafafafafpepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacbkbkbkbkbkacacaaaaaaaaaaaaaaaaaaaaaeaeaeafntafafafafafafafafpepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaeaeafafafafafafafafafafpepepepepepeafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkDabkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaeaeafafafafafafpepepepepepepeafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaeaeafafafafafafpepepepepepepeafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaaeaeafafafafpepepepepepepeafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaaaaeaeafafafpepepepepeafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkDbbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeafafafafpepepeafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeafafafafpepepeafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkctbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm index f895656d46a..789118b6940 100644 --- a/_maps/map_files/cyberiad/z6.dmm +++ b/_maps/map_files/cyberiad/z6.dmm @@ -1,6 +1,6 @@ "aa" = (/turf/space,/area/space) "ab" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/space) -"ac" = (/obj/machinery/power/solar/fake,/turf/simulated/floor{icon_state = "solarpanel"},/area/djstation/solars) +"ac" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars) "ad" = (/turf/simulated/floor/plating/airless,/area/djstation/solars) "ae" = (/obj/structure/lattice,/turf/space,/area/space) "af" = (/turf/simulated/wall,/area/djstation) @@ -534,7 +534,7 @@ "kn" = (/turf/simulated/floor/airless,/area/derelict/hallway/secondary) "ko" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/secondary) "kp" = (/obj/machinery/door/airlock/maintenance{name = "Aux Storage"; req_access_txt = "23"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) -"kq" = (/obj/structure/falsewall,/turf/simulated/floor{icon_state = "bar"},/area/derelict/hallway/secondary) +"kq" = (/obj/structure/falsewall,/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) "kr" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 8; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/airless,/area/derelict/hallway/secondary) "ks" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) "kt" = (/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary) @@ -942,3 +942,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 3f287964e02..3686bc46d2f 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -42,7 +42,7 @@ Pipelines + Other Objects -> Pipe network pipe_color = null ..() - + /obj/machinery/atmospherics/initialize() ..() @@ -50,11 +50,15 @@ Pipelines + Other Objects -> Pipe network stored = new(src, make_from = src) /obj/machinery/atmospherics/Destroy() - for(var/mob/living/M in src) //ventcrawling is serious business - M.remove_ventcrawl() - M.forceMove(loc) + if(stored) + qdel(stored) + stored = null + for(var/mob/living/L in src) //ventcrawling is serious business + L.remove_ventcrawl() + L.forceMove(get_turf(src)) if(pipe_image) - del(pipe_image) //we have to del it, or it might keep a ref somewhere else + qdel(pipe_image) //we have to del it, or it might keep a ref somewhere else + pipe_image = null return ..() // Icons/overlays/underlays @@ -197,15 +201,11 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/proc/Deconstruct() if(can_unwrench) - var/turf/T = get_turf(src) - stored.loc = T + stored.loc = get_turf(src) transfer_fingerprints_to(stored) - if(istype(src, /obj/machinery/atmospherics/pipe)) - for(var/obj/machinery/meter/meter in T) - if(meter.target == src) - new /obj/item/pipe_meter(T) - qdel(meter) - qdel(src) + stored = null + + qdel(src) /obj/machinery/atmospherics/construction(D, P, C) if(C) @@ -213,7 +213,7 @@ Pipelines + Other Objects -> Pipe network dir = D initialize_directions = P var/turf/T = loc - level = T.intact ? 2 : 1 + level = T.intact ? 2 : 1 add_fingerprint(usr) initialize() var/list/nodes = pipeline_expansion() diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 30908f68900..cef0a02d3f6 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -22,8 +22,7 @@ var/global/list/datum/pipeline/pipe_networks = list() P.parent = null for(var/obj/machinery/atmospherics/A in other_atmosmch) A.nullifyPipenet(src) - ..() - return QDEL_HINT_QUEUE + return ..() /datum/pipeline/proc/process()//This use to be called called from the pipe networks if(update) diff --git a/code/ATMOSPHERICS/pipes/pipe.dm b/code/ATMOSPHERICS/pipes/pipe.dm index b02d990b432..8e22e40b06e 100644 --- a/code/ATMOSPHERICS/pipes/pipe.dm +++ b/code/ATMOSPHERICS/pipes/pipe.dm @@ -35,7 +35,7 @@ if(parent && isnull(parent.gcDestroyed)) qdel(parent) parent = null - + /obj/machinery/atmospherics/pipe/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/device/analyzer)) atmosanalyzer_scan(parent.air, user) @@ -51,7 +51,7 @@ /obj/machinery/atmospherics/pipe/proc/check_pressure(pressure) //Return 1 if parent should continue checking other pipes - //Return null if parent should stop checking other pipes. Recall: del(src) will by default return null + //Return null if parent should stop checking other pipes. Recall: qdel(src) will by default return null return 1 diff --git a/code/LINDA/LINDA_fire.dm b/code/LINDA/LINDA_fire.dm index e6858f04d18..b498f073328 100644 --- a/code/LINDA/LINDA_fire.dm +++ b/code/LINDA/LINDA_fire.dm @@ -30,7 +30,7 @@ if(air_contents.oxygen < 0.5 || air_contents.toxins < 0.5) return 0 - active_hotspot = PoolOrNew(/obj/effect/hotspot, src) + active_hotspot = new /obj/effect/hotspot(src) active_hotspot.temperature = exposed_temperature active_hotspot.volume = exposed_volume @@ -61,6 +61,8 @@ set_light(3, 1, color) air_master.hotspots += src perform_exposure() + dir = pick(cardinal) + air_update_turf() /obj/effect/hotspot/proc/perform_exposure() var/turf/simulated/location = loc @@ -160,8 +162,7 @@ var/turf/simulated/T = loc if(T.active_hotspot == src) T.active_hotspot = null - ..() - return QDEL_HINT_PUTINPOOL + return ..() /obj/effect/hotspot/proc/DestroyTurf() @@ -179,12 +180,6 @@ T.to_be_destroyed = 0 T.max_fire_temperature_sustained = 0 -/obj/effect/hotspot/New() - ..() - dir = pick(cardinal) - air_update_turf() - return - /obj/effect/hotspot/Crossed(mob/living/L) ..() if(isliving(L)) diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index 80127669417..30f9be83b4c 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -67,11 +67,11 @@ air.temperature = temperature -/turf/simulated/Del() +/turf/simulated/Destroy() visibilityChanged() if(active_hotspot) qdel(active_hotspot) - ..() + return ..() /turf/simulated/assume_air(datum/gas_mixture/giver) if(!giver) return 0 diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 3e3e219792b..293ba1f18ea 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -8,4 +8,3 @@ #define IMPTRACK_HUD 7 // tracking implant #define SPECIALROLE_HUD 8 // AntagHUD image #define STATUS_HUD_OOC 9 // STATUS_HUD without virus db check for someone being ill. -#define NATIONS_HUD 10 //Show nations icons during nations gamemode diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm index fd467e7a054..b1781de3314 100644 --- a/code/__DEFINES/language.dm +++ b/code/__DEFINES/language.dm @@ -17,3 +17,4 @@ #define NONGLOBAL 32 // Do not add to general languages list #define INNATE 64 // All mobs can be assumed to speak and understand this language (audible emotes) #define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message +#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems \ No newline at end of file diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 88772bb8d76..3153c180817 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -1,8 +1,11 @@ // channel numbers for power -#define EQUIP 1 -#define LIGHT 2 -#define ENVIRON 3 -#define TOTAL 4 //for total power used only +#define EQUIP 1 +#define LIGHT 2 +#define ENVIRON 3 +#define TOTAL 4 //for total power used only +#define STATIC_EQUIP 5 +#define STATIC_LIGHT 6 +#define STATIC_ENVIRON 7 //computer3 error codes, move lower in the file when it passes dev -Sayu #define PROG_CRASH 1 // Generic crash diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 7228d62b24d..cb1f986b69d 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -325,9 +325,9 @@ proc/isInSight(var/atom/A, var/atom/B) /proc/flick_overlay(image/I, list/show_to, duration) for(var/client/C in show_to) C.images += I - sleep(duration) - for(var/client/C in show_to) - C.images -= I + spawn(duration) + for(var/client/C in show_to) + C.images -= I /proc/get_active_player_count() // Get active players who are playing in the round @@ -427,7 +427,7 @@ proc/isInSight(var/atom/A, var/atom/B) /proc/SecondsToTicks(var/seconds) return seconds * 10 - + proc/pollCandidates(var/Question, var/jobbanType, var/antag_age_check = 0, var/be_special_flag = 0, var/poll_time = 300) var/list/mob/dead/observer/candidates = list() var/time_passed = world.time @@ -469,4 +469,3 @@ proc/pollCandidates(var/Question, var/jobbanType, var/antag_age_check = 0, var/b candidates.Remove(G) return candidates - \ No newline at end of file diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index a81a99c540b..00faf1864f9 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -31,11 +31,6 @@ var/datum/job/J = new T joblist[J.title] = J - paths = subtypesof(/datum/nations) - for(var/T in paths) - var/datum/nations/N = new T - all_nations[N.name] = N - paths = subtypesof(/datum/superheroes) for(var/T in paths) var/datum/superheroes/S = new T diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 452911908bc..c13ae732cee 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -2,7 +2,6 @@ var/global/list/all_species[0] var/global/list/all_languages[0] var/global/list/language_keys[0] // Table of say codes for all languages -var/global/list/all_nations[0] var/global/list/all_superheroes[0] var/global/list/whitelisted_species = list() diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index a001c55082f..e43177c0965 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -8,7 +8,6 @@ var/global/list/side_effects = list() //list of all medical sideeffects types var/global/list/mechas_list = list() //list of all mechs. Used by hostile mobs target tracking. var/global/list/spacepods_list = list() //list of all space pods. Used by hostile mobs target tracking. var/global/list/joblist = list() //list of all jobstypes, minus borg and AI -var/global/list/flag_list = list() //list of flags during Nations gamemode var/global/list/airlocks = list() //list of all airlocks var/global/list/singularities = list() //list of all singularities var/global/list/janitorial_equipment = list() //list of janitorial equipment diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index 836d0dee4f1..9987fe47511 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -48,7 +48,8 @@ if(button) if(T.client) T.client.screen -= button - del(button) + qdel(button) + button = null T.actions.Remove(src) T.update_action_buttons() owner = null @@ -249,4 +250,35 @@ if(owner.mind) if(target in owner.mind.spell_list) return 0 - return !(target in owner.spell_list) \ No newline at end of file + return !(target in owner.spell_list) + + //Action button controlling a mob's research examine ability. +/datum/action/scan_mode + name = "Toggle Research Scanner" + button_icon_state = "scan_mode" + check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_ALIVE + action_type = AB_INNATE + var/devices = 0 //How may enabled scanners the mob has + +/datum/action/scan_mode/Activate() + active = 1 + owner.research_scanner = 1 + owner << " Research analyzer is now active." + +/datum/action/scan_mode/Deactivate() + active = 0 + owner.research_scanner = 0 + owner << " Research analyzer deactivated." + +/datum/action/scan_mode/Grant(mob/living/T) + devices += 1 + ..(T) + +/datum/action/scan_mode/CheckRemoval(mob/living/user) + if(devices) + return 0 + return 1 + +/datum/action/scan_mode/Remove(mob/living/T) + owner.research_scanner = 0 + ..(T) diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index 6592bb3e229..763269c2af7 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -135,10 +135,9 @@ nightvisionicon.name = "night vision" nightvisionicon.screen_loc = ui_alien_nightvision - mymob.pullin = new /obj/screen() + mymob.pullin = new /obj/screen/pull() mymob.pullin.icon = 'icons/mob/screen1_alien.dmi' - mymob.pullin.icon_state = "pull0" - mymob.pullin.name = "pull" + mymob.pullin.update_icon(mymob) mymob.pullin.screen_loc = ui_pull_resist alien_plasma_display = new /obj/screen() @@ -171,4 +170,4 @@ mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.toxin, mymob.fire, mymob.healths, nightvisionicon, mymob.pullin, alien_plasma_display, mymob.pullin, mymob.blind, mymob.flash) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach ) mymob.client.screen += src.adding + src.other - mymob.client.screen += mymob.client.void \ No newline at end of file + mymob.client.screen += mymob.client.void \ No newline at end of file diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index f24d8c29c0c..4c9b7b651c1 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -56,10 +56,9 @@ nightvisionicon.name = "night vision" nightvisionicon.screen_loc = ui_alien_nightvision - mymob.pullin = new /obj/screen() + mymob.pullin = new /obj/screen/pull() mymob.pullin.icon = 'icons/mob/screen1_alien.dmi' - mymob.pullin.icon_state = "pull0" - mymob.pullin.name = "pull" + mymob.pullin.update_icon(mymob) mymob.pullin.screen_loc = ui_pull_resist mymob.blind = new /obj/screen() @@ -69,7 +68,7 @@ mymob.blind.screen_loc = "CENTER-7,CENTER-7" mymob.blind.layer = 0 mymob.blind.mouse_opacity = 0 - + mymob.flash = new /obj/screen() mymob.flash.icon = 'icons/mob/screen1_alien.dmi' mymob.flash.icon_state = "blank" diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 138af2ed822..f55951b5f37 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -422,10 +422,9 @@ mymob.nutrition_icon.name = "nutrition" mymob.nutrition_icon.screen_loc = ui_nutrition - mymob.pullin = new /obj/screen() + mymob.pullin = new /obj/screen/pull() mymob.pullin.icon = ui_style - mymob.pullin.icon_state = "pull0" - mymob.pullin.name = "pull" + mymob.pullin.update_icon(mymob) mymob.pullin.screen_loc = ui_pull_resist src.hotkeybuttons += mymob.pullin diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index e9f98c60b97..fce38a8b465 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -233,10 +233,9 @@ mymob.nutrition_icon.name = "nutrition" mymob.nutrition_icon.screen_loc = ui_nutrition - mymob.pullin = new /obj/screen() + mymob.pullin = new /obj/screen/pull() mymob.pullin.icon = ui_style - mymob.pullin.icon_state = "pull0" - mymob.pullin.name = "pull" + mymob.pullin.update_icon(mymob) mymob.pullin.screen_loc = ui_pull_resist src.hotkeybuttons += mymob.pullin @@ -299,6 +298,6 @@ mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.healthdoll, mymob.nutrition_icon, mymob.pullin, mymob.blind, mymob.flash, mymob.damageoverlay, mymob.gun_setting_icon) //, mymob.hands, mymob.rest, mymob.sleep) //, mymob.mach ) mymob.client.screen += src.adding + src.hotkeybuttons - mymob.client.screen += mymob.client.void + mymob.client.screen += mymob.client.void return diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm index a17611c99ff..e2923055324 100644 --- a/code/_onclick/hud/other_mobs.dm +++ b/code/_onclick/hud/other_mobs.dm @@ -18,10 +18,9 @@ mymob.healths.name = "health" mymob.healths.screen_loc = ui_health - mymob.pullin = new /obj/screen() + mymob.pullin = new /obj/screen/pull() mymob.pullin.icon = 'icons/mob/screen1_corgi.dmi' - mymob.pullin.icon_state = "pull0" - mymob.pullin.name = "pull" + mymob.pullin.update_icon(mymob) mymob.pullin.screen_loc = ui_construct_pull mymob.oxygen = new /obj/screen() @@ -67,4 +66,4 @@ mymob.client.screen = list() mymob.client.screen += list(blobpwrdisplay, blobhealthdisplay) - mymob.client.screen += mymob.client.void \ No newline at end of file + mymob.client.screen += mymob.client.void \ No newline at end of file diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 7fe1f4594e3..bd782657ce9 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -125,10 +125,9 @@ mymob.fire.name = "fire" mymob.fire.screen_loc = ui_fire - mymob.pullin = new /obj/screen() + mymob.pullin = new /obj/screen/pull() mymob.pullin.icon = 'icons/mob/screen1_robot.dmi' - mymob.pullin.icon_state = "pull0" - mymob.pullin.name = "pull" + mymob.pullin.update_icon(mymob) mymob.pullin.screen_loc = ui_borg_pull mymob.blind = new /obj/screen() diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 4479925d5e3..cf0f56cdad9 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -69,7 +69,7 @@ if(master) var/obj/item/I = usr.get_active_hand() if(I) - master.attackby(I, usr, params, params) + master.attackby(I, usr, params) return 1 /obj/screen/gun @@ -170,6 +170,21 @@ overlays.Cut() overlays += image('icons/mob/zone_sel.dmi', "[selecting]") +/obj/screen/pull + name = "stop pulling" + icon = 'icons/mob/screen1_Midnight.dmi' + icon_state = "pull" + +/obj/screen/pull/Click() + usr.stop_pulling() + +/obj/screen/pull/update_icon(mob/mymob) + if(!mymob) return + if(mymob.pulling) + icon_state = "pull" + else + icon_state = "pull0" + /obj/screen/Click(location, control, params) if(!usr) return 1 @@ -359,9 +374,6 @@ if("disarm") usr.a_intent = I_DISARM usr.hud_used.action_intent.icon_state = "intent_disarm" - - if("pull") - usr.stop_pulling() if("throw") if(!usr.stat && isturf(usr.loc) && !usr.restrained()) usr:toggle_throw_mode() diff --git a/code/controllers/Processes/machinery.dm b/code/controllers/Processes/machinery.dm index 8074578b323..03e2a93d675 100644 --- a/code/controllers/Processes/machinery.dm +++ b/code/controllers/Processes/machinery.dm @@ -20,15 +20,11 @@ if(machinery_sort_required) machinery_sort_required = 0 machines = dd_sortedObjectList(machines) - + /datum/controller/process/machinery/proc/process_machines() for(last_object in machines) var/obj/machinery/M = last_object if(istype(M) && isnull(M.gcDestroyed)) - #ifdef PROFILE_MACHINES - var/time_start = world.timeofday - #endif - try if(M.process() == PROCESS_KILL) machines.Remove(M) @@ -38,15 +34,6 @@ M.auto_use_power() catch(var/exception/e) catchException(e, M) - - #ifdef PROFILE_MACHINES - var/time_end = world.timeofday - - if(!(M.type in machine_profiling)) - machine_profiling[M.type] = 0 - - machine_profiling[M.type] += (time_end - time_start) - #endif else catchBadType(M) machines -= M @@ -63,9 +50,9 @@ catchException(e, powerNetwork) SCHECK continue - + powernets.Remove(powerNetwork) - + /datum/controller/process/machinery/proc/process_power_drain() // Currently only used by powersinks. These items get priority processed before machinery for(var/obj/item/I in processing_power_items) diff --git a/code/controllers/Processes/supply.dm b/code/controllers/Processes/supply.dm index aa4ba1e52ab..2c16473f990 100644 --- a/code/controllers/Processes/supply.dm +++ b/code/controllers/Processes/supply.dm @@ -1,6 +1,6 @@ /datum/controller/process/supply/setup() name = "supply" - schedule_interval = 300 // every 30 seconds + schedule_interval = 10 // every second /datum/controller/process/supply/doWork() supply_controller.process() \ No newline at end of file diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index e9d77ca626c..f356a1a9ca7 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -164,14 +164,14 @@ var/list/overflow_whitelist = list() //whitelist for overflow var/disable_away_missions = 0 // disable away missions - + var/autoconvert_notes = 0 //if all connecting player's notes should attempt to be converted to the database - + var/ooc_allowed = 1 var/looc_allowed = 1 var/dooc_allowed = 1 var/dsay_allowed = 1 - + var/disable_lobby_music = 0 // Disables the lobby music /datum/configuration/New() @@ -341,13 +341,13 @@ if ("forumurl") config.forumurl = value - + if ("rulesurl") config.rulesurl = value - + if ("donationsurl") config.donationsurl = value - + if ("repositoryurl") config.repositoryurl = value @@ -544,11 +544,11 @@ config.disable_away_missions = 1 if("autoconvert_notes") - config.autoconvert_notes = 1 + config.autoconvert_notes = 1 if("disable_lobby_music") - config.disable_lobby_music = 1 - + config.disable_lobby_music = 1 + else diary << "Unknown setting in configuration: '[name]'" @@ -678,7 +678,7 @@ var/datum/game_mode/M = new T() if (M.config_tag && M.config_tag == mode_name) return M - del(M) + qdel(M) return new /datum/game_mode/extended() /datum/configuration/proc/get_runnable_modes() @@ -687,10 +687,10 @@ var/datum/game_mode/M = new T() //world << "DEBUG: [T], tag=[M.config_tag], prob=[probabilities[M.config_tag]]" if (!(M.config_tag in modes)) - del(M) + qdel(M) continue if (probabilities[M.config_tag]<=0) - del(M) + qdel(M) continue if (M.can_start()) runnable_modes[M] = probabilities[M.config_tag] diff --git a/code/datums/gas_mixture.dm b/code/datums/gas_mixture.dm index 36f32221f0e..ae2ffe184d9 100644 --- a/code/datums/gas_mixture.dm +++ b/code/datums/gas_mixture.dm @@ -53,10 +53,6 @@ What are the archived variables for? var/tmp/fuel_burnt = 0 -/datum/gas_mixture/Destroy() - ..() - return QDEL_HINT_QUEUE - //PV=nRT - related procedures /datum/gas_mixture/proc/heat_capacity() var/heat_capacity = HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 048eaa55fd3..fc8e01984f9 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -167,18 +167,4 @@ if(istype(teleatom, /mob/living)) var/mob/living/MM = teleatom MM << "The bluespace interface on your bag of holding interferes with the teleport!" - return 1 - -/datum/teleport/instant/science/teleportChecks() - if(istype(teleatom, /obj/item/flag/nation)) // Don't let nation's flags get teleported either --Fox - teleatom.visible_message("The portal rejects [teleatom]!") - return 0 - - if(!isemptylist(teleatom.search_contents_for(/obj/item/flag/nation))) - if(istype(teleatom, /mob/living)) - var/mob/living/MM = teleatom - MM.visible_message("The portal rejects [MM]!","The flag that you're carrying seems to be unable to pass through the portal. Better drop it if you want to go through.") - else - teleatom.visible_message("The portal rejects [teleatom]!") - return 0 return 1 \ No newline at end of file diff --git a/code/datums/material_container.dm b/code/datums/material_container.dm index 5de0b6e1644..8f84812e49e 100644 --- a/code/datums/material_container.dm +++ b/code/datums/material_container.dm @@ -41,8 +41,7 @@ /datum/material_container/Destroy() owner = null - ..() - return QDEL_HINT_QUEUE + return ..() //For inserting an amount of material /datum/material_container/proc/insert_amount(amt, material_type = null) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 0d135e29bd5..0efec301d83 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -55,7 +55,6 @@ var/datum/faction/faction //associated faction var/datum/changeling/changeling //changeling holder - var/datum/nations/nation //associated nation for CTF var/datum/vampire/vampire //vampire holder var/rev_cooldown = 0 @@ -587,7 +586,7 @@ objectives.Insert(objective_pos, new_objective) else objectives += new_objective - + log_admin("[key_name(usr)] has updated [key_name(current)]'s objectives: [new_objective]") message_admins("[key_name_admin(usr)] has updated [key_name_admin(current)]'s objectives: [new_objective]") @@ -595,7 +594,7 @@ var/datum/objective/objective = locate(href_list["obj_delete"]) if(!istype(objective)) return objectives -= objective - + log_admin("[key_name(usr)] has removed one of [key_name(current)]'s objectives: [objective]") message_admins("[key_name_admin(usr)] has removed one of [key_name_admin(current)]'s objectives: [objective]") @@ -603,7 +602,7 @@ var/datum/objective/objective = locate(href_list["obj_completed"]) if(!istype(objective)) return objective.completed = !objective.completed - + log_admin("[key_name(usr)] has toggled the completion of one of [key_name(current)]'s objectives") message_admins("[key_name_admin(usr)] has toggled the completion of one of [key_name_admin(current)]'s objectives") @@ -628,7 +627,7 @@ var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected - + log_admin("[key_name(usr)] has given [key_name(current)] a loyalty implant") message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a loyalty implant") @@ -864,7 +863,7 @@ current << "Your powers are awoken. A flash of memory returns to us...we are a changeling!" log_admin("[key_name(usr)] has changelinged [key_name(current)]") message_admins("[key_name_admin(usr)] has changelinged [key_name_admin(current)]") - + if("autoobjectives") ticker.mode.forge_changeling_objectives(src) usr << "\blue The objectives for changeling [key] have been generated. You can edit them and anounce manually." @@ -901,7 +900,7 @@ current << "Your powers are awoken. Your lust for blood grows... You are a Vampire!" log_admin("[key_name(usr)] has vampired [key_name(current)]") message_admins("[key_name_admin(usr)] has vampired [key_name_admin(current)]") - + if("autoobjectives") ticker.mode.forge_vampire_objectives(src) usr << "\blue The objectives for vampire [key] have been generated. You can edit them and announce manually." @@ -961,7 +960,7 @@ return log_admin("[key_name(usr)] has equipped [key_name(current)] as a nuclear operative") message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a nuclear operative") - + if("tellcode") var/code for (var/obj/machinery/nuclearbomb/bombue in machines) @@ -1177,10 +1176,10 @@ var/list/L = current.get_contents() for (var/t in L) if (istype(t, /obj/item/device/pda)) - if (t:uplink) del(t:uplink) + if (t:uplink) qdel(t:uplink) t:uplink = null else if (istype(t, /obj/item/device/radio)) - if (t:traitorradio) del(t:traitorradio) + if (t:traitorradio) qdel(t:traitorradio) t:traitorradio = null t:traitor_frequency = 0.0 else if (istype(t, /obj/item/weapon/SWF_uplink) || istype(t, /obj/item/weapon/syndicate_uplink)) @@ -1189,7 +1188,7 @@ R.loc = current.loc R.traitorradio = null R.traitor_frequency = 0.0 - del(t) + qdel(t) // remove wizards spells //If there are more special powers that need removal, they can be procced into here./N diff --git a/code/datums/modules.dm b/code/datums/modules.dm index 896d920f994..d01bded3254 100644 --- a/code/datums/modules.dm +++ b/code/datums/modules.dm @@ -24,7 +24,8 @@ var/list/modules = list( // global associative list var/mneed = mods.inmodlist(type) // find if this type has modules defined if(!mneed) // not found in module list? - del(src) // delete self, thus ending proc + qdel(src) // delete self, thus ending proc + return var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object status = needed diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 4d0ec45eecb..2055c2790b7 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -48,8 +48,7 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown", /datum/wires/Destroy() holder = null - ..() - return QDEL_HINT_QUEUE + return ..() /datum/wires/proc/GenerateWires() var/list/colours_to_pick = wireColours.Copy() // Get a copy, not a reference. diff --git a/code/defines/procs/sd_Alert.dm b/code/defines/procs/sd_Alert.dm deleted file mode 100644 index a6927491092..00000000000 --- a/code/defines/procs/sd_Alert.dm +++ /dev/null @@ -1,168 +0,0 @@ -/* sd_Alert library - by Shadowdarke (shadowdarke@byond.com) - - sd_Alert() is a powerful and flexible alternative to the built in BYOND - alert() proc. sd_Alert offers timed popups, unlimited buttons, custom - appearance, and even the option to popup without stealing keyboard focus - from the map or command line. - - Please see demo.dm for detailed examples. - -FORMAT - sd_Alert(who, message, title, buttons, default, duration, unfocus, \ - size, table, style, tag, select, flags) - -ARGUMENTS - who - the client or mob to display the alert to. - message - text message to display - title - title of the alert box - buttons - list of buttons - Default Value: list("Ok") - default - default button selestion - Default Value: the first button in the list - duration - the number of ticks before this alert expires. If not - set, the alert lasts until a button is clicked. - Default Value: 0 (unlimited) - unfocus - if this value is set, the popup will not steal keyboard - focus from the map or command line. - Default Value: 1 (do not take focus) - size - size of the popup window in px - Default Value: "300x200" - table - optional parameters for the HTML table in the alert - Default Value: "width=100% height=100%" (fill the window) - style - optional style sheet information - tag - lets you specify a certain tag for this sd_Alert so you may manipulate it - externally. (i.e. force the alert to close, change options and redisplay, - reuse the same window, etc.) - select - if set, the buttons will be replaced with a selection box with a number of - lines displayed equal to this value. - Default value: 0 (use buttons) - flags - optional flags effecting the alert display. These flags may be ORed (|) - together for multiple effects. - SD_ALERT_SCROLL = display a scrollbar - SD_ALERT_SELECT_MULTI = forces selection box display (instead of - buttons) allows the user to select multiple - choices. - SD_ALERT_LINKS = display each choice as a plain text link. - Any selection box style overrides this flag. - SD_ALERT_NOVALIDATE = don't validate responses - Default value: SD_ALERT_SCROLL - (button display with scroll bar, validate responses) -RETURNS - The text of the selected button, or null if the alert duration expired - without a button click. - -Version 1 changes (from version 0): -* Added the tag, select, and flags arguments, thanks to several suggestions from Foomer. -* Split the sd_Alert/Alert() proc into New(), Display(), and Response() to allow more - customization by developers. Primarily developers would want to use Display() to change - the display of active tagged windows - -*/ - - -#define SD_ALERT_SCROLL 1 -#define SD_ALERT_SELECT_MULTI 2 -#define SD_ALERT_LINKS 4 -#define SD_ALERT_NOVALIDATE 8 - -proc/sd_Alert(client/who, message, title, buttons = list("Ok"),\ - default, duration = 0, unfocus = 1, size = "300x200", \ - table = "width=100% height=100%", style, tag, select, flags = SD_ALERT_SCROLL) - - if(ismob(who)) - var/mob/M = who - who = M.client - if(!istype(who)) CRASH("sd_Alert: Invalid target:[who] (\ref[who])") - - var/sd_alert/T = locate(tag) - if(T) - if(istype(T)) del(T) - else CRASH("sd_Alert: tag \"[tag]\" is already in use by datum '[T]' (type: [T.type])") - T = new(who, tag) - if(duration) - spawn(duration) - if(T) del(T) - return - T.Display(message,title,buttons,default,unfocus,size,table,style,select,flags) - . = T.Response() - -sd_alert - var - client/target - response - list/validation - - Destroy() - target << browse(null,"window=\ref[src]") - return ..() - - New(who, tag) - ..() - target = who - src.tag = tag - - Topic(href,params[]) - if(usr.client != target) return - response = params["clk"] - - proc/Display(message,title,list/buttons,default,unfocus,size,table,style,select,flags) - if(unfocus) spawn() target << browse(null,null) - if(istext(buttons)) buttons = list(buttons) - if(!default) default = buttons[1] - if(!(flags & SD_ALERT_NOVALIDATE)) validation = buttons.Copy() - - var/html = {"[title][style]\ -
[message]
"} - - if(select || (flags & SD_ALERT_SELECT_MULTI)) // select style choices - html += {"
\ - -
" - else if(flags & SD_ALERT_LINKS) // text link style - for(var/b in buttons) - var/list/L = list() - L["clk"] = b - var/html_string=list2params(L) - var/focus - if(b == default) focus = " ID=fcs" - html += "[html_encode(b)]\ -
" - else // button style choices - for(var/b in buttons) - var/list/L = list() - L["clk"] = b - var/html_string=list2params(L) - var/focus - if(b == default) focus = " ID=fcs" - html += " " - - html += "
" - - target << browse(html,"window=\ref[src];size=[size];can_close=0") - - proc/Response() - var/validated - while(!validated) - while(target && !response) // wait for a response - sleep(2) - - if(response && validation) - if(istype(response, /list)) - var/list/L = response - validation - if(L.len) response = null - else validated = 1 - else if(response in validation) validated = 1 - else response=null - else validated = 1 - spawn(2) del(src) - return response diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 45fb6697240..96bec8cbd5a 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -45,6 +45,9 @@ NOTE: there are two lists of areas in the end of this file: centcom and station var/used_equip = 0 var/used_light = 0 var/used_environ = 0 + var/static_equip + var/static_light = 0 + var/static_environ var/has_gravity = 1 var/list/apc = list() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 1f52c4f56fb..4647eeec6ba 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -43,7 +43,7 @@ for (var/obj/machinery/camera/C in src) cameras += C return cameras - + /area/proc/atmosalert(danger_level, var/alarm_source) if (danger_level == 0) @@ -66,7 +66,7 @@ atmosalm = danger_level for (var/obj/machinery/alarm/AA in src) AA.update_icon() - + air_alarm_repository.update_cache(src) return 1 air_alarm_repository.update_cache(src) @@ -108,7 +108,7 @@ updateicon() mouse_opacity = 0 air_doors_open() - + return /area/proc/burglaralert(var/obj/trigger) @@ -117,7 +117,7 @@ //Trigger alarm effect set_fire_alarm_effect() - + //Lockdown airlocks for(var/obj/machinery/door/airlock/A in src) spawn(0) @@ -128,12 +128,12 @@ burglar_alarm.triggerAlarm(src, trigger) spawn(600) burglar_alarm.clearAlarm(src, trigger) - + /area/proc/set_fire_alarm_effect() fire = 1 updateicon() mouse_opacity = 0 - + /area/proc/readyalert() if(!eject) eject = 1 @@ -251,9 +251,23 @@ used += used_environ if(TOTAL) used += used_light + used_equip + used_environ - + if(STATIC_EQUIP) + used += static_equip + if(STATIC_LIGHT) + used += static_light + if(STATIC_ENVIRON) + used += static_environ return used +/area/proc/addStaticPower(value, powerchannel) + switch(powerchannel) + if(STATIC_EQUIP) + static_equip += value + if(STATIC_LIGHT) + static_light += value + if(STATIC_ENVIRON) + static_environ += value + /area/proc/clear_usage() used_equip = 0 diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f6bcfef4171..65f79185e3a 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -34,7 +34,6 @@ if(reagents) qdel(reagents) reagents = null - set_opacity(0) invisibility = 101 return ..() @@ -237,6 +236,18 @@ its easier to just keep the beam vertical. user << "\icon[src] That's [f_name] [suffix]" user << desc + if(reagents && is_open_container()) //is_open_container() isn't really the right proc for this, but w/e + user << "It contains:" + if(reagents.reagent_list.len) + if(user.can_see_reagents()) //Show each individual reagent + for(var/datum/reagent/R in reagents.reagent_list) + user << "[R.volume] units of [R.name]" + else //Otherwise, just show the total volume + if(reagents && reagents.reagent_list.len) + user << "[reagents.total_volume] units of various reagents." + else + user << "Nothing." + return distance == -1 || (get_dist(src, user) <= distance) || isobserver(user) //observers do not have a range limit /atom/proc/relaymove() diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 0ed44c6aa10..d88ce84ae37 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -33,8 +33,7 @@ if (pulledby.pulling == src) pulledby.pulling = null pulledby = null - ..() - return QDEL_HINT_QUEUE + return ..() /atom/movable/proc/initialize() return diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 33a952ace87..b0dcf14933f 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -79,7 +79,7 @@ component_parts += new /obj/item/stack/cable_coil(null, 1) component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() - + /obj/machinery/dna_scannernew/RefreshParts() scan_level = 0 damage_coeff = 0 @@ -190,7 +190,7 @@ return if(L == user) return - visible_message("[user] puts [L.name] into the DNA Scanner.", 3) + visible_message("[user] puts [L.name] into the DNA Scanner.") put_in(L) if(user.pulling == L) user.pulling = null @@ -316,21 +316,21 @@ for(var/atom/movable/A as mob|obj in src) A.forceMove(src.loc) qdel(src) - + // Checks if occupants can be irradiated/mutated - prevents exploits where wearing full rad protection would still let you gain mutations /obj/machinery/dna_scannernew/proc/radiation_check() if(!occupant) return 1 - + if(ishuman(occupant)) var/mob/living/carbon/human/H = occupant if((H.species.flags & NO_DNA_RAD)) return 1 - + var/radiation_protection = occupant.run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm.") if (radiation_protection > NEGATE_MUTATION_THRESHOLD) return 1 - + return 0 /obj/machinery/computer/scan_consolenew @@ -445,9 +445,9 @@ if(..(user)) return - if(stat & (NOPOWER|BROKEN)) - return - + if(stat & (NOPOWER|BROKEN)) + return + ui_interact(user) /** @@ -588,10 +588,10 @@ return 1 // return 1 forces an update to all Nano uis attached to src var/radiation = (((src.radiation_intensity*3)+src.radiation_duration*3) / connected.damage_coeff) - src.connected.occupant.apply_effect(radiation,IRRADIATE,0) - if(src.connected.radiation_check()) + src.connected.occupant.apply_effect(radiation,IRRADIATE,0) + if(src.connected.radiation_check()) return 1 - + if (prob(95)) if(prob(75)) randmutb(src.connected.occupant) @@ -691,29 +691,29 @@ if (!src.connected.occupant) return 1 - + if (prob((80 + (src.radiation_duration / 2)))) var/radiation = (src.radiation_intensity+src.radiation_duration) src.connected.occupant.apply_effect(radiation,IRRADIATE,0) - + if(src.connected.radiation_check()) return 1 - + block = miniscrambletarget(num2text(selected_ui_target), src.radiation_intensity, src.radiation_duration) src.connected.occupant.dna.SetUISubBlock(src.selected_ui_block,src.selected_ui_subblock,block) src.connected.occupant.UpdateAppearance() else var/radiation = ((src.radiation_intensity*2)+src.radiation_duration) - src.connected.occupant.apply_effect(radiation,IRRADIATE,0) + src.connected.occupant.apply_effect(radiation,IRRADIATE,0) if(src.connected.radiation_check()) return 1 - + if (prob(20+src.radiation_intensity)) randmutb(src.connected.occupant) domutcheck(src.connected.occupant,src.connected) else randmuti(src.connected.occupant) - src.connected.occupant.UpdateAppearance() + src.connected.occupant.UpdateAppearance() return 1 // return 1 forces an update to all Nano uis attached to src //////////////////////////////////////////////////////// @@ -755,16 +755,16 @@ sleep(10*src.radiation_duration) // sleep for radiation_duration seconds irradiating = 0 - src.connected.locked = lock_state - - if(src.connected.occupant) + src.connected.locked = lock_state + + if(src.connected.occupant) if (prob((80 + ((src.radiation_duration / 2) + (connected.precision_coeff ** 3))))) var/radiation = ((src.radiation_intensity+src.radiation_duration) / connected.damage_coeff) - src.connected.occupant.apply_effect(radiation,IRRADIATE,0) - + src.connected.occupant.apply_effect(radiation,IRRADIATE,0) + if(src.connected.radiation_check()) return 1 - + var/real_SE_block=selected_se_block block = miniscramble(block, src.radiation_intensity, src.radiation_duration) if(prob(20)) @@ -782,7 +782,7 @@ if(src.connected.radiation_check()) return 1 - + if (prob(80-src.radiation_duration)) //testing("Random bad mut!") randmutb(src.connected.occupant) @@ -893,8 +893,8 @@ src.connected.locked = lock_state var/radiation = (rand(20,50) / connected.damage_coeff) - src.connected.occupant.apply_effect(radiation,IRRADIATE,0) - + src.connected.occupant.apply_effect(radiation,IRRADIATE,0) + if(src.connected.radiation_check()) return 1 diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm index d74379c3d8b..3ce2abb549e 100644 --- a/code/game/dna/genes/powers.dm +++ b/code/game/dna/genes/powers.dm @@ -96,7 +96,8 @@ /datum/dna/gene/basic/midget name="Midget" - activation_messages=list("Your skin feels rubbery.") + activation_messages=list("Everything around you seems bigger now...") + deactivation_messages = list("Everything around you seems to shrink...") mutation=DWARF instability=1 @@ -111,8 +112,13 @@ activate(var/mob/M, var/connected, var/flags) ..(M,connected,flags) - M.pass_flags |= 1 + M.pass_flags |= PASSTABLE + M.resize = 0.8 + deactivate(var/mob/M, var/connected, var/flags) + ..() + M.pass_flags &= ~PASSTABLE + M.resize = 1.25 // OLD HULK BEHAVIOR /datum/dna/gene/basic/hulk diff --git a/code/game/gamemodes/borer/borer.dm b/code/game/gamemodes/borer/borer.dm index 6ec8a9f7888..ebebe739f5a 100644 --- a/code/game/gamemodes/borer/borer.dm +++ b/code/game/gamemodes/borer/borer.dm @@ -94,7 +94,7 @@ M.perform_infestation(first_host.current) forge_borer_objectives(borer, first_host) - del(original) + qdel(original) log_admin("Created [borers.len] borers.") diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 8759aef079f..a46f6bac8a5 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -43,7 +43,6 @@ /obj/item/clothing/head/culthood/alt icon_state = "cult_hoodalt" item_state = "cult_hoodalt" - loose = 5 // one size fits all /obj/item/clothing/suit/cultrobes/alt icon_state = "cultrobesalt" @@ -69,7 +68,6 @@ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR armor = list(melee = 30, bullet = 30, laser = 30,energy = 20, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0 - loose = 6 // mostly one size fits all /obj/item/clothing/suit/magusred name = "magus robes" diff --git a/code/game/gamemodes/epidemic/epidemic.dm b/code/game/gamemodes/epidemic/epidemic.dm deleted file mode 100644 index e64100e2a12..00000000000 --- a/code/game/gamemodes/epidemic/epidemic.dm +++ /dev/null @@ -1,224 +0,0 @@ -/datum/game_mode/epidemic - name = "epidemic" - config_tag = "epidemic" - required_players = 1 - required_players_secret = 15 - - var/const/waittime_l = 300 //lower bound on time before intercept arrives (in tenths of seconds) - var/const/waittime_h = 600 //upper bound on time before intercept arrives (in tenths of seconds) - var/checkwin_counter =0 - var/finished = 0 - - var/cruiser_arrival - - var/virus_name = "" - - var/stage = 0 - var/doctors = 0 - -/////////////////////////// -//Announces the game type// -/////////////////////////// -/datum/game_mode/epidemic/announce() - world << "The current game mode is - Epidemic!" - world << "A deadly epidemic is spreading on the station. Find a cure as fast as possible, and keep your distance to anyone who speaks in a hoarse voice!" - - -/////////////////////////////////////////////////////////////////////////////// -//Gets the round setup, cancelling if there's not enough players at the start// -/////////////////////////////////////////////////////////////////////////////// -/datum/game_mode/epidemic/pre_setup() - doctors = 0 - for(var/mob/new_player/player in world) - if(player.mind.assigned_role in list("Chief Medical Officer","Medical Doctor")) - doctors++ - break - - if(doctors < 1) - return 0 - - return 1 - -/datum/game_mode/epidemic/proc/cruiser_seconds() - return (cruiser_arrival - world.time) / 10 - -////////////////////// INTERCEPT //////////////////////// -/// OVERWRITE THE INTERCEPT WITH A QUARANTINE WARNING /// -///////////////////////////////////////////////////////// - -/datum/game_mode/epidemic/send_intercept() - var/intercepttext = "CONFIDENTIAL REPORT
" - virus_name = "X-[rand(1,99)]™" - intercepttext += "Warning: Pathogen [virus_name] has been detected on [station_name()].

" - intercepttext += "Code violet quarantine of [station_name()] put under immediate effect.
" - intercepttext += "Class [rand(2,5)] cruiser has been dispatched. ETA: [round(cruiser_seconds() / 60)] minutes.
" - intercepttext += "
Instructions
" - intercepttext += "* ELIMINATE THREAT WITH EXTREME PREJUDICE. [virus_name] IS HIGHLY CONTAGIOUS. INFECTED CREW MEMBERS MUST BE QUARANTINED IMMEDIATELY.
" - intercepttext += "* [station_name()] is under QUARANTINE. Any vessels outbound from [station_name()] will be tracked down and destroyed.
" - intercepttext += "* The existence of [virus_name] is highly confidential. To prevent a panic, only high-ranking staff members are authorized to know of its existence. Crew members that illegally obtained knowledge of [virus_name] are to be neutralized.
" - intercepttext += "* A cure is to be researched immediately, but Nanotrasen intellectual property must be respected. To prevent knowledge of [virus_name] from falling into unauthorized hands, all medical staff that work with the pathogen must be enhanced with a Nanotrasen loyality implant.
" - - - for (var/obj/machinery/computer/communications/comm in world) - if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) - var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) - intercept.name = "paper" - intercept.info = intercepttext - - comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT") - comm.messagetext.Add(intercepttext) - - world << sound('sound/AI/commandreport.ogg') - - // add an extra law to the AI to make sure it cooperates with the heads - var/extra_law = "Crew authorized to know of pathogen [virus_name]'s existence are: Heads of command, any crew member with loyalty implant. Do not allow unauthorized personnel to gain knowledge of [virus_name]. Aid authorized personnel in quarantining and neutrlizing the outbreak. This law overrides all other laws." - for(var/mob/living/silicon/ai/M in world) - M.add_ion_law(extra_law) - M << "\red " + extra_law - -/datum/game_mode/epidemic/proc/announce_to_kill_crew() - var/intercepttext = "CONFIDENTIAL REPORT
" - intercepttext += "PATHOGEN [virus_name] IS STILL PRESENT ON [station_name()]. IN COMPLIANCE WITH NANOTRASEN LAWS FOR INTERSTELLAR SAFETY, EMERGENCY SAFETY MEASURES HAVE BEEN AUTHORIZED. ALL INFECTED CREW MEMBERS ON [station_name()] ARE TO BE NEUTRALIZED AND DISPOSED OF IN A MANNER THAT WILL DESTROY ALL TRACES OF THE PATHOGEN. FAILURE TO COMPLY WILL RESULT IN IMMEDIATE DESTRUCTION OF [station_name].
" - intercepttext += "CRUISER WILL ARRIVE IN [round(cruiser_seconds()/60)] MINUTES
" - - for (var/obj/machinery/computer/communications/comm in world) - if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) - var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) - intercept.name = "paper" - intercept.info = intercepttext - - comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT") - comm.messagetext.Add(intercepttext) - world << sound('sound/AI/commandreport.ogg') - - -/datum/game_mode/epidemic/post_setup() - // make sure viral outbreak events don't happen on this mode - EventTypes.Remove(/datum/event/viralinfection) - - // scan the crew for possible infectees - var/list/crew = list() - for(var/mob/living/carbon/human/H in world) if(H.client) - // heads should not be infected - if(H.mind.assigned_role in command_positions) continue - crew += H - - if(crew.len < 2) - world << "\red There aren't enough players for this mode!" - world << "\red Rebooting world in 5 seconds." - - if(blackbox) - blackbox.save_all_data_to_sql() - sleep(50) - world.Reboot() - - var/datum/disease2/disease/lethal = new - lethal.makerandom(1) - lethal.infectionchance = 5 - - // the more doctors, the more will be infected - var/lethal_amount = doctors * 2 - - // keep track of initial infectees - var/list/infectees = list() - - for(var/i = 0, i < lethal_amount, i++) - var/mob/living/carbon/human/H = pick(crew) - if(lethal.uniqueID in H.virus2) - i-- - continue - H.virus2["[lethal.uniqueID]"] = lethal.getcopy() - infectees += H - - var/mob/living/carbon/human/patient_zero = pick(infectees) - var/datum/disease2/disease/V = patient_zero.virus2["[lethal.uniqueID]"] - V.stage = 3 - - cruiser_arrival = world.time + (10 * 90 * 60) - stage = 1 - - spawn (rand(waittime_l, waittime_h)) - send_intercept() - - - ..() - - -/datum/game_mode/epidemic/process() - if(stage == 1 && cruiser_seconds() < 60 * 30) - announce_to_kill_crew() - stage = 2 - else if(stage == 2 && cruiser_seconds() <= 60 * 5) - command_announcement.Announce("Inbound cruiser detected on collision course. Scans indicate the ship to be armed and ready to fire. Estimated time of arrival: 5 minutes.", "[station_name()] Early Warning System") - stage = 3 - else if(stage == 3 && cruiser_seconds() <= 0) - crew_lose() - stage = 4 - - checkwin_counter++ - if(checkwin_counter >= 20) - if(!finished) - ticker.mode.check_win() - checkwin_counter = 0 - return 0 - -////////////////////////////////////// -//Checks if the revs have won or not// -////////////////////////////////////// -/datum/game_mode/epidemic/check_win() - var/alive = 0 - var/sick = 0 - for(var/mob/living/carbon/human/H in world) - if(H.key && H.stat != 2) alive++ - if(H.virus2.len && H.stat != 2) sick++ - - if(alive == 0) - finished = 2 - if(sick == 0) - finished = 1 - return - -/////////////////////////////// -//Checks if the round is over// -/////////////////////////////// -/datum/game_mode/epidemic/check_finished() - if(finished != 0) - return 1 - else - return 0 - -/////////////////////////////////////////// -///Handle crew failure(station explodes)/// -/////////////////////////////////////////// -/datum/game_mode/epidemic/proc/crew_lose() - ticker.mode:explosion_in_progress = 1 - for(var/mob/M in world) - if(M.client) - M << 'sound/machines/Alarm.ogg' - world << "\blueIncoming missile detected.. Impact in 10.." - for (var/i=9 to 1 step -1) - sleep(10) - world << "\blue[i].." - sleep(10) - enter_allowed = 0 - if(ticker) - ticker.station_explosion_cinematic(0,null) - if(ticker.mode) - ticker.mode:station_was_nuked = 1 - ticker.mode:explosion_in_progress = 0 - finished = 2 - return - - -////////////////////////////////////////////////////////////////////// -//Announces the end of the game with all relavent information stated// -////////////////////////////////////////////////////////////////////// -/datum/game_mode/epidemic/declare_completion() - if(finished == 1) - feedback_set_details("round_end_result","win - epidemic cured") - world << "\red The virus outbreak was contained! The crew wins!" - else if(finished == 2) - feedback_set_details("round_end_result","loss - rev heads killed") - world << "\red The crew succumbed to the epidemic!" - ..() - return 1 \ No newline at end of file diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index eab6a665646..17f02d42fbe 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -103,7 +103,7 @@ var/global/datum/controller/gameticker/ticker can_continue = src.mode.pre_setup()//Setup special modes job_master.DivideOccupations() //Distribute jobs if(!can_continue) - del(mode) + qdel(mode) current_state = GAME_STATE_PREGAME world << "Error setting up [master_mode]. Reverting to pre-game lobby." job_master.ResetOccupations() @@ -138,7 +138,7 @@ var/global/datum/controller/gameticker/ticker for(var/obj/effect/landmark/start/S in landmarks_list) //Deleting Startpoints but we need the ai point to AI-ize people later if (S.name != "AI") - del(S) + qdel(S) // take care of random spesspod spawning var/list/obj/effect/landmark/spacepod/random/L = list() @@ -149,7 +149,7 @@ var/global/datum/controller/gameticker/ticker var/obj/effect/landmark/spacepod/random/S = pick(L) new /obj/spacepod/random(S.loc) for(var/obj/effect/landmark/spacepod/random/R in L) - del(R) + qdel(R) world << "Enjoy the game!" world << sound('sound/AI/welcome.ogg') // Skie diff --git a/code/game/gamemodes/meme/meme.dm b/code/game/gamemodes/meme/meme.dm deleted file mode 100644 index 0f9bb44babe..00000000000 --- a/code/game/gamemodes/meme/meme.dm +++ /dev/null @@ -1,181 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04 - -/datum/game_mode/var/list/memes = list() - -/datum/game_mode/meme - name = "Memetic Anomaly" - config_tag = "meme" - required_players = 3 - required_players_secret = 10 - restricted_jobs = list("AI", "Cyborg") - recommended_enemies = 2 // need at least a meme and a host - votable = 0 // temporarily disable this mode for voting - - - - var/var/list/datum/mind/first_hosts = list() - var/var/list/assigned_hosts = list() - - var/const/prob_int_murder_target = 50 // intercept names the assassination target half the time - var/const/prob_right_murder_target_l = 25 // lower bound on probability of naming right assassination target - var/const/prob_right_murder_target_h = 50 // upper bound on probability of naimg the right assassination target - - var/const/prob_int_item = 50 // intercept names the theft target half the time - var/const/prob_right_item_l = 25 // lower bound on probability of naming right theft target - var/const/prob_right_item_h = 50 // upper bound on probability of naming the right theft target - - var/const/prob_int_sab_target = 50 // intercept names the sabotage target half the time - var/const/prob_right_sab_target_l = 25 // lower bound on probability of naming right sabotage target - var/const/prob_right_sab_target_h = 50 // upper bound on probability of naming right sabotage target - - var/const/prob_right_killer_l = 25 //lower bound on probability of naming the right operative - var/const/prob_right_killer_h = 50 //upper bound on probability of naming the right operative - var/const/prob_right_objective_l = 25 //lower bound on probability of determining the objective correctly - var/const/prob_right_objective_h = 50 //upper bound on probability of determining the objective correctly - - var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) - var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) - -/datum/game_mode/meme/announce() - world << "The current game mode is - Meme!" - world << "An unknown creature has infested the mind of a crew member. Find and destroy it by any means necessary." - -/datum/game_mode/meme/can_start() - if(!..()) - return 0 - - // for every 10 players, get 1 meme, and for each meme, get a host - // also make sure that there's at least one meme and one host - recommended_enemies = max(src.num_players() / 20 * 2, 2) - - var/list/datum/mind/possible_memes = get_players_for_role(BE_MEME) - - if(possible_memes.len < 2) - log_admin("MODE FAILURE: MEME. NOT ENOUGH MEME CANDIDATES.") - return 0 // not enough candidates for meme - - // for each 2 possible memes, add one meme and one host - while(possible_memes.len >= 2) - var/datum/mind/meme = pick(possible_memes) - possible_memes.Remove(meme) - - var/datum/mind/first_host = pick(possible_memes) - possible_memes.Remove(first_host) - - modePlayer += meme - modePlayer += first_host - memes += meme - first_hosts += first_host - - // so that we can later know which host belongs to which meme - assigned_hosts[meme.key] = first_host - - meme.assigned_role = "MODE" //So they aren't chosen for other jobs. - meme.special_role = "Meme" - - return 1 - -/datum/game_mode/meme/pre_setup() - return 1 - - -/datum/game_mode/meme/post_setup() - // create a meme and enter it - for(var/datum/mind/meme in memes) - var/mob/living/parasite/meme/M = new - var/mob/original = meme.current - meme.transfer_to(M) - M.clearHUD() - - // get the host for this meme - var/datum/mind/first_host = assigned_hosts[meme.key] - // this is a redundant check, but I don't think the above works.. - // if picking hosts works with this method, remove the method above - if(!first_host) - first_host = pick(first_hosts) - first_hosts.Remove(first_host) - M.enter_host(first_host.current) - forge_meme_objectives(meme, first_host) - - del original - - log_admin("Created [memes.len] memes.") - - spawn (rand(waittime_l, waittime_h)) - send_intercept() - ..() - return - - -/datum/game_mode/proc/forge_meme_objectives(var/datum/mind/meme, var/datum/mind/first_host) - // meme always needs to attune X hosts - var/datum/objective/meme_attune/attune_objective = new - attune_objective.owner = meme - attune_objective.gen_amount_goal(3,6) - meme.objectives += attune_objective - - // generate some random objectives, use standard traitor objectives - var/job = first_host.assigned_role - - for(var/datum/objective/o in SelectObjectives(job, meme)) - o.owner = meme - meme.objectives += o - - greet_meme(meme) - - return - -/datum/game_mode/proc/greet_meme(var/datum/mind/meme, var/you_are=1) - if (you_are) - meme.current << "\red You are a meme!" - - var/obj_count = 1 - for(var/datum/objective/objective in meme.objectives) - meme.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - return - -/datum/game_mode/meme/check_finished() - var/memes_alive = 0 - for(var/datum/mind/meme in memes) - if(!istype(meme.current,/mob/living)) - continue - if(meme.current.stat==2) - continue - memes_alive++ - - if (memes_alive) - return ..() - else - return 1 - -/datum/game_mode/proc/auto_declare_completion_meme() - for(var/datum/mind/meme in memes) - var/memewin = 1 - var/attuned = 0 - if((meme.current) && istype(meme.current,/mob/living/parasite/meme)) - world << "The meme was [meme.current.key]." - world << "The last host was [meme.current:host.key]." - world << "Hosts attuned: [attuned]" - - var/count = 1 - for(var/datum/objective/objective in meme.objectives) - if(objective.check_completion()) - world << "Objective #[count]: [objective.explanation_text] \green Success" - feedback_add_details("meme_objective","[objective.type]|SUCCESS") - else - world << "Objective #[count]: [objective.explanation_text] \red Failed" - feedback_add_details("meme_objective","[objective.type]|FAIL") - memewin = 0 - count++ - - else - memewin = 0 - - if(memewin) - world << "The meme was successful!" - feedback_add_details("meme_success","SUCCESS") - else - world << "The meme has failed!" - feedback_add_details("meme_success","FAIL") - return 1 diff --git a/code/game/gamemodes/mutiny/key_pinpointer.dm b/code/game/gamemodes/mutiny/key_pinpointer.dm index 9bee2b92c92..4d4596ab229 100644 --- a/code/game/gamemodes/mutiny/key_pinpointer.dm +++ b/code/game/gamemodes/mutiny/key_pinpointer.dm @@ -33,17 +33,3 @@ user << "It is calibrated for the Emergency Secondary Authentication Key." else user << "It is switched off." - -/datum/supply_packs/key_pinpointer - name = "Authentication Key Pinpointer crate" - contains = list(/obj/item/weapon/pinpointer/advpinpointer/auth_key) - cost = 250 - containertype = /obj/structure/closet/crate - containername = "Authentication Key Pinpointer crate" - access = access_heads - group = "Operations" - - New() - // This crate is only accessible during mutiny rounds - if (istype(ticker.mode,/datum/game_mode/mutiny)) - ..() diff --git a/code/game/gamemodes/nations/flag_pinpointer.dm b/code/game/gamemodes/nations/flag_pinpointer.dm deleted file mode 100644 index 776932bbb7b..00000000000 --- a/code/game/gamemodes/nations/flag_pinpointer.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/item/weapon/pinpointer/advpinpointer/flag - name = "\improper Flag Pinpointer" - desc = "Tracks the position of every nation's flag." - -/obj/item/weapon/pinpointer/advpinpointer/flag/attack_self() - switch(mode) - if (0) - mode = 1 - active = 1 - target = locate(/obj/item/flag/nation/atmos) - point_at(target) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (1) - mode = 2 - target = locate(/obj/item/flag/nation/sec) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (2) - mode = 3 - target = locate(/obj/item/flag/nation/cargo) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (3) - mode = 4 - target = locate(/obj/item/flag/nation/command) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (4) - mode = 5 - target = locate(/obj/item/flag/nation/med) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (5) - mode = 6 - target = locate(/obj/item/flag/nation/rnd) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - else - mode = 0 - active = 0 - icon_state = "pinoff" - usr << "\blue You switch \the [src] off." - -/obj/item/weapon/pinpointer/advpinpointer/flag/examine(mob/user) - switch(mode) - if (1) - user << "Is is calibrated for the [target.name]" - if (2) - user << "Is is calibrated for the [target.name]" - if (3) - user << "Is is calibrated for the [target.name]" - if (4) - user << "Is is calibrated for the [target.name]" - if (5) - user << "Is is calibrated for the [target.name]" - else - user << "It is switched off." - -/datum/supply_packs/key_pinpointer_nations - name = "Nations Flag Pinpointer crate" - contains = list(/obj/item/weapon/pinpointer/advpinpointer/flag) - cost = 20 - containertype = /obj/structure/closet/crate - containername = "Nations Flag Pinpointer crate" - access = access_heads - group = "Operations" - - New() - if (istype(ticker.mode,/datum/game_mode/nations)) - ..() diff --git a/code/game/gamemodes/nations/flagprocs.dm b/code/game/gamemodes/nations/flagprocs.dm deleted file mode 100644 index aa516de1f3d..00000000000 --- a/code/game/gamemodes/nations/flagprocs.dm +++ /dev/null @@ -1,142 +0,0 @@ -/obj/item/flag/nation - density = 1 - anchored = 1 - var/turf/startloc = null - var/captured = 0 - var/list/vassals = list() - var/datum/nations/liege = null - var/datum/nations/nation = null - -/obj/item/flag/nation/New() - ..() - flag_list += src - -/obj/item/flag/nation/fire_act() - return - -/obj/item/flag/nation/Ignite() - return - -/obj/item/flag/nation/light() - return - -/obj/item/flag/nation/attackby(var/obj/item/weapon/W, var/mob/user, params) - return - - -/obj/item/flag/nation/ex_act() - return - -/obj/item/flag/nation/blob_act() - return - - -/obj/item/flag/nation/attack_hand(mob/user as mob) - if(user.mind) - if(user.mind.nation) - var/obj/item/flag/nation/F = locate(user.mind.nation.flagpath) - if(istype(user.mind.nation,nation)) //Same team as flag - if(liege && liege == F.liege) - user << "You can't steal your liege's flags!" - return - else if(loc != startloc) - loc = startloc - user.visible_message("[user] sends [src] back to base!", "You return [src] to your base!") - return - else - user << "You can't move your flag from it's home location!" - return - else - if(captured && Adjacent(F.startloc)) - user << "This flag has already been captured by your team!" - return - else if(..()) - captured = 0 - anchored = 0 - var/obj/item/flag/nation/N = null - if(liege) - N = locate(liege.flagpath) - for(var/mob/living/carbon/human/H in player_list) - if(H.mind && H.mind.nation && liege && nation) - if(H.mind.nation.name == liege.name) //we have to check based on the name var since they will be different instances of the nation datum - H.mind.current << "You are no longer the liege of [nation]!" - if(H.mind.nation.name == nation.name) - H.mind.current << "You are no longer vassals of [liege]!" - if(N) - N.vassals -= nation - liege = null - else - user << "You are not part of a nation and therefore cannot pick up any flags!" - return - return - -/obj/item/flag/nation/dropped(mob/user as mob) - ..() - spawn(20) - anchored = 1 - var/obj/item/flag/nation/F = locate(user.mind.nation.flagpath) - if(F.loc != F.startloc) return - for(var/obj/item/flag/nation/S in orange(1,F.startloc)) - if(S == src) - captured = 1 - liege = F.nation - F.vassals += nation - //Announce capture/vassalage here. - for(var/mob/living/carbon/human/H in player_list) - if(H.mind && H.mind.nation && F.nation && nation) - if(H.mind.nation.name == F.nation.name) - H.mind.current << "You have just vassalized [nation]! They must now obey any members of your nation!" - continue - if(H.mind.nation.name == nation.name) - H.mind.current << "You are now vassals of [liege]! You must now obey the orders of any of their members!" - continue - //Check for Victory - for(var/obj/item/flag/nation/N in flag_list) - if(F.nation && N.nation) - if(F.nation.name == N.nation.name) - continue - if(N.liege && F.nation) - if(N.captured && N.liege.name == F.nation.name) - continue - else - return - ticker.mode.declare_completion(F.nation) - - - -//Nations/Department flags --Nations Gamemode Specific -/obj/item/flag/nation/cargo - name = "Cargonia flag" - desc = "The flag of the independent, sovereign nation of Cargonia." - icon_state = "cargoflag" - nation = new /datum/nations/cargonia - -/obj/item/flag/nation/med - name = "Medistan flag" - desc = "The flag of the independent, sovereign nation of Medistan." - icon_state = "medflag" - nation = new /datum/nations/medistan - -/obj/item/flag/nation/sec - name = "Brigston flag" - desc = "The flag of the independent, sovereign nation of Brigston." - icon_state = "secflag" - nation = new /datum/nations/brigston - -/obj/item/flag/nation/rnd - name = "Scientopia flag" - desc = "The flag of the independent, sovereign nation of Scientopia." - icon_state = "rndflag" - nation = new /datum/nations/scientopia - -/obj/item/flag/nation/atmos - name = "Atmosia flag" - desc = "The flag of the independent, sovereign nation of Atmosia." - icon_state = "atmosflag" - nation = new /datum/nations/atmosia - -/obj/item/flag/nation/command - name = "People's Republic of Commandzakstan flag" - desc = "The flag of the independent, sovereign nation of the People's Republic of Commandzakstan." - icon_state = "ntflag" - nation = new /datum/nations/command \ No newline at end of file diff --git a/code/game/gamemodes/nations/nationdatums.dm b/code/game/gamemodes/nations/nationdatums.dm deleted file mode 100644 index 27ccb2ed2cc..00000000000 --- a/code/game/gamemodes/nations/nationdatums.dm +++ /dev/null @@ -1,30 +0,0 @@ -/datum/nations - var/name - var/flagpath - -/datum/nations/atmosia - name = "Atmosia" - flagpath = /obj/item/flag/nation/atmos - -/datum/nations/brigston - name = "Brigston" - flagpath = /obj/item/flag/nation/sec - -/datum/nations/cargonia - name = "Cargonia" - flagpath = /obj/item/flag/nation/cargo - -/datum/nations/command - name = "People's Republic of Commandzakstan" - flagpath = /obj/item/flag/nation/command - -/datum/nations/medistan - name = "Medistan" - flagpath = /obj/item/flag/nation/med - -/datum/nations/scientopia - name = "Scientopia" - flagpath = /obj/item/flag/nation/rnd - - - diff --git a/code/game/gamemodes/nations/nations.dm b/code/game/gamemodes/nations/nations.dm deleted file mode 100644 index 9efc2e4f6f4..00000000000 --- a/code/game/gamemodes/nations/nations.dm +++ /dev/null @@ -1,439 +0,0 @@ -var/global/no_synthetic = 0 - -datum/game_mode/nations - name = "nations" - config_tag = "nations" - required_players_secret = 25 - var/const/waittime_l = 1200 //lower bound on time before intercept arrives (in tenths of seconds) - var/const/waittime_h = 3000 //upper bound on time before intercept arrives (in tenths of seconds) - var/kickoff = 0 - var/victory = 0 - var/list/cargonians = list("Quartermaster","Cargo Technician","Shaft Miner") - -/datum/game_mode/nations/pre_pre_setup() - no_synthetic = 1 - -/datum/game_mode/nations/post_setup() - spawn (rand(waittime_l, waittime_h)) - remove_flags() - spawn(50) - kickoff=1 - send_intercept() - split_teams() - spawn_flags() - populate_vars() - for(var/mob/M in player_list) - if(!istype(M,/mob/new_player)) - M << sound('sound/effects/purge_siren.ogg') - return ..() - -/datum/game_mode/nations/send_intercept() - command_announcement.Announce("Due to recent and COMPLETELY UNFOUNDED allegations of massive fraud and insider trading \ - affecting trillions of investors, the Nanotrasen Corporation has decided to liquidate all \ - assets of the Centcom Division in order to pay the massive legal fees that will be incurred \ - during the following centuries long court process. Therefore, all current employment contracts \ - are IMMEDIATELY TERMINATED. Nanotrasen will be unable to send a rescue shuttle to carry you home,\ - however they remain willing for the time being to continue trading cargo. Have a pleasant \ - day.", "FINAL TRANSMISSION, CENTCOM COMMAND.") - - - -/datum/game_mode/nations/proc/remove_flags() - for(var/obj/item/flag/F in world) - qdel(F) - -/datum/game_mode/nations/proc/spawn_flags() - - for(var/obj/effect/landmark/nations/N in landmarks_list) - switch(N.name) - if("Atmosia") - new /obj/item/flag/nation/atmos(get_turf(N)) - if("Brigston") - new /obj/item/flag/nation/sec(get_turf(N)) - if("Cargonia") - new /obj/item/flag/nation/cargo(get_turf(N)) - if("People's Republic of Commandzakstan") - new /obj/item/flag/nation/command(get_turf(N)) - if("Medistan") - new /obj/item/flag/nation/med(get_turf(N)) - if("Scientopia") - new /obj/item/flag/nation/rnd(get_turf(N)) - -/datum/game_mode/nations/proc/split_teams() - - for(var/mob/living/carbon/human/H in player_list) - if(H.mind) - if(H.mind.assigned_role in engineering_positions) - H.mind.nation = all_nations["Atmosia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in medical_positions) - H.mind.nation = all_nations["Medistan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in science_positions) - H.mind.nation = all_nations["Scientopia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in security_positions) - H.mind.nation = all_nations["Brigston"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in cargonians) - H.mind.nation = all_nations["Cargonia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in support_positions) - H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in command_positions) - H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else - message_admins("[H.name] with [H.mind.assigned_role] could not find any nation to assign!") - continue - -/datum/game_mode/nations/proc/populate_vars() - for(var/obj/effect/landmark/nations/N in landmarks_list) - switch(N.name) - if("Atmosia") - for(var/obj/item/flag/nation/atmos/A in flag_list) - A.startloc = get_turf(N) - continue - if("Brigston") - for(var/obj/item/flag/nation/sec/B in flag_list) - B.startloc = get_turf(N) - continue - if("Cargonia") - for(var/obj/item/flag/nation/cargo/C in flag_list) - C.startloc = get_turf(N) - continue - if("People's Republic of Commandzakstan") - for(var/obj/item/flag/nation/command/D in flag_list) - D.startloc = get_turf(N) - continue - if("Medistan") - for(var/obj/item/flag/nation/med/M in flag_list) - M.startloc = get_turf(N) - continue - if("Scientopia") - for(var/obj/item/flag/nation/rnd/S in flag_list) - S.startloc = get_turf(N) - continue - -/datum/game_mode/nations/check_finished() - if(victory) - return 1 - return 0 - -/datum/game_mode/nations/declare_completion(var/datum/nations/N) - world << "[N.name] has captured all of the station. All glory to [N.name]" - victory = 1 - - - -/mob/proc/nations_status() - set category = "OOC" - set name = "Nation Status" - set desc = "Information on your nation and your allies." - - if (!( ticker )) return - if (ticker.mode.name != "nations") return - if(!mind) return - if(!mind.nation) return - - var/obj/item/flag/nation/F = locate(mind.nation.flagpath) - - var/dat = "Nation Status

Nation Status

" - - dat += "You are part of the nation of [mind.nation.name].
" - dat += "You -cannot- defect to another nation. Doing so or helping
" - dat += "another nation you are not a vassal of is bannable.
" - - dat += "
" - if(F.liege) - dat += "You are currently the vassal of [F.liege.name] and must obey
" - dat += "the commands of ANY of their members.
" - else - dat += "You are not currently vassalized by anyone! Protect your flag!
" - dat += "
Liege
" - - dat += "
" - if(F.vassals.len) - for(var/datum/nations/V in F.vassals) - dat += "[V.name] is your vassal and must obey the commands of ANY of your members." - else - dat += "You do not currently have any vassals! Capture flags to vassalize!
" - dat += "
Vassals
" - dat += "
" - dat += "The following are considered OUTLAWED by the Geneva Space Convention and will result" - dat += "in severe consequences if used in warfare:
" - dat += "Scientopia - Large Scale Bombs - Nuclear Warfare" - dat += "Atmosia - Using atmos as a weapon - Chemical Warfare" - dat += "Medistan - Releasing harmful viruses - Biological Warfare" - dat += "
Geneva Space Convention
" - - dat += "" - usr << browse(dat, "window=nationstatus;size=400x500") - -/mob/proc/respawn_self() - set category = "OOC" - set name = "Respawn Character" - set desc = "Respawn yourself (15 minute cooldown)." - - if (!( ticker )) - usr << "\blue The round hasn't started!" - return - if(stat!=2) - usr << "\blue You must be dead to respawn." - return - if (ticker.mode.name != "nations") - usr << "\blue Respawn is disabled." - return - if(!mind) - return - if(!mind.nation) - src << "It appears you're not part of a nation. Use Respawn as NPC instead." - return - if(!mind.assigned_role) - src << "It appears you're not part of a nation. Use Respawn as NPC instead." - return - if(!mind.assigned_role in get_all_jobs()) - src << "It appears you're not part of a nation. Use Respawn as NPC instead." - return - if(mind.special_role) - src << "It appears you beame an antag and are longer part of a nation. Use Respawn as NPC instead." - return - else - var/deathtime = world.time - src.timeofdeath - var/deathtimeminutes = round(deathtime / 600) - var/pluralcheck = "minute" - if(deathtimeminutes == 0) - pluralcheck = "" - else if(deathtimeminutes == 1) - pluralcheck = " [deathtimeminutes] minute and" - else if(deathtimeminutes > 1) - pluralcheck = " [deathtimeminutes] minutes and" - var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1) - usr << "You have been dead for[pluralcheck] [deathtimeseconds] seconds." - if (deathtime < 9000) - usr << "You must wait 15 minutes to respawn!" - return - else - - //Ok, it's not a xeno or a monkey. So, spawn a human. - var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned. - - var/datum/data/record/record_found //Referenced to later to either randomize or not randomize the character. - if(mind) //mind isn't currently in use by someone/something - /*Try and locate a record for the person being respawned through data_core. - This isn't an exact science but it does the trick more often than not.*/ - var/id = md5("[real_name][mind.assigned_role]") - for(var/datum/data/record/t in data_core.locked) - if(t.fields["id"]==id) - record_found = t//We shall now reference the record. - break - - if(record_found)//If they have a record we can determine a few things. - new_character.real_name = record_found.fields["name"] - new_character.gender = record_found.fields["sex"] - new_character.age = record_found.fields["age"] - new_character.b_type = record_found.fields["b_type"] - else - new_character.gender = pick(MALE,FEMALE) - var/datum/preferences/A = new() - A.copy_to(new_character) - - if(!new_character.real_name) - if(new_character.gender == MALE) - new_character.real_name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) - else - new_character.real_name = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) - new_character.name = new_character.real_name - - if(mind) - mind.transfer_to(new_character) //be careful when doing stuff like this! I've already checked the mind isn't in use - new_character.mind.special_verbs = list() - else - new_character.mind_initialize() - if(!new_character.mind.assigned_role) new_character.mind.assigned_role = "Civilian"//If they somehow got a null assigned role. - - //DNA - if(record_found)//Pull up their name from database records if they did have a mind. - new_character.dna = new()//Let's first give them a new DNA. - new_character.dna.unique_enzymes = record_found.fields["b_dna"]//Enzymes are based on real name but we'll use the record for conformity. - - // I HATE BYOND. HATE. HATE. - N3X - var/list/newSE= record_found.fields["enzymes"] - var/list/newUI = record_found.fields["identity"] - new_character.dna.SE = newSE.Copy() //This is the default of enzymes so I think it's safe to go with. - new_character.dna.UpdateSE() - new_character.UpdateAppearance(newUI.Copy())//Now we configure their appearance based on their unique identity, same as with a DNA machine or somesuch. - else//If they have no records, we just do a random DNA for them, based on their random appearance/savefile. - new_character.dna.ready_dna(new_character) - - new_character.key = key - - job_master.EquipRank(new_character, new_character.mind.assigned_role, 1)//Or we simply equip them. - - if(!record_found)//If there are no records for them. If they have a record, this info is already in there. MODE people are not announced anyway. - data_core.manifest_inject(new_character) - - new_character << "You have been fully respawned. Get back in the fight!." - new_character.hud_updateflag |= 1 << NATIONS_HUD - return new_character - - - -/** - * LateSpawn hook. - * Called in newplayer.dm when a humanoid character joins the round after it started. - * Parameters: var/mob/living/carbon/human, var/rank - */ -/hook/latespawn/proc/give_latejoiners_nations(var/mob/living/carbon/human/H) - var/datum/game_mode/nations/mode = get_nations_mode() - if (!mode) return 1 - - if(!mode.kickoff) return 1 - - var/list/cargonians = list("Quartermaster","Cargo Technician","Shaft Miner") - if(H.mind) - if(H.mind.assigned_role in engineering_positions) - H.mind.nation = all_nations["Atmosia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in medical_positions) - H.mind.nation = all_nations["Medistan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in science_positions) - H.mind.nation = all_nations["Scientopia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in security_positions) - H.mind.nation = all_nations["Brigston"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in cargonians) - H.mind.nation = all_nations["Cargonia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in support_positions) - H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in command_positions) - H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else - message_admins("[key_name_admin(H)] with [H.mind.assigned_role] could not find any nation to assign!") - return 1 - message_admins("[key_name_admin(H)] latejoined with no mind.") - return 1 - -/proc/get_nations_mode() - if(!ticker || !istype(ticker.mode, /datum/game_mode/nations)) - return null - - return ticker.mode \ No newline at end of file diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 0b3592ded97..1848a8e6a0f 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -115,7 +115,7 @@ proc/issyndicate(mob/living/M as mob) for(var/obj/effect/landmark/A in landmarks_list) if(A.name == "Syndicate-Spawn") synd_spawn += get_turf(A) - del(A) + qdel(A) continue var/obj/effect/landmark/uplinklocker = locate("landmark*Syndicate-Uplink") //i will be rewriting this shortly diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm index da997300aa1..8c0598d6d21 100644 --- a/code/game/gamemodes/setupgame.dm +++ b/code/game/gamemodes/setupgame.dm @@ -159,7 +159,7 @@ var/mob/living/carbon/human/M = new /mob/living/carbon/human(A.loc) M.real_name = "Corpse" M.death() - del(A) + qdel(A) continue if (A.name == "Corpse-Engineer") var/mob/living/carbon/human/M = new /mob/living/carbon/human(A.loc) @@ -247,6 +247,6 @@ else M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat(M), slot_head) - del(A) + qdel(A) continue */ diff --git a/code/game/gamemodes/xenos/xenos.dm b/code/game/gamemodes/xenos/xenos.dm index fa6390a1935..91bdefd0639 100644 --- a/code/game/gamemodes/xenos/xenos.dm +++ b/code/game/gamemodes/xenos/xenos.dm @@ -65,7 +65,7 @@ for(var/obj/effect/landmark/A in landmarks_list) if(A.name == "Xenos-Spawn") xenos_spawn += get_turf(A) - del(A) + qdel(A) continue var/xenoqueen_selected = 0 @@ -82,7 +82,7 @@ else O.key = xeno_mind.current.key xeno_mind.name = O.name - //del(xeno_mind) + //qdel(xeno_mind) xenoqueen_selected = 1 spawnpos++ continue @@ -94,7 +94,7 @@ else O.key = xeno_mind.current.key xeno_mind.name = O.name - //del(xeno_mind) + //qdel(xeno_mind) spawnpos++ spawn (rand(waittime_l, waittime_h)) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 3c38eb19042..666023d0af8 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -124,6 +124,7 @@ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_chem(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear) + H.equip_or_collect(new /obj/item/clothing/glasses/science(H), slot_glasses) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chemist(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/chemist(H), slot_wear_pda) diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 256eb2ca69c..c37b023ae78 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -18,6 +18,7 @@ if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear) + H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses/reagent(H), slot_glasses) H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_or_collect(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit) H.equip_or_collect(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 2ff04e63f6a..0de351c4917 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -14,29 +14,16 @@ var/global/datum/controller/occupations/job_master proc/SetupOccupations(var/list/faction = list("Station")) - if(no_synthetic) - occupations = list() - var/list/all_jobs = subtypesof(/datum/job) -list(/datum/job/ai,/datum/job/cyborg) - if(!all_jobs.len) - world << "\red \b Error setting up jobs, no job datums found" - return 0 - for(var/J in all_jobs) - var/datum/job/job = new J() - if(!job) continue - if(!job.faction in faction) continue - occupations += job - else - occupations = list() - var/list/all_jobs = subtypesof(/datum/job) - if(!all_jobs.len) - world << "\red \b Error setting up jobs, no job datums found" - return 0 - for(var/J in all_jobs) - var/datum/job/job = new J() - if(!job) continue - if(!job.faction in faction) continue - occupations += job - + occupations = list() + var/list/all_jobs = subtypesof(/datum/job) + if(!all_jobs.len) + world << "\red \b Error setting up jobs, no job datums found" + return 0 + for(var/J in all_jobs) + var/datum/job/job = new J() + if(!job) continue + if(!job.faction in faction) continue + occupations += job return 1 diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index d7cf74d8137..6a0bd412e8f 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -92,7 +92,7 @@ if (C == user) user.visible_message("[user] climbs on the operating table.","You climb on the operating table.") else - visible_message("[C] has been laid on the operating table by [user].", 3) + visible_message("[C] has been laid on the operating table by [user].") if (C.client) C.client.perspective = EYE_PERSPECTIVE C.client.eye = src diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 6cb48aef355..2459e1cc121 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -308,7 +308,7 @@ user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!") src.updateUsrDialog() return - + else user << "\red The sleeper has a beaker already." return @@ -354,7 +354,7 @@ usr << "[G:affecting.name] will not fit into the sleeper because they have a slime latched onto their head." return - visible_message("[user] starts putting [G:affecting:name] into the sleeper.", 3) + visible_message("[user] starts putting [G:affecting:name] into the sleeper.") if(do_after(user, 20, target = G:affecting)) if(src.occupant) @@ -555,9 +555,9 @@ usr << "[L.name] will not fit into the sleeper because they have a slime latched onto their head." return if(L == user) - visible_message("[user] starts climbing into the sleeper.", 3) + visible_message("[user] starts climbing into the sleeper.") else - visible_message("[user] starts putting [L.name] into the sleeper.", 3) + visible_message("[user] starts putting [L.name] into the sleeper.") if(do_after(user, 20, target = L)) if(src.occupant) @@ -599,7 +599,7 @@ if(M.Victim == usr) usr << "You're too busy getting your life sucked out of you." return - visible_message("[usr] starts climbing into the sleeper.", 3) + visible_message("[usr] starts climbing into the sleeper.") if(do_after(usr, 20, target = usr)) if(src.occupant) usr << "\blue The sleeper is already occupied!" diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 4ffe2a33052..1d6e07b04c6 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -28,7 +28,7 @@ component_parts += new /obj/item/weapon/stock_parts/console_screen(null) component_parts += new /obj/item/stack/cable_coil(null, 2) RefreshParts() - + /obj/machinery/bodyscanner/upgraded/New() ..() component_parts = list() @@ -129,9 +129,9 @@ usr << "[L.name] will not fit into the body scanner because they have a slime latched onto their head." return if(L == user) - visible_message("[user] climbs into the body scanner.", 3) + visible_message("[user] climbs into the body scanner.") else - visible_message("[user] puts [L.name] into the body scanner.", 3) + visible_message("[user] puts [L.name] into the body scanner.") if (L.client) L.client.perspective = EYE_PERSPECTIVE @@ -350,21 +350,21 @@ /obj/machinery/body_scanconsole/attack_ai(user as mob) return attack_hand(user) - + /obj/machinery/body_scanconsole/attack_ghost(user as mob) return attack_hand(user) /obj/machinery/body_scanconsole/attack_hand(user as mob) if(stat & (NOPOWER|BROKEN)) return - + if (panel_open) user << "Close the maintenance panel first." return - + if(!src.connected) findscanner() - + if (src.connected) if(!connected.occupant) user << "The scanner is empty." diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index b0a05d5d3bb..92f3cb8211e 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -35,9 +35,11 @@ update_icon() /obj/machinery/portable_atmospherics/Destroy() + disconnect() qdel(air_contents) + air_contents = null qdel(holding) - + holding = null return ..() /obj/machinery/portable_atmospherics/update_icon() @@ -71,7 +73,7 @@ connected_port = null return 1 - + /obj/machinery/portable_atmospherics/portableConnectorReturnAir() return air_contents diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index 7491a88c9a8..b4286afa676 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -109,7 +109,9 @@ /obj/machinery/bot/Destroy() aibots -= src qdel(Radio) + Radio = null qdel(botcard) + botcard = null return ..() /obj/machinery/bot/proc/add_to_beacons(bot_filter) //Master filter control for bots. Must be placed in the bot's local New() to support map spawned bots. diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index d9e640258a6..8df634c0b50 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -82,6 +82,9 @@ var/global/mulebot_count = 0 unload(0) qdel(wires) wires = null + if(cell) + qdel(cell) + cell = null return ..() // attack by item diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index b4e9dc9822c..2db4a6a64e8 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -19,7 +19,7 @@ /obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob) if(..()) return 1 - + user.set_machine(src) var/dat @@ -195,7 +195,7 @@ if(!..()) return - + if(active) if(!checkInteg(linkedholodeck)) damaged = 1 @@ -348,10 +348,10 @@ /obj/structure/table/holotable name = "table" -/obj/structure/table/holotable/attack_alien(mob/user as mob) +/obj/structure/table/holotable/attack_alien(mob/user as mob) return attack_hand(user) -/obj/structure/table/holotable/attack_animal(mob/living/simple_animal/user as mob) +/obj/structure/table/holotable/attack_animal(mob/living/simple_animal/user as mob) return attack_hand(user) /obj/structure/table/holotable/attack_hand(mob/user as mob) @@ -387,11 +387,11 @@ pressure_resistance = 4*ONE_ATMOSPHERE anchored = 1.0 flags = ON_BORDER - + /obj/structure/rack/holorack name = "rack" -/obj/structure/rack/holorack/attack_alien(mob/user as mob) +/obj/structure/rack/holorack/attack_alien(mob/user as mob) return attack_hand(user) /obj/structure/rack/holorack/attack_animal(mob/living/simple_animal/user as mob) @@ -480,12 +480,12 @@ return G.affecting.loc = src.loc G.affecting.Weaken(5) - visible_message("[G.assailant] dunks [G.affecting] into the [src]!", 3) + visible_message("[G.assailant] dunks [G.affecting] into the [src]!") qdel(W) return else if (istype(W, /obj/item) && get_dist(src,user)<2) user.drop_item(src) - visible_message("[user] dunks [W] into the [src]!", 3) + visible_message("[user] dunks [W] into the [src]!") return /obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) @@ -495,9 +495,9 @@ return if(prob(50)) I.loc = src.loc - visible_message("Swish! \the [I] lands in \the [src].", 3) + visible_message("Swish! \the [I] lands in \the [src].") else - visible_message("\The [I] bounces off of \the [src]'s rim!", 3) + visible_message("\The [I] bounces off of \the [src]'s rim!") return 0 else return ..(mover, target, height, air_group) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 220e27e0be8..09b2873019a 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -121,7 +121,7 @@ C.loc = src.loc if (src.stat & BROKEN) user << "\blue The broken glass falls out." - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) A.state = 3 A.icon_state = "3" else diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 68f9f03f0d4..9f344a8171b 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -14,6 +14,10 @@ crew_monitor = new(src) ..() +/obj/machinery/computer/crew/Destroy() + qdel(crew_monitor) + crew_monitor = null + return ..() /obj/machinery/computer/crew/attack_ai(mob/user) attack_hand(user) diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm index c1836fdb21a..a549dd5b64d 100644 --- a/code/game/machinery/computer/power.dm +++ b/code/game/machinery/computer/power.dm @@ -15,30 +15,32 @@ ..() power_monitors += src power_monitors = sortAtom(power_monitors) - power_monitor = new(src) - powermonitor_repository.update_cache() + power_monitor = new(src) + powermonitor_repository.update_cache() powernet = find_powernet() - + /obj/machinery/computer/monitor/Destroy() power_monitors -= src - powermonitor_repository.update_cache() - return ..() - + powermonitor_repository.update_cache() + qdel(power_monitor) + power_monitor = null + return ..() + /obj/machinery/computer/monitor/power_change() ..() - powermonitor_repository.update_cache() - -/obj/machinery/computer/monitor/proc/find_powernet() + powermonitor_repository.update_cache() + +/obj/machinery/computer/monitor/proc/find_powernet() var/obj/structure/cable/attached = null var/turf/T = loc if(isturf(T)) attached = locate() in T if(attached) return attached.get_powernet() - + /obj/machinery/computer/monitor/attack_ai(mob/user) attack_hand(user) - + /obj/machinery/computer/monitor/attack_hand(mob/user) add_fingerprint(user) if(stat & (BROKEN|NOPOWER)) @@ -52,4 +54,3 @@ /obj/machinery/computer/monitor/interact(mob/user) power_monitor.ui_interact(user) - \ No newline at end of file diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm index 5aa3bff2fb2..107cfc6cb0f 100644 --- a/code/game/machinery/computer/prisonshuttle.dm +++ b/code/game/machinery/computer/prisonshuttle.dm @@ -46,7 +46,7 @@ var/prison_shuttle_timeleft = 0 if (src.stat & BROKEN) user << "\blue The broken glass falls out." - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) A.state = 3 A.icon_state = "3" else diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 19a5d8e59ee..9f1238c56d2 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -25,6 +25,7 @@ /obj/machinery/computer/station_alert/Destroy() alarm_monitor.unregister(src) qdel(alarm_monitor) + alarm_monitor = null return ..() /obj/machinery/computer/station_alert/attack_ai(mob/user) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 1a3361425d9..ceb15bc79b7 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -49,7 +49,7 @@ component_parts += new /obj/item/weapon/stock_parts/console_screen(null) component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() - + /obj/machinery/atmospherics/unary/cryo_cell/construction() ..(dir,dir) @@ -113,9 +113,9 @@ return if(put_mob(L)) if(L == user) - visible_message("[user] climbs into the cryo cell.", 3) + visible_message("[user] climbs into the cryo cell.") else - visible_message("[user] puts [L.name] into the cryo cell.", 3) + visible_message("[user] puts [L.name] into the cryo cell.") if(user.pulling == L) user.pulling = null @@ -157,11 +157,11 @@ /obj/machinery/atmospherics/unary/cryo_cell/attack_ghost(mob/user) return attack_hand(user) - + /obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user) if(user == occupant) return - + if(panel_open) usr << "\blue Close the maintenance panel first." return diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 5f3ababb864..f509cb9026d 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -110,7 +110,7 @@ user << "\The [I] is no longer in storage." return - visible_message("The console beeps happily as it disgorges \the [I].", 3) + visible_message("The console beeps happily as it disgorges \the [I].") I.loc = get_turf(src) frozen_items -= I @@ -125,7 +125,7 @@ user << "There is nothing to recover from storage." return - visible_message("The console beeps happily as it disgorges the desired objects.", 3) + visible_message("The console beeps happily as it disgorges the desired objects.") for(var/obj/item/I in frozen_items) I.loc = get_turf(src) @@ -317,7 +317,7 @@ occupant.unEquip(W) W.loc = src - if(W.contents.len) //Make sure we catch anything not handled by del() on the items. + if(W.contents.len) //Make sure we catch anything not handled by qdel() on the items. var/preserve = null for(var/T in preserve_items) if(istype(W,T)) @@ -420,7 +420,7 @@ else announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]") - visible_message("\The [src] hums and hisses as it moves [occupant.real_name] into storage.", 3) + visible_message("\The [src] hums and hisses as it moves [occupant.real_name] into storage.") // Delete the mob. qdel(occupant) @@ -458,7 +458,7 @@ if(willing) - visible_message("[user] starts putting [G:affecting:name] into \the [src].", 3) + visible_message("[user] starts putting [G:affecting:name] into \the [src].") if(do_after(user, 20, target = G:affecting)) if(!M || !G || !G:affecting) return @@ -547,9 +547,9 @@ if(willing) if(L == user) - visible_message("[user] starts climbing into the cryo pod.", 3) + visible_message("[user] starts climbing into the cryo pod.") else - visible_message("[user] starts putting [L] into the cryo pod.", 3) + visible_message("[user] starts putting [L] into the cryo pod.") if(do_after(user, 20, target = L)) if(!L) return @@ -637,7 +637,7 @@ usr << "You're too busy getting your life sucked out of you." return - visible_message("[usr] starts climbing into \the [src].", 3) + visible_message("[usr] starts climbing into \the [src].") if(do_after(usr, 20, target = usr)) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 4c492d20cf2..aa848a1b097 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -141,7 +141,8 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/proc/clear_holo() // hologram.set_light(0)//Clear lighting. //handled by the lighting controller when its ower is deleted - del(hologram)//Get rid of hologram. + qdel(hologram)//Get rid of hologram. + hologram = null if(master.holo == src) master.holo = null master = null//Null the master, since no-one is using it now. @@ -222,9 +223,9 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ qdel(src) return -/obj/machinery/hologram/Destroy() +/obj/machinery/hologram/holopad/Destroy() if(hologram) - src:clear_holo() + clear_holo() return ..() /* diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index 987739b1a5f..b5baada5773 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -139,7 +139,7 @@ if(input_obj) if(isturf(input_obj.loc)) input_plate = input_obj.loc - del(input_obj) + qdel(input_obj) break if(!input_plate) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index bed10ccf131..87485873569 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -352,11 +352,11 @@ Class Procs: else if(prob(H.getBrainLoss())) user << "You momentarily forget how to use [src]." return 1 - + if(panel_open) src.add_fingerprint(user) return 0 - + if(!interact_offline && stat & (NOPOWER|BROKEN|MAINT)) return 1 @@ -439,9 +439,7 @@ Class Procs: var/obj/item/weapon/circuitboard/CB = locate(/obj/item/weapon/circuitboard) in component_parts var/P if(W.works_from_distance) - user << "Following parts detected in the machine:" - for(var/var/obj/item/C in component_parts) - user << " [C.name]" + display_parts(user) for(var/obj/item/weapon/stock_parts/A in component_parts) for(var/D in CB.req_components) if(ispath(A.type, D)) @@ -460,15 +458,23 @@ Class Procs: break RefreshParts() else - user << "Following parts detected in the machine:" - for(var/var/obj/item/C in component_parts) - user << " [C.name]" + display_parts(user) if(shouldplaysound) W.play_rped_sound() return 1 else return 0 +/obj/machinery/proc/display_parts(mob/user) + user << "Following parts detected in the machine:" + for(var/obj/item/C in component_parts) + user << "\icon[C] [C.name]" + +/obj/machinery/examine(mob/user) + ..(user) + if(user.research_scanner && component_parts) + display_parts(user) + /obj/machinery/proc/dismantle() playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc) diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index d4d25346c60..edca612efd0 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -164,7 +164,7 @@ if(prob(electricity_level)) explosion(loc, 0, 1, 2, 3) // ooo dat shit EXPLODES son spawn(2) - del(src) + qdel(src) */ updateicon() diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 0165aaa1d37..68df2d59ed1 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -145,7 +145,7 @@ //Allow you to push disposal pipes into it (for those with density 1) /obj/machinery/pipedispenser/disposal/Crossed(var/obj/structure/disposalconstruct/pipe as obj) if(istype(pipe) && !pipe.anchored) - del(pipe) + qdel(pipe) Nah */ diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index 6a865e923eb..f9898a3de00 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -8,30 +8,27 @@ var/temperature = "normal" //The temperature of the pool, starts off on normal, which has no effects. var/temperaturecolor = "" //used for nanoUI fancyness var/srange = 5 //The range of the search for pool turfs, change this for bigger or smaller pools. - var/linkedmist = list() //Used to keep track of created mist - var/misted = 0 //Used to check for mist. + var/list/linkedmist = list() //Used to keep track of created mist + /obj/machinery/poolcontroller/New() //This proc automatically happens on world start for(var/turf/simulated/floor/beach/water/W in range(srange,src)) //Search for /turf/simulated/floor/beach/water in the range of var/srange - src.linkedturfs += W //Add found pool turfs to the central list. + linkedturfs += W //Add found pool turfs to the central list. ..() //Changed to call parent as per MarkvA's recommendation /obj/machinery/poolcontroller/emag_act(user as mob) //Emag_act, this is called when it is hit with a cryptographic sequencer. if(!emagged) //If it is not already emagged, emag it. - user << "\red You disable \the [src]'s temperature safeguards." //Inform the mob of what emagging does. + user << "You disable \the [src]'s temperature safeguards." //Inform the mob of what emagging does. emagged = 1 //Set the emag var to true. /obj/machinery/poolcontroller/attackby(obj/item/P as obj, mob/user as mob, params) //Proc is called when a user hits the pool controller with something. - if(istype(P,/obj/item/device/multitool)) //If the mob hits the pool controller with a multitool, reset the emagged status if(emagged) //Check the emag status - user << "\red You re-enable \the [src]'s temperature safeguards." //Inform the user that they have just fixed the safeguards. + user << "You re-enable \the [src]'s temperature safeguards." //Inform the user that they have just fixed the safeguards. emagged = 0 //Set the emagged var to false. - return else - user << "\red Nothing happens." //If not emagged, don't do anything, and don't tell the user that it can be emagged. + user << "Nothing happens." //If not emagged, don't do anything, and don't tell the user that it can be emagged. - return //Return, nothing else needs to be done. else //If it's not a multitool, defer to /obj/machinery/attackby ..() @@ -51,18 +48,14 @@ continue if(isobserver(M)) continue + if(M.stat == DEAD) + continue //End sanity checks, go on switch(temperature) //Apply different effects based on what the temperature is set to. if("scalding") //Burn the mob. M.bodytemperature = min(500, M.bodytemperature + 35) //heat mob at 35k(elvin) per cycle M << "The water is searing hot!" - if("frigid") //Freeze the mob. - M.bodytemperature = max(80, M.bodytemperature - 35) //cool mob at -35k per cycle - M << "The water is freezing!" - - if("normal") //Normal temp does nothing, because it's just room temperature water. - if("warm") //Gently warm the mob. M.bodytemperature = min(330, M.bodytemperature + 10) //Heats up mobs to just over normal, not enough to burn if(prob(50)) //inform the mob of warm water half the time @@ -73,22 +66,30 @@ if(prob(50)) //inform the mob of cold water half the time M << "The water is chilly." //Inform the mob it's chilly water. + if("frigid") //Freeze the mob. + M.bodytemperature = max(80, M.bodytemperature - 35) //cool mob at -35k per cycle + M << "The water is freezing!" + + if(ishuman(M)) //Make sure they are human before typecasting. var/mob/living/carbon/human/drownee = M //Typecast them as human. - if(drownee.stat == DEAD) //Check stat, if they are dead, ignore them. - continue - if(drownee && drownee.lying && !drownee.internal && !(drownee.species.flags & NO_BREATHE) && !(drownee.species.name == "Skrell" || drownee.species.name =="Neara") && !(NO_BREATH in drownee.mutations)) - //Establish that there is a mob, the mob is lying down, has no internals, species does breathe, is not a skrell/neara, and does not have NO_BREATHE - if(drownee.stat != CONSCIOUS) //Mob is in critical. + if(drownee && drownee.lying) //Mob lying down + if(drownee.internal) + continue //Has internals, no drowning + if((drownee.species.flags & NO_BREATHE) || (NO_BREATHE in drownee.mutations)) + continue //doesn't breathe, no drowning + if(drownee.get_species() == "Skrell" || drownee.get_species() == "Neara") + continue //fish things don't drown + + if(drownee.stat) //Mob is in critical. drownee.adjustOxyLoss(9) //Kill em quickly. add_logs(drownee, src, "drowned") drownee.visible_message("\The [drownee] appears to be drowning!","You're quickly drowning!") //inform them that they are fucked. else - if(!drownee.internal) //double check they have no internals, just in case. - drownee.adjustOxyLoss(5) //5 oxyloss per cycle. - add_logs(drownee, src, "drowned") - if(prob(35)) //35% chance to tell them what is going on. They should probably figure it out before then. - drownee.visible_message("\The [drownee] flails, almost like they are drowning!","You're lacking air!") //*gasp* *gasp* *gasp* *gasp* *gasp* + drownee.adjustOxyLoss(5) //5 oxyloss per cycle. + add_logs(drownee, src, "drowned") + if(prob(35)) //35% chance to tell them what is going on. They should probably figure it out before then. + drownee.visible_message("\The [drownee] flails, almost like they are drowning!","You're lacking air!") //*gasp* *gasp* *gasp* *gasp* *gasp* for(var/obj/effect/decal/cleanable/decal in W) animate(decal, alpha = 10, time = 20) @@ -96,23 +97,23 @@ qdel(decal) /obj/machinery/poolcontroller/proc/miston() //Spawn /obj/effect/mist (from the shower) on all linked pool tiles + if(linkedmist.len) + return + for(var/turf/simulated/floor/beach/water/W in linkedturfs) var/M = new /obj/effect/mist(W) - if(misted) - return linkedmist += M - misted = 1 //var just to keep track of when the mist on proc has been called. - /obj/machinery/poolcontroller/proc/mistoff() //Delete all /obj/effect/mist from all linked pool tiles. for(var/obj/effect/mist/M in linkedmist) qdel(M) - misted = 0 //no mist left, turn off the tracking var + linkedmist.Cut() + /obj/machinery/poolcontroller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] - data["currentTemp"] = capitalize(src.temperature) + data["currentTemp"] = temperature data["emagged"] = emagged data["TempColor"] = temperaturecolor @@ -122,33 +123,36 @@ ui.set_initial_data(data) ui.open() + + /obj/machinery/poolcontroller/Topic(href, href_list) - if(..()) return 1 + if(..()) + return 1 switch(href_list["temp"]) if("Scalding") - if(!src.emagged) + if(!emagged) return 0 - src.temperature = "scalding" - src.temperaturecolor = "#FF0000" + temperature = "scalding" + temperaturecolor = "#FF0000" miston() if("Frigid") - if(!src.emagged) + if(!emagged) return 0 - src.temperature = "frigid" - src.temperaturecolor = "#00CCCC" + temperature = "frigid" + temperaturecolor = "#00CCCC" mistoff() if("Warm") - src.temperature = "warm" - src.temperaturecolor = "#990000" + temperature = "warm" + temperaturecolor = "#990000" mistoff() if("Cool") - src.temperature = "cool" - src.temperaturecolor = "#009999" + temperature = "cool" + temperaturecolor = "#009999" mistoff() if("Normal") - src.temperature = "normal" - src.temperaturecolor = "" + temperature = "normal" + temperaturecolor = "" mistoff() return 1 \ No newline at end of file diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index d5e1bd9d90e..7a9dca3fdef 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -53,10 +53,10 @@ var/wrenching = 0 var/last_target //last target fired at, prevents turrets from erratically firing at all valid targets in range - + var/screen = 0 // Screen 0: main control, screen 1: access levels var/one_access = 0 // Determines if access control is set to req_one_access or req_access - + /obj/machinery/porta_turret/centcom enabled = 0 ailock = 1 @@ -78,7 +78,7 @@ req_access.Cut() req_one_access = list(access_security, access_heads) one_access = 1 - + //Sets up a spark system spark_system = new /datum/effect/effect/system/spark_spread spark_system.set_up(5, 0, src) @@ -86,6 +86,11 @@ setup() +/obj/machinery/porta_turret/Destroy() + qdel(spark_system) + spark_system = null + return ..() + /obj/machinery/porta_turret/centcom/New() ..() if(req_one_access && req_one_access.len) @@ -143,7 +148,7 @@ eshot_sound = 'sound/weapons/Laser.ogg' egun = 1 -var/list/turret_icons +var/list/turret_icons /obj/machinery/porta_turret/update_icon() if(!turret_icons) turret_icons = list() @@ -183,7 +188,7 @@ var/list/turret_icons return ui_interact(user) - + /obj/machinery/porta_turret/attack_ghost(mob/user) ui_interact(user) @@ -211,7 +216,7 @@ var/list/turret_icons settings[++settings.len] = list("category" = "Check Access Authorization", "setting" = "check_access", "value" = check_access) settings[++settings.len] = list("category" = "Check Misc. Lifeforms", "setting" = "check_anomalies", "value" = check_anomalies) data["settings"] = settings - + data["one_access"] = one_access var/accesses[0] var/list/access_list = get_all_accesses() @@ -224,7 +229,7 @@ var/list/turret_icons active = (access in req_access) accesses[++accesses.len] = list("name" = name, "active" = active, "number" = access) data["accesses"] = accesses - + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 320) @@ -277,12 +282,12 @@ var/list/turret_icons if(href_list["one_access"]) toggle_one_access(href_list["one_access"]) - + if(href_list["access"]) toggle_access(href_list["access"]) return 1 - + /obj/machinery/porta_turret/proc/toggle_one_access(var/access) one_access = text2num(access) @@ -292,7 +297,7 @@ var/list/turret_icons else if(one_access == 0) req_access = req_one_access.Copy() req_one_access.Cut() - + /obj/machinery/porta_turret/proc/toggle_access(var/access) var/required = text2num(access) if(!(required in get_all_accesses())) @@ -307,8 +312,8 @@ var/list/turret_icons if((required in req_access)) req_access -= required else - req_access += required - + req_access += required + /obj/machinery/porta_turret/power_change() if(powered()) stat &= ~NOPOWER @@ -392,7 +397,7 @@ var/list/turret_icons attacked = 0 ..() - + /obj/machinery/porta_turret/attack_animal(mob/living/simple_animal/M) M.changeNext_move(CLICK_CD_MELEE) M.do_attack_animation(src) @@ -500,7 +505,7 @@ var/list/turret_icons //the main machinery process set background = BACKGROUND_ENABLED - + if(stat & (NOPOWER|BROKEN)) //if the turret has no power or is broken, make the turret pop down if it hasn't already popDown() @@ -553,7 +558,7 @@ var/list/turret_icons if(L.stat && !emagged) //if the perp is dead/dying, no need to bother really return TURRET_NOT_TARGET //move onto next potential victim! - + if(get_dist(src, L) > 7) //if it's too far away, why bother? return TURRET_NOT_TARGET @@ -576,11 +581,11 @@ var/list/turret_icons if(isanimal(L) || issmall(L)) // Animals are not so dangerous return check_anomalies ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET - + if(isalien(L)) // Xenos are dangerous return check_anomalies ? TURRET_PRIORITY_TARGET : TURRET_NOT_TARGET - if(ishuman(L)) //if the target is a human, analyze threat level + if(ishuman(L)) //if the target is a human, analyze threat level if(assess_perp(L, check_access, check_weapons, check_records, check_arrest) < 4) return TURRET_NOT_TARGET //if threat level < 4, keep going @@ -609,8 +614,8 @@ var/list/turret_icons set_raised_raising(raised, 1) playsound(get_turf(src), 'sound/effects/turret/open.wav', 60, 1) update_icon() - - var/atom/flick_holder = PoolOrNew(/atom/movable/porta_turret_cover, loc) + + var/atom/flick_holder = new /atom/movable/porta_turret_cover(loc) flick_holder.layer = layer + 0.1 flick("popup", flick_holder) sleep(10) @@ -630,8 +635,8 @@ var/list/turret_icons set_raised_raising(raised, 1) playsound(get_turf(src), 'sound/effects/turret/open.wav', 60, 1) update_icon() - - var/atom/flick_holder = PoolOrNew(/atom/movable/porta_turret_cover, loc) + + var/atom/flick_holder = new /atom/movable/porta_turret_cover(loc) flick_holder.layer = layer + 0.1 flick("popdown", flick_holder) sleep(10) @@ -646,7 +651,7 @@ var/list/turret_icons return 10 return ..() - + /obj/machinery/porta_turret/proc/set_raised_raising(var/raised, var/raising) src.raised = raised src.raising = raising diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 9313acda3cb..8cdd74790ac 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -34,7 +34,7 @@ SUIT_TYPE = /obj/item/clothing/suit/space/eva HELMET_TYPE = /obj/item/clothing/head/helmet/space/eva MASK_TYPE = /obj/item/clothing/mask/breath - + /obj/machinery/suit_storage_unit/captain SUIT_TYPE = /obj/item/clothing/suit/space/captain HELMET_TYPE = /obj/item/clothing/head/helmet/space/capspace @@ -389,7 +389,7 @@ src.SUIT = null if(src.MASK) src.MASK = null - visible_message("With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.", 3) + visible_message("With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.") src.isbroken = 1 src.isopen = 1 src.islocked = 0 @@ -484,7 +484,7 @@ if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) usr << "It's too cluttered inside for you to fit in!" return - visible_message("[usr] starts squeezing into the suit storage unit!", 3) + visible_message("[usr] starts squeezing into the suit storage unit!") if(do_after(usr, 10, target = usr)) usr.stop_pulling() usr.client.perspective = EYE_PERSPECTIVE @@ -496,7 +496,7 @@ src.update_icon() // for(var/obj/O in src) -// del(O) +// qdel(O) src.add_fingerprint(usr) src.updateUsrDialog() @@ -528,7 +528,7 @@ if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) //Unit needs to be absolutely empty user << "The unit's storage area is too cluttered." return - visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.", 3) + visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.") if(do_after(user, 20, target = G:affecting)) if(!G || !G.affecting) return //derpcheck var/mob/M = G.affecting @@ -685,7 +685,7 @@ user << "\red There is no room inside the cycler for [G.affecting.name]." return - visible_message("[user] starts putting [G.affecting.name] into the suit cycler.", 3) + visible_message("[user] starts putting [G.affecting.name] into the suit cycler.") if(do_after(user, 20, target = G:affecting)) if(!G || !G.affecting) return diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 4936b5224a9..855d190f792 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -20,7 +20,6 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept use_power = 1 idle_power_usage = 25 machinetype = 5 - delay = 7 circuitboard = "/obj/item/weapon/circuitboard/telecomms/broadcaster" /obj/machinery/telecomms/broadcaster/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) @@ -530,7 +529,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/obj/item/device/radio/headset/radio = new var/part_b = "
\icon[radio]\[[freq_text]\][part_b_extra] " // Tweaked for security headsets -- TLE - var/part_blackbox_b = " \[[freq_text]\] " + var/part_blackbox_b = " \[[freq_text]\] " var/part_c = "" var/blackbox_msg = "[part_a][source][part_blackbox_b]\"[text]\"[part_c]" diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index 23a01d13508..51319a38237 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -224,7 +224,7 @@ if (src.stat & BROKEN) user << "\blue The broken glass falls out." var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A ) for (var/obj/C in src) C.loc = src.loc diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 35ae4601a9f..715f023895e 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -20,18 +20,6 @@ attack_hand(user) - // REPAIRING: Use Nanopaste to repair 10-20 integrity points. - if(istype(P, /obj/item/stack/nanopaste)) - var/obj/item/stack/nanopaste/T = P - if (integrity < 100) //Damaged, let's repair! - integrity = between(0, integrity + rand(10,20), 100) - T.use(1) - usr << "You apply the Nanopaste to [src], repairing some of the damage." - else - usr << "This machine is already in perfect condition." - return - - switch(construct_op) if(0) if(istype(P, /obj/item/weapon/screwdriver)) diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index b77682201af..8cf29f6b8db 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -23,7 +23,7 @@ hide = 1 toggled = 0 autolinkers = list("r_relay") - + /obj/machinery/telecomms/relay/preset/engioutpost id = "Engineering Outpost" hide = 1 @@ -37,7 +37,6 @@ //anchored = 1 use_power = 0 //idle_power_usage = 0 - heatgen = 0 autolinkers = list("c_relay") //HUB @@ -48,7 +47,7 @@ autolinkers = list("hub", "relay", "c_relay", "s_relay", "m_relay", "r_relay", "e_relay", "science", "medical", "supply", "service", "common", "command", "engineering", "security", "receiverA", "receiverB", "broadcasterA", "broadcasterB") - + /obj/machinery/telecomms/hub/preset_cent id = "CentComm Hub" network = "tcommsat" @@ -73,14 +72,14 @@ id = "Receiver B" network = "tcommsat" autolinkers = list("receiverB") // link to relay - freq_listening = list(AI_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ) + freq_listening = list(AI_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ) //Common and other radio frequencies for people to freely use New() for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2) freq_listening |= i ..() - + /obj/machinery/telecomms/receiver/preset_cent id = "CentComm Receiver" network = "tcommsat" @@ -118,7 +117,7 @@ for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2) freq_listening |= i ..() - + /obj/machinery/telecomms/bus/preset_cent id = "CentComm Bus" network = "tcommsat" @@ -147,7 +146,7 @@ id = "Processor 4" network = "tcommsat" autolinkers = list("processor4") - + /obj/machinery/telecomms/processor/preset_cent id = "CentComm Processor" network = "tcommsat" @@ -178,8 +177,8 @@ /obj/machinery/telecomms/server/presets/service id = "Service Server" freq_listening = list(SRV_FREQ) - autolinkers = list("service") - + autolinkers = list("service") + /obj/machinery/telecomms/server/presets/common id = "Common Server" freq_listening = list(PUB_FREQ, AI_FREQ) @@ -210,7 +209,7 @@ id = "CentComm Server" freq_listening = list(ERT_FREQ, DTH_FREQ) use_power = 0 - autolinkers = list("centcomm") + autolinkers = list("centcomm") //Broadcasters diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index f3b84e75f89..4946d6c7944 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -28,10 +28,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() var/machinetype = 0 // just a hacky way of preventing alike machines from pairing var/toggled = 1 // Is it toggled on var/on = 1 - var/integrity = 100 // basically HP, loses integrity by heat - var/heatgen = 20 // how much heat to transfer to the environment - var/delay = 10 // how many process() ticks to delay per heat - var/heating_power = 40000 var/long_range_link = 0 // Can you link it across Z levels or on the otherside of the map? (Relay & Hub) var/circuitboard = null // string pointing to a circuitboard type var/hide = 0 // Is it a hidden machine? @@ -46,7 +42,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() //world << "[src] ([src.id]) - [signal.debug_print()]" var/send_count = 0 - signal.data["slow"] += rand(0, round((100-integrity))) // apply some lag based on integrity // Apply some lag based on traffic rates var/netlag = round(traffic / 50) @@ -162,6 +157,9 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() /obj/machinery/telecomms/Destroy() telecomms_list -= src + for(var/obj/machinery/telecomms/comm in telecomms_list) + comm.links -= src + links.Cut() return ..() // Used in auto linking @@ -183,7 +181,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() /obj/machinery/telecomms/proc/update_power() if(toggled) - if(stat & (BROKEN|NOPOWER|EMPED) || integrity <= 0) // if powered, on. if not powered, off. if too damaged, off + if(stat & (BROKEN|NOPOWER|EMPED)) // if powered, on. if not powered, off. if too damaged, off on = 0 else on = 1 @@ -193,9 +191,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() /obj/machinery/telecomms/process() update_power() - // Check heat and generate some - checkheat() - // Update the icon update_icon() @@ -211,53 +206,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() stat &= ~EMPED ..() -/obj/machinery/telecomms/proc/checkheat() - // Checks heat from the environment and applies any integrity damage - var/datum/gas_mixture/environment = loc.return_air() - var/damage_chance = 0 // Percent based chance of applying 1 integrity damage this tick - switch(environment.temperature) - if((T0C + 40) to (T0C + 70)) // 40C-70C, minor overheat, 10% chance of taking damage - damage_chance = 10 - if((T0C + 70) to (T0C + 130)) // 70C-130C, major overheat, 25% chance of taking damage - damage_chance = 25 - if((T0C + 130) to (T0C + 200)) // 130C-200C, dangerous overheat, 50% chance of taking damage - damage_chance = 50 - if((T0C + 200) to INFINITY) // More than 200C, INFERNO. Takes damage every tick. - damage_chance = 100 - if (damage_chance && prob(damage_chance)) - integrity = between(0, integrity - 1, 100) - - - if(delay) - delay-- - else - // If the machine is on, ready to produce heat, and has positive traffic, genn some heat - if(on && traffic > 0) - produce_heat(heatgen) - delay = initial(delay) - -/obj/machinery/telecomms/proc/produce_heat(heat_amt) - if(heatgen == 0) - return - - if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater. - var/turf/simulated/L = loc - if(istype(L)) - var/datum/gas_mixture/env = L.return_air() - if(env.temperature < (heat_amt+T0C)) - - var/transfer_moles = 0.25 * env.total_moles() - - var/datum/gas_mixture/removed = env.remove(transfer_moles) - - if(removed) - - var/heat_capacity = removed.heat_capacity() - if(heat_capacity == 0 || heat_capacity == null) - heat_capacity = 1 - removed.temperature = min((removed.temperature*heat_capacity + heating_power)/heat_capacity, 1000) - - env.merge(removed) /* The receiver idles and receives messages from subspace-compatible radio equipment; primarily headsets. They then just relay this information to all linked devices, @@ -276,7 +224,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() use_power = 1 idle_power_usage = 30 machinetype = 1 - heatgen = 0 circuitboard = "/obj/item/weapon/circuitboard/telecomms/receiver" /obj/machinery/telecomms/receiver/receive_signal(datum/signal/signal) @@ -333,7 +280,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() use_power = 1 idle_power_usage = 80 machinetype = 7 - heatgen = 40 circuitboard = "/obj/item/weapon/circuitboard/telecomms/hub" long_range_link = 1 netspeed = 40 @@ -368,7 +314,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() use_power = 1 idle_power_usage = 30 machinetype = 8 - heatgen = 0 circuitboard = "/obj/item/weapon/circuitboard/telecomms/relay" netspeed = 5 long_range_link = 1 @@ -420,7 +365,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() use_power = 1 idle_power_usage = 50 machinetype = 2 - heatgen = 20 circuitboard = "/obj/item/weapon/circuitboard/telecomms/bus" netspeed = 40 var/change_frequency = 0 @@ -473,8 +417,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() use_power = 1 idle_power_usage = 30 machinetype = 3 - heatgen = 100 - delay = 5 circuitboard = "/obj/item/weapon/circuitboard/telecomms/processor" var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals @@ -512,7 +454,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() use_power = 1 idle_power_usage = 15 machinetype = 4 - heatgen = 50 circuitboard = "/obj/item/weapon/circuitboard/telecomms/server" var/list/log_entries = list() var/list/stored_names = list() diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm index f1eb5bcc883..5c0b8f5eac2 100644 --- a/code/game/machinery/telecomms/telemonitor.dm +++ b/code/game/machinery/telecomms/telemonitor.dm @@ -133,7 +133,7 @@ if (src.stat & BROKEN) user << "\blue The broken glass falls out." var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A ) for (var/obj/C in src) C.loc = src.loc diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm index 440b6465f63..fe9d7c04f51 100644 --- a/code/game/machinery/telecomms/traffic_control.dm +++ b/code/game/machinery/telecomms/traffic_control.dm @@ -212,7 +212,7 @@ if (src.stat & BROKEN) user << "\blue The broken glass falls out." var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) for (var/obj/C in src) C.loc = src.loc diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index b8f0db0fefb..ad1761e2ece 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1096,7 +1096,7 @@ icon_state = "engivend" icon_deny = "engivend-deny" req_access_txt = "11" //Engineering Equipment access - products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10,/obj/item/weapon/airalarm_electronics = 10,/obj/item/weapon/stock_parts/cell/high = 10) + products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/apc_electronics = 10,/obj/item/weapon/airalarm_electronics = 10,/obj/item/weapon/stock_parts/cell/high = 10) contraband = list(/obj/item/weapon/stock_parts/cell/potato = 3) premium = list(/obj/item/weapon/storage/belt/utility = 3) @@ -1284,4 +1284,4 @@ component_parts += V component_parts += new /obj/item/weapon/vending_refill/crittercare(0) component_parts += new /obj/item/weapon/vending_refill/crittercare(0) - component_parts += new /obj/item/weapon/vending_refill/crittercare(0) + component_parts += new /obj/item/weapon/vending_refill/crittercare(0) \ No newline at end of file diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 8588baa80df..f50bc1327dd 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -116,6 +116,8 @@ recharge_console.voltage = MC * 10 /obj/machinery/mech_bay_recharge_port/Destroy() + qdel(pr_recharger) + pr_recharger = null recharge_console.recharge_port = null recharge_floor.recharge_port = null return ..() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index f43a27d28ae..9f1cc0e0849 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -89,7 +89,6 @@ add_cell() add_iterators() removeVerb(/obj/mecha/verb/disconnect_from_port) - removeVerb(/atom/movable/verb/pull) log_message("[src.name] created.") loc.Entered(src) mechas_list += src //global mech list @@ -361,7 +360,7 @@ G.destroyed = 1 G.icon_state = "[initial(G.icon_state)]-b" G.density = 0 - PoolOrNew(/obj/item/stack/rods, get_turf(G.loc)) + new /obj/item/stack/rods(get_turf(G.loc)) breakthrough = 1 else if(istype(obstacle, /obj/structure/table)) @@ -530,7 +529,7 @@ /obj/mecha/attack_animal(mob/living/simple_animal/user as mob) src.log_message("Attack by simple animal. Attacker - [user].",1) if(user.melee_damage_upper == 0) - user.emote("[user.friendly] [src]") + user.custom_emote(1, "[user.friendly] [src]") else user.do_attack_animation(src) if(!prob(src.deflect_chance)) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 9c13cdfa991..6281385b3ff 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -90,6 +90,11 @@ would spawn and follow the beaker, even if it is carried or thrown. var/atom/holder var/setup = 0 + Destroy() + holder = null + location = null + return ..() + proc/set_up(n = 3, c = 0, turf/loc) if(n > 10) n = 10 @@ -449,6 +454,11 @@ steam.start() -- spawns the effect var/direction var/obj/chemholder + Destroy() + qdel(chemholder) + chemholder = null + return ..() + New() ..() chemholder = new/obj() @@ -543,35 +553,6 @@ steam.start() -- spawns the effect if(smoke) smoke.delete() src.total_smoke-- -// Goon compat. -/datum/effect/effect/system/chem_smoke_spread/fart - - set_up(var/mob/M, n = 5, c = 0, loca, direct) - if(n > 20) - n = 20 - number = n - cardinals = c - - chemholder.reagents.add_reagent("space_drugs", rand(1,10)) - - if(istype(loca, /turf/)) - location = loca - else - location = get_turf(loca) - if(direct) - direction = direct - - var/contained = "\[[chemholder.reagents.get_reagent_ids()]\]" - var/area/A = get_area(location) - - var/where = "[A.name] | [location.x], [location.y]" - var/whereLink=formatJumpTo(location,where) - - var/more = "(?)" - message_admins("[M][more] produced a toxic fart in ([whereLink])[contained].", 0, 1) - log_game("[M][more] produced a toxic fart in ([where])[contained].") - - ///////////////////////////////////////////// // Sleep smoke ///////////////////////////////////////////// @@ -772,6 +753,10 @@ steam.start() -- spawns the effect var/processing = 1 var/on = 1 +/datum/effect/effect/system/ion_trail_follow/Destroy() + oldposition = null + return ..() + /datum/effect/effect/system/ion_trail_follow/set_up(atom/atom) attach(atom) @@ -805,6 +790,12 @@ steam.start() -- spawns the effect /datum/effect/effect/system/ion_trail_follow/space_trail var/turf/oldloc // secondary ion trail loc var/turf/currloc + +/datum/effect/effect/system/ion_trail_follow/space_trail/Destroy() + oldloc = null + currloc = null + return ..() + /datum/effect/effect/system/ion_trail_follow/space_trail/start() if(!src.on) src.on = 1 @@ -865,6 +856,10 @@ steam.start() -- spawns the effect var/processing = 1 var/on = 1 + Destroy() + oldposition = null + return ..() + set_up(atom/atom) attach(atom) oldposition = get_turf(atom) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 136efaab9a0..8d6aa799fd8 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -14,7 +14,7 @@ switch(name) //some of these are probably obsolete if("shuttle") shuttle_z = z - del(src) + qdel(src) if("airtunnel_stop") airtunnel_stop = x @@ -27,35 +27,35 @@ if("monkey") monkeystart += loc - del(src) + qdel(src) if("start") newplayer_start += loc - del(src) + qdel(src) if("wizard") wizardstart += loc - del(src) + qdel(src) if("JoinLate") latejoin += loc - del(src) + qdel(src) if("JoinLateGateway") latejoin_gateway += loc - del(src) + qdel(src) if("JoinLateCryo") latejoin_cryo += loc - del(src) + qdel(src) if("JoinLateCyborg") latejoin_cyborg += loc - del(src) + qdel(src) //prisoners if("prisonwarp") prisonwarp += loc - del(src) + qdel(src) // if("mazewarp") // mazewarp += loc if("Holding Facility") @@ -74,19 +74,19 @@ //not prisoners if("prisonsecuritywarp") prisonsecuritywarp += loc - del(src) + qdel(src) if("blobstart") blobstart += loc - del(src) + qdel(src) if("xeno_spawn") xeno_spawn += loc - del(src) + qdel(src) if("ninjastart") ninjastart += loc - del(src) + qdel(src) if("carpspawn") carplist += loc @@ -99,20 +99,8 @@ /obj/effect/landmark/Destroy() landmarks_list -= src - return ..() - -/obj/effect/landmark/nations - name = "nations" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - anchored = 1.0 - -/obj/effect/landmark/nations/New() ..() - tag = "nations*[name]" - invisibility = 101 - - return 1 + return QDEL_HINT_HARDDEL_NOW /obj/effect/landmark/start name = "start" @@ -134,51 +122,51 @@ var/list/options = typesof(/obj/effect/landmark/costume) var/PICK= options[rand(1,options.len)] new PICK(src.loc) - del(src) + qdel(src) //SUBCLASSES. Spawn a bunch of items and disappear likewise /obj/effect/landmark/costume/chicken/New() new /obj/item/clothing/suit/chickensuit(src.loc) new /obj/item/clothing/head/chicken(src.loc) new /obj/item/weapon/reagent_containers/food/snacks/egg(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/gladiator/New() new /obj/item/clothing/under/gladiator(src.loc) new /obj/item/clothing/head/helmet/gladiator(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/madscientist/New() new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc) new /obj/item/clothing/head/flatcap(src.loc) new /obj/item/clothing/suit/storage/labcoat/mad(src.loc) new /obj/item/clothing/glasses/gglasses(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/elpresidente/New() new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc) new /obj/item/clothing/head/flatcap(src.loc) new /obj/item/clothing/mask/cigarette/cigar/havana(src.loc) new /obj/item/clothing/shoes/jackboots(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/nyangirl/New() new /obj/item/clothing/under/schoolgirl(src.loc) new /obj/item/clothing/head/kitty(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/maid/New() new /obj/item/clothing/under/blackskirt(src.loc) var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears ) new CHOICE(src.loc) new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/butler/New() new /obj/item/clothing/suit/wcoat(src.loc) new /obj/item/clothing/under/suit_jacket(src.loc) new /obj/item/clothing/head/that(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/scratch/New() new /obj/item/clothing/gloves/color/white(src.loc) @@ -186,12 +174,12 @@ new /obj/item/clothing/under/scratch(src.loc) if (prob(30)) new /obj/item/clothing/head/cueball(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/highlander/New() new /obj/item/clothing/under/kilt(src.loc) new /obj/item/clothing/head/beret(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/prig/New() new /obj/item/clothing/suit/wcoat(src.loc) @@ -202,24 +190,24 @@ new /obj/item/weapon/cane(src.loc) new /obj/item/clothing/under/sl_suit(src.loc) new /obj/item/clothing/mask/fakemoustache(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/plaguedoctor/New() new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc) new /obj/item/clothing/head/plaguedoctorhat(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/nightowl/New() new /obj/item/clothing/under/owl(src.loc) new /obj/item/clothing/mask/gas/owl_mask(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/waiter/New() new /obj/item/clothing/under/waiter(src.loc) var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears) new CHOICE(src.loc) new /obj/item/clothing/suit/apron(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/pirate/New() new /obj/item/clothing/under/pirate(src.loc) @@ -227,46 +215,46 @@ var/CHOICE = pick( /obj/item/clothing/head/pirate , /obj/item/clothing/head/bandana ) new CHOICE(src.loc) new /obj/item/clothing/glasses/eyepatch(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/commie/New() new /obj/item/clothing/under/soviet(src.loc) new /obj/item/clothing/head/ushanka(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/imperium_monk/New() new /obj/item/clothing/suit/imperium_monk(src.loc) if (prob(25)) new /obj/item/clothing/mask/gas/cyborg(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/holiday_priest/New() new /obj/item/clothing/suit/holidaypriest(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/marisawizard/fake/New() new /obj/item/clothing/head/wizard/marisa/fake(src.loc) new/obj/item/clothing/suit/wizrobe/marisa/fake(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/cutewitch/New() new /obj/item/clothing/under/sundress(src.loc) new /obj/item/clothing/head/witchwig(src.loc) new /obj/item/weapon/twohanded/staff/broom(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/fakewizard/New() new /obj/item/clothing/suit/wizrobe/fake(src.loc) new /obj/item/clothing/head/wizard/fake(src.loc) new /obj/item/weapon/twohanded/staff/(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/sexyclown/New() new /obj/item/clothing/mask/gas/sexyclown(src.loc) new /obj/item/clothing/under/sexyclown(src.loc) - del(src) + qdel(src) /obj/effect/landmark/costume/sexymime/New() new /obj/item/clothing/mask/gas/sexymime(src.loc) new /obj/item/clothing/under/sexymime(src.loc) - del(src) \ No newline at end of file + qdel(src) \ No newline at end of file diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index ea7ee2764b1..e34b136cb45 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -102,7 +102,7 @@ p4.air_contents.temperature = btemp + T0C p2.secured = 1 - del(src) + qdel(src) */ /obj/effect/spawner/newbomb @@ -169,4 +169,4 @@ V.update_icon() - del(src) + qdel(src) diff --git a/code/game/objects/effects/spawners/vaultspawner.dm b/code/game/objects/effects/spawners/vaultspawner.dm index e91105f5df9..35cc039a08a 100644 --- a/code/game/objects/effects/spawners/vaultspawner.dm +++ b/code/game/objects/effects/spawners/vaultspawner.dm @@ -23,4 +23,4 @@ else new /turf/simulated/floor/vault(locate(i,j,z),type) - del(src) \ No newline at end of file + qdel(src) \ No newline at end of file diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 74919873a29..a8ce807be8a 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -121,7 +121,7 @@ if(T) if(flame_dist && prob(40) && !istype(T, /turf/space) && !T.density) - PoolOrNew(/obj/effect/hotspot, T) //Mostly for ambience! + new /obj/effect/hotspot(T) //Mostly for ambience! if(dist > 0) for(var/atom_movable in T.contents) //bypass type checking since only atom/movable can be contained by turfs anyway var/atom/movable/AM = atom_movable diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 069a6f6d7ad..23dbb530fa9 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -136,7 +136,31 @@ if(5.0) size = "huge" - return ..(user, distance, "", "It is a [size] item.") + ..(user, distance, "", "It is a [size] item.") + + if(user.research_scanner) //Mob has a research scanner active. + var/msg = "*--------*
" + + if(origin_tech) + msg += "Testing potentials:
" + var/list/techlvls = params2list(origin_tech) + for(var/T in techlvls) //This needs to use the better names. + msg += "Tech: [CallTechName(T)] | Magnitude: [techlvls[T]]
" + msg += "Research reliability: [reliability]%
" + if(crit_fail) + msg += "Critical failure detected in subject!
" + else + msg += "No tech origins detected.
" + + + if(materials.len) + msg += "Extractable materials:
" + for(var/mat in materials) + msg += "[CallMaterialName(mat)]
" //Capitize first word, remove the "$" + else + msg += "No extractable materials detected.
" + msg += "*--------*" + user << msg /obj/item/attack_hand(mob/user as mob) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 842501da8a1..cfb3cd14c7c 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -62,6 +62,7 @@ var/global/list/obj/item/device/pda/PDAs = list() var/ownrank = null // this one is rank, never alt title var/obj/item/device/paicard/pai = null // A slot for a personal AI device + var/retro_mode = 0 /obj/item/device/pda/medical default_cartridge = /obj/item/weapon/cartridge/medical @@ -401,6 +402,8 @@ var/global/list/obj/item/device/pda/PDAs = list() data["idInserted"] = (id ? 1 : 0) data["idLink"] = (id ? text("[id.registered_name], [id.assignment]") : "--------") + data["useRetro"] = retro_mode + data["cart_loaded"] = cartridge ? 1:0 if(cartridge) var/cartdata[0] @@ -574,6 +577,9 @@ var/global/list/obj/item/device/pda/PDAs = list() mode = 0 else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu. cartridge.mode = mode + if("Retro") + retro_mode = !retro_mode + ui_interact(user) if ("Authenticate")//Checks for ID id_check(U, 1) if("UpdateInfo") @@ -1138,7 +1144,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(T.ptank) atmosanalyzer_scan(T.ptank.air_contents, user, T) else if (istype(A, /obj/machinery/portable_atmospherics/scrubber/huge)) var/obj/machinery/portable_atmospherics/scrubber/huge/T = A - atmosanalyzer_scan(T.air_contents, user, T) + atmosanalyzer_scan(T.air_contents, user, T) else if (istype(A, /obj/machinery/atmospherics/unary/tank)) var/obj/machinery/atmospherics/unary/tank/T = A atmosanalyzer_scan(T.air_contents, user, T) @@ -1276,4 +1282,3 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/emp_act(severity) for(var/atom/A in src) A.emp_act(severity) - \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 670d02af975..6ccbbc04c13 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -114,6 +114,10 @@ radio = new /obj/item/radio/integrated/signal(src) ..() +/obj/item/weapon/cartridge/signal/Destroy() + qdel(radio) + return ..() + /obj/item/weapon/cartridge/quartermaster name = "Space Parts & Space Vendors Cartridge" desc = "Perfect for the Quartermaster on the go!" diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 1ef94fde8d2..ce4f7dc2346 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -144,7 +144,7 @@ var/global/list/default_medbay_channels = list( var/chan_stat = channels[ch_name] var/listening = !!(chan_stat & FREQ_LISTENING) != 0 - dat.Add(list(list("chan" = ch_name, "display_name" = ch_name, "secure_channel" = 1, "sec_channel_listen" = !listening))) + dat.Add(list(list("chan" = ch_name, "display_name" = ch_name, "secure_channel" = 1, "sec_channel_listen" = !listening, "chan_span" = frequency_span_class(radiochannels[ch_name])))) return dat @@ -152,7 +152,7 @@ var/global/list/default_medbay_channels = list( var/dat[0] for(var/internal_chan in internal_channels) if(has_channel_access(user, internal_chan)) - dat.Add(list(list("chan" = internal_chan, "display_name" = get_frequency_name(text2num(internal_chan))))) + dat.Add(list(list("chan" = internal_chan, "display_name" = get_frequency_name(text2num(internal_chan)), "chan_span" = frequency_span_class(text2num(internal_chan))))) return dat diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 74a612762e7..e7337e1042d 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -162,7 +162,7 @@ REAGENT SCANNER user.show_message("\t Damage Specifics: [OX] - [TX] - [BU] - [BR]") user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH))) - user.show_message("\blue Time of Death: [M.timeofdeath]") + user.show_message("\blue Time of Death: [worldtime2text(M.timeofdeath)]") if(istype(M, /mob/living/carbon/human) && mode == 1) var/mob/living/carbon/human/H = M var/list/damaged = H.get_damaged_organs(1,1) diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm index 730f81f0bdb..6172a603ce5 100644 --- a/code/game/objects/items/devices/sensor_device.dm +++ b/code/game/objects/items/devices/sensor_device.dm @@ -1,5 +1,5 @@ /obj/item/device/sensor_device - name = "handheld crew monitor" + name = "handheld crew monitor" desc = "A miniature machine that tracks suit sensors across the station." icon = 'icons/obj/device.dmi' icon_state = "scanner" @@ -7,10 +7,15 @@ slot_flags = SLOT_BELT origin_tech = "biotech=3;materials=3;magnets=3" var/datum/nano_module/crew_monitor/crew_monitor - + /obj/item/device/sensor_device/New() crew_monitor = new(src) +/obj/item/device/sensor_device/Destroy() + qdel(crew_monitor) + crew_monitor = null + return ..() + /obj/item/device/sensor_device/attack_self(mob/user as mob) ui_interact(user) diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm index 6ff7e24a85e..32171b19fbe 100644 --- a/code/game/objects/items/flag.dm +++ b/code/game/objects/items/flag.dm @@ -156,7 +156,7 @@ desc = "A flag proudly proclaiming the superior heritage of Unathi." icon_state = "unathiflag" -//Nation Flags (Able to spawn outside Nations gamemode) +//Department Flags /obj/item/flag/cargo name = "Cargonia flag" diff --git a/code/game/objects/items/mountable_frames/frames.dm b/code/game/objects/items/mountable_frames/frames.dm index b6848fc6d12..90560e03bcd 100644 --- a/code/game/objects/items/mountable_frames/frames.dm +++ b/code/game/objects/items/mountable_frames/frames.dm @@ -8,7 +8,7 @@ ..() if (istype(W, /obj/item/weapon/wrench) && sheets_refunded) //new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded ) - var/obj/item/stack/sheet/metal/M = PoolOrNew(/obj/item/stack/sheet/metal, get_turf(src)) + var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal(get_turf(src)) M.amount = sheets_refunded qdel(src) diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 6cd8134b617..96f9d2a4787 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -59,7 +59,7 @@ else user.visible_message("[user] begins to do [H]'s lips with \the [src].", \ "You begin to apply \the [src].") - if(do_after(user, 20, target = H) && do_after(H, 20, 5, 0)) //user needs to keep their active hand, H does not. + if(do_after(user, 20, target = H)) user.visible_message("[user] does [H]'s lips with \the [src].", \ "You apply \the [src].") H.lip_style = "lipstick" diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 40ac8e93bdd..8524a6cbcf2 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -25,10 +25,13 @@ /obj/item/weapon/flamethrower/Destroy() if(weldtool) qdel(weldtool) + weldtool = null if(igniter) qdel(igniter) + igniter = null if(ptank) qdel(ptank) + ptank = null return ..() diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index 2b7e7b7f854..d8ef1d9591b 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -15,6 +15,7 @@ Destroy() qdel(smoke) + smoke = null return ..() prime() diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm index f622a516b82..f1b04b9ed98 100644 --- a/code/game/objects/items/weapons/hydroponics.dm +++ b/code/game/objects/items/weapons/hydroponics.dm @@ -168,7 +168,7 @@ playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) else usr << "All the leaves have fallen off the nettle from violent whacking." - del(src) + qdel(src) /obj/item/weapon/grown/nettle/changePotency(newValue) //-QualityVan potency = newValue @@ -220,7 +220,7 @@ else usr << "All the leaves have fallen off the deathnettle from violent whacking." - del(src) + qdel(src) /obj/item/weapon/grown/deathnettle/changePotency(newValue) //-QualityVan potency = newValue @@ -235,6 +235,6 @@ if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/kitchenknife/ritual)) user << "You use [W] to fashion a pipe out of the corn cob!" new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc) - del(src) + qdel(src) return */ \ No newline at end of file diff --git a/code/game/objects/items/weapons/module.dm b/code/game/objects/items/weapons/module.dm deleted file mode 100644 index 51a045cba13..00000000000 --- a/code/game/objects/items/weapons/module.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/item/weapon/module - icon = 'icons/obj/module.dmi' - icon_state = "std_module" - w_class = 2.0 - item_state = "electronic" - flags = CONDUCT - var/mtype = 1 // 1=electronic 2=hardware - -/obj/item/weapon/module/card_reader - name = "card reader module" - icon_state = "card_mod" - desc = "An electronic module for reading data and ID cards." - -/obj/item/weapon/module/power_control - name = "power control module" - icon_state = "power_mod" - desc = "Heavy-duty switching circuits for power control." - -/obj/item/weapon/module/id_auth - name = "\improper ID authentication module" - icon_state = "id_mod" - desc = "A module allowing secure authorization of ID cards." - -/obj/item/weapon/module/cell_power - name = "power cell regulator module" - icon_state = "power_mod" - desc = "A converter and regulator allowing the use of power cells." - -/obj/item/weapon/module/cell_power - name = "power cell charger module" - icon_state = "power_mod" - desc = "Charging circuits for power cells." \ No newline at end of file diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm index 546d0df61b4..df8c9fc329c 100644 --- a/code/game/objects/items/weapons/shards.dm +++ b/code/game/objects/items/weapons/shards.dm @@ -35,10 +35,6 @@ else ..() -/obj/item/weapon/shard/Destroy() - ..() - return QDEL_HINT_PUTINPOOL - /obj/item/weapon/shard/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = I diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 5b700bf7181..bd4dd452887 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -37,7 +37,7 @@ max_w_class = 2 storage_slots = 30 can_hold = list() // any - cant_hold = list("/obj/item/weapon/disk/nuclear","/obj/item/flag/nation") + cant_hold = list("/obj/item/weapon/disk/nuclear") /obj/item/weapon/storage/bag/trash/suicide_act(mob/user) user.visible_message("[user] puts the [src.name] over their head and starts chomping at the insides! Disgusting!") @@ -88,7 +88,7 @@ storage_slots = 7 display_contents_with_number = 0 //or else this will lead to stupid behavior. can_hold = list() // any - cant_hold = list("/obj/item/weapon/disk/nuclear","/obj/item/flag/nation") + cant_hold = list("/obj/item/weapon/disk/nuclear") var/head = 0 /obj/item/weapon/storage/bag/plasticbag/mob_can_equip(M as mob, slot) @@ -248,7 +248,7 @@ usr.client.screen -= S S.dropped(usr) if(!S.amount) - del(S) + qdel(S) else S.loc = src @@ -293,7 +293,7 @@ N.amount = stacksize S.amount -= stacksize if(!S.amount) - del(S) // todo: there's probably something missing here + qdel(S) // todo: there's probably something missing here orient2hud(usr) if(usr.s_active) usr.s_active.show_to(usr) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index f409324844b..83bc2eedb6c 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -476,9 +476,9 @@ else target.ex_act(1) if (isobj(target)) if (target) - del(target) + qdel(target) if (src) - del(src) + qdel(src) */ /obj/item/weapon/storage/belt/bluespace/attack(mob/M as mob, mob/user as mob, def_zone) diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index ac1aba944ba..33ddaf498f2 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -10,6 +10,10 @@ verbs -= /obj/item/verb/verb_pickup //make sure this is never picked up. ..() +/obj/item/weapon/storage/internal/Destroy() + master_item = null + return ..() + /obj/item/weapon/storage/internal/attack_hand() return //make sure this is never picked up diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index aa0d0e116f1..08618fe8a08 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -19,6 +19,10 @@ src.ion_trail.set_up(src) return +/obj/item/weapon/tank/jetpack/Destroy() + qdel(ion_trail) + ion_trail = null + return ..() /obj/item/weapon/tank/jetpack/examine(mob/user) if(!..(user, 0)) @@ -160,4 +164,4 @@ var/allgases = G.carbon_dioxide + G.nitrogen + G.oxygen + G.toxins if(allgases >= 0.005) . = 1 - qdel(G) \ No newline at end of file + qdel(G) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index dc560095e3d..bc65d324d82 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,6 +1,5 @@ /obj //var/datum/module/mod //not used - var/w_amt = 0 // waster amounts var/origin_tech = null //Used by R&D to determine what research bonuses it grants. var/reliability = 100 //Used by SOME devices to determine how reliable they are. var/crit_fail = 0 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 3f9b54be569..7dcc838b66f 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -53,9 +53,9 @@ new /obj/item/weapon/storage/toolbox/electrical(src) new /obj/item/weapon/storage/toolbox/electrical(src) new /obj/item/weapon/storage/toolbox/electrical(src) - new /obj/item/weapon/module/power_control(src) - new /obj/item/weapon/module/power_control(src) - new /obj/item/weapon/module/power_control(src) + new /obj/item/weapon/apc_electronics(src) + new /obj/item/weapon/apc_electronics(src) + new /obj/item/weapon/apc_electronics(src) new /obj/item/device/multitool(src) new /obj/item/device/multitool(src) new /obj/item/device/multitool(src) @@ -149,4 +149,4 @@ new /obj/item/clothing/suit/fire/atmos(src) new /obj/item/clothing/head/hardhat/atmos(src) - return + return \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 0fc9a950580..9fc267f35fe 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -53,7 +53,7 @@ //If you want to re-add fire, just add "fire" = 15 to the pick list. /*if ("fire") new /obj/structure/closet/firecloset(src.loc) - del(src)*/ + qdel(src)*/ /obj/structure/closet/emcloset/legacy/New() new /obj/item/weapon/tank/oxygen(src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 114cde56810..938fcc2ccf3 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -11,7 +11,7 @@ var/global/list/captain_display_cases = list() for(var/obj/structure/displaycase/D in captain_display_cases) if(istype(D)) D.ue = fingerprint - + return 1 /obj/structure/displaycase_frame @@ -72,7 +72,7 @@ var/global/list/captain_display_cases = list() sensor.forceMove(src) user << "You add the proximity sensor to the frame." playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - + if(pstate != state) pstate = state update_icon() @@ -100,7 +100,7 @@ var/global/list/captain_display_cases = list() var/ue = null var/image/occupant_overlay = null var/obj/item/weapon/airlock_electronics/circuit - + /obj/structure/displaycase/captains_laser name = "captain's display case" desc = "A display case for the captain's antique laser gun. Hooked up with an anti-theft system." @@ -113,17 +113,17 @@ var/global/list/captain_display_cases = list() spawn(5) occupant = new /obj/item/weapon/gun/energy/laser/captain(src) update_icon() - + /obj/structure/displaycase/Destroy() dump() qdel(circuit) circuit = null return ..() - + /obj/structure/displaycase/captains_laser/Destroy() captain_display_cases -= src return ..() - + /obj/structure/displaycase/examine(mob/user) ..(user) user << "Peering through the glass, you see that it contains:" @@ -141,7 +141,7 @@ var/global/list/captain_display_cases = list() /obj/structure/displaycase/ex_act(severity) switch(severity) if (1) - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) if (occupant) dump() qdel(src) @@ -163,7 +163,7 @@ var/global/list/captain_display_cases = list() /obj/structure/displaycase/blob_act() if (prob(75)) - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) if(occupant) dump() qdel(src) @@ -173,15 +173,15 @@ var/global/list/captain_display_cases = list() if (!( src.destroyed )) src.density = 0 src.destroyed = 1 - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) playsound(get_turf(src), "shatter", 70, 1) - update_icon() + update_icon() spawn(0) burglar_alarm() else playsound(get_turf(src), 'sound/effects/Glasshit.ogg', 75, 1) return - + /obj/structure/displaycase/proc/burglar_alarm() if(burglar_alarm) var/area/alarmed = get_area(src) @@ -237,7 +237,7 @@ var/global/list/captain_display_cases = list() C.conf_access = req_access else C.conf_access = req_one_access - + if(!destroyed) var/obj/structure/displaycase_frame/F = new(T) F.state = DISPLAYCASE_FRAME_SCREWDRIVER @@ -260,7 +260,7 @@ var/global/list/captain_display_cases = list() else if(!locked) dump() user << "You smash \the [W] into the delicate electronics at the bottom of the case, and deactivate the hover field." - update_icon() + update_icon() else if(locked) user << "It's locked, you can't put anything into it." diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 1d7dc74320d..e6a28d33a1c 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -36,10 +36,6 @@ //height=42 icon='icons/fence-ns.dmi' -/obj/structure/grille/Destroy() - ..() - return QDEL_HINT_PUTINPOOL //pool grilles - /obj/structure/grille/ex_act(severity) qdel(src) @@ -220,11 +216,11 @@ icon_state = "brokengrille" density = 0 destroyed = 1 - PoolOrNew(/obj/item/stack/rods,loc) + new /obj/item/stack/rods(loc) else if(health <= -6) - PoolOrNew(/obj/item/stack/rods,loc) + new /obj/item/stack/rods(loc) qdel(src) return return diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index c59bcaf648b..1be4d60dea0 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -13,7 +13,7 @@ /obj/structure/lamarr/ex_act(severity) switch(severity) if (1) - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) Break() qdel(src) if (2) @@ -35,16 +35,16 @@ /obj/structure/lamarr/blob_act() if (prob(75)) - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) Break() qdel(src) - + /obj/structure/lamarr/proc/healthcheck() if (src.health <= 0) if (!( src.destroyed )) src.density = 0 src.destroyed = 1 - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) playsound(src, "shatter", 70, 1) Break() else diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index b12907a150f..6b27e8104d2 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -66,7 +66,7 @@ /obj/structure/lattice/proc/updateOverlays() //if(!(istype(src.loc, /turf/space))) - // del(src) + // qdel(src) spawn(1) overlays = list() diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index ee2b57d19d7..d23de20410c 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -318,9 +318,6 @@ return else - if(!isemptylist(search_contents_for(/obj/item/flag/nation))) - usr << "You get the feeling that you shouldn't cremate one of the items in the cremator." - return for (var/mob/M in viewers(src)) M.show_message("\red You hear a roar as the crematorium activates.", 1) @@ -417,7 +414,7 @@ usr << "\red Access denied." return -/hook/Login/proc/update_morgue(var/client/client, var/mob/L) +/hook/Login/proc/update_morgue(var/client/client, var/mob/L) //Update morgues on login/logout if (L.stat == DEAD) var/obj/structure/morgue/Morgue = null @@ -440,8 +437,8 @@ Morgue = B.loc if (Morgue) Morgue.update() - -/hook/Logout/proc/update_morgue(var/client/client, var/mob/L) + +/hook/Logout/proc/update_morgue(var/client/client, var/mob/L) //Update morgues on login/logout if (L.stat == DEAD) var/obj/structure/morgue/Morgue = null diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index a1c6b4659bf..b173ece5b0b 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -22,8 +22,7 @@ /datum/song/Destroy() instrumentObj = null - ..() - return QDEL_HINT_QUEUE + return ..() // note is a number from 1-7 for A-G // acc is either "b", "n", or "#" @@ -69,7 +68,7 @@ /datum/song/proc/shouldStopPlaying(mob/user) if(instrumentObj) - //if(!user.canUseTopic(instrumentObj)) + //if(!user.canUseTopic(instrumentObj)) //return 1 return !instrumentObj.anchored // add special cases to stop in subclasses else @@ -281,7 +280,7 @@ /datum/song/proc/sanitize_tempo(new_tempo) new_tempo = abs(new_tempo) - return max(round(new_tempo, world.tick_lag), world.tick_lag) + return max(round(new_tempo, world.tick_lag), world.tick_lag) // subclass for handheld instruments, like violin /datum/song/handheld @@ -324,7 +323,7 @@ qdel(song) song = null return ..() - + /obj/structure/piano/initialize() song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded ..() 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 38f67bf51be..2f0d1567624 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -7,8 +7,6 @@ var/propelled = 0 // Check for fire-extinguisher-driven chairs /obj/structure/stool/bed/chair/New() - if(anchored) - src.verbs -= /atom/movable/verb/pull ..() spawn(3) //sorry. i don't think there's a better way to do this. handle_rotation() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index de093841e70..493fca35423 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -729,9 +729,9 @@ /obj/structure/table/glass/proc/collapse() //glass table collapse is called twice in this code, more efficent to just have a proc src.visible_message("\The [src] shatters, and the frame collapses!", "You hear metal collapsing and glass shattering.") new /obj/item/weapon/table_parts/glass(loc) - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) if(prob(50)) //50% chance to spawn two shards - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) qdel(src) /obj/structure/table/glass/attackby(obj/item/I as obj, mob/user as mob, params) diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 61459684816..eabfcba148b 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -90,7 +90,7 @@ moving = 0 -// Should I return a copy here? If the caller edits or del()s the returned +// Should I return a copy here? If the caller edits or qdel()s the returned // datum, there might be problems if I don't... /obj/structure/transit_tube_pod/return_air() var/datum/gas_mixture/GM = new() diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 02aed69966e..928d0c5ec2c 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -53,7 +53,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f // This should result in the same materials used to make the window. /obj/structure/window/proc/destroy() for(var/i=0;i 7) //Disassemble deconstructed window into parts playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) for(var/i=0;i= 100) if(!dirtoverlay) dirtoverlay = new/obj/effect/decal/cleanable/dirt(src) dirtoverlay.alpha = 10 else if(dirt > 100) - dirtoverlay.alpha = min(dirtoverlay.alpha+10, 200) - if(istype(M.shoes, /obj/item/clothing/shoes/clown_shoes)) - var/obj/item/clothing/shoes/clown_shoes/O = M.shoes - if(M.m_intent == "run") - if(O.footstep >= 2) - O.footstep = 0 - playsound(src, "clownstep", 50, 1) // this will get annoying very fast. - else - O.footstep++ - else - playsound(src, "clownstep", 20, 1) - if(istype(M.shoes, /obj/item/clothing/shoes/jackboots)) - var/obj/item/clothing/shoes/jackboots/O = M.shoes - if(M.m_intent == "run") - if(O.footstep >= 2) - O.footstep = 0 - playsound(src, "jackboot", 50, 1) // this will get annoying very fast. - else - O.footstep++ - else - playsound(src, "jackboot", 20, 1) + dirtoverlay.alpha = min(dirtoverlay.alpha + 10, 200) + + if(ishuman(A)) + var/mob/living/carbon/human/M = A + if(M.lying) + return 1 if(M.flying) return ..() // Tracking blood var/list/bloodDNA = null - var/bloodcolor="" + var/bloodcolor = "" if(M.shoes) var/obj/item/clothing/shoes/S = M.shoes if(S.track_blood && S.blood_DNA) bloodDNA = S.blood_DNA - bloodcolor=S.blood_color + bloodcolor = S.blood_color S.track_blood-- else if(M.track_blood && M.feet_blood_DNA) bloodDNA = M.feet_blood_DNA - bloodcolor=M.feet_blood_color + bloodcolor = M.feet_blood_color M.track_blood-- if (bloodDNA) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 26757340fc8..9b2e9b7064d 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -44,6 +44,14 @@ var/list/wood_icons = list("wood","wood-broken") else icon_regular_floor = icon_state + +/turf/simulated/floor/Destroy() + if(floor_tile) + qdel(floor_tile) + floor_tile = null + return ..() + + //turf/simulated/floor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) // if ((istype(mover, /obj/machinery/vehicle) && !(src.burnt))) // if (!( locate(/obj/machinery/mass_driver, src) )) @@ -210,26 +218,7 @@ var/list/wood_icons = list("wood","wood-broken") var/obj/item/stack/tile/light/T = floor_tile T.on = !T.on update_icon() - if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) - return - if (user.pulling.anchored || !isturf(user.pulling.loc)) - return - if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) - return - if (ismob(user.pulling)) - var/mob/M = user.pulling - -// if(M==user) //temporary hack to stop runtimes. ~Carn -// user.stop_pulling() //but...fixed the root of the problem -// return //shoudn't be needed now, unless somebody fucks with pulling again. - - var/mob/t = M.pulling - M.stop_pulling() - step(user.pulling, get_dir(user.pulling.loc, src)) - M.start_pulling(t) - else - step(user.pulling, get_dir(user.pulling.loc, src)) - return + ..() /turf/simulated/floor/proc/gets_drilled() return diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index 03d158b8501..9c74178259f 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -324,7 +324,7 @@ /** ACT UNSIMULATED! **/ /* assume_air(datum/gas_mixture/giver) //use this for machines to adjust air - del(giver) + qdel(giver) return 0 return_air() diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 82379c9defd..699569bfe87 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -32,12 +32,6 @@ /obj/structure/falsewall/reinforced // WHY DO WE SMOOTH WITH FALSE R-WALLS WHEN WE DON'T SMOOTH WITH REAL R-WALLS. ) - -/turf/simulated/wall/Del() - for(var/obj/effect/E in src) - if(E.name == "Wallrot") - qdel(E) - /turf/simulated/wall/ChangeTurf(var/newtype) for(var/obj/effect/E in src) if(E.name == "Wallrot") @@ -283,6 +277,7 @@ user << "\blue You push the wall but nothing happens!" playsound(src, 'sound/weapons/Genhit.ogg', 25, 1) src.add_fingerprint(user) + ..() return /turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob, params) diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index 09656143c3c..c7b992ec9b0 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -31,6 +31,7 @@ user << "\blue You push the wall but nothing happens!" playsound(src, 'sound/weapons/Genhit.ogg', 25, 1) src.add_fingerprint(user) + ..() return diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 9cafaf48198..d2b75dd22c6 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -31,23 +31,6 @@ else set_light(0) -/turf/space/attack_hand(mob/user as mob) - if ((user.restrained() || !( user.pulling ))) - return - if (user.pulling.anchored || !isturf(user.pulling.loc)) - return - if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) - return - if (ismob(user.pulling)) - var/mob/M = user.pulling - var/atom/movable/t = M.pulling - M.stop_pulling() - step(user.pulling, get_dir(user.pulling.loc, src)) - M.start_pulling(t) - else - step(user.pulling, get_dir(user.pulling.loc, src)) - return - /turf/space/attackby(obj/item/C as obj, mob/user as mob, params) if (istype(C, /obj/item/stack/rods)) @@ -87,10 +70,10 @@ /turf/space/Entered(atom/movable/A as mob|obj) ..() - if ((!(A) || src != A.loc)) + if ((!(A) || src != A.loc)) return - if(destination_z) + if(destination_z) A.x = destination_x A.y = destination_y A.z = destination_z diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 0ad197e085e..85494318fa9 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -1,6 +1,6 @@ /turf icon = 'icons/turf/floors.dmi' - level = 1.0 + level = 1 luminosity = 1 //for floors, use is_plating(), is_plasteel_floor() and is_light_floor() @@ -20,12 +20,6 @@ var/temperature = T20C var/blocks_air = 0 - var/icon_old = null - var/pathweight = 1 - - //Mining resource generation stuff. - var/has_resources - var/list/resources var/PathNode/PNode = null //associated PathNode in the A* algorithm @@ -39,13 +33,9 @@ ..() for(var/atom/movable/AM in src) Entered(AM) - return /turf/Destroy() - return QDEL_HINT_HARDDEL_NOW - // Adds the adjacent turfs to the current atmos processing -/turf/Del() if(air_master) for(var/direction in cardinal) if(atmos_adjacent_turfs & direction) @@ -53,6 +43,10 @@ if(istype(T)) air_master.add_to_active(T) ..() + return QDEL_HINT_HARDDEL_NOW + +/turf/attack_hand(mob/user as mob) + user.Move_Pulled(src) /turf/ex_act(severity) return 0 diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index cd36c4a1bb5..b10885c7467 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -3,23 +3,6 @@ icon = 'icons/turf/floors.dmi' icon_state = "Floor3" -/turf/unsimulated/floor/attack_hand(var/mob/user as mob) - if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) - return - if (user.pulling.anchored || !isturf(user.pulling.loc)) - return - if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) - return - if (ismob(user.pulling)) - var/mob/M = user.pulling - var/mob/t = M.pulling - M.stop_pulling() - step(user.pulling, get_dir(user.pulling.loc, src)) - M.start_pulling(t) - else - step(user.pulling, get_dir(user.pulling.loc, src)) - return - /turf/unsimulated/floor/grass icon_state = "grass1" diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm index fbb4a981811..d1525fde451 100644 --- a/code/game/vehicles/spacepods/spacepod.dm +++ b/code/game/vehicles/spacepods/spacepod.dm @@ -71,6 +71,26 @@ spacepods_list += src /obj/spacepod/Destroy() + qdel(equipment_system) + equipment_system = null + qdel(battery) + battery = null + qdel(cabin_air) + cabin_air = null + qdel(internal_tank) + internal_tank = null + qdel(pr_int_temp_processor) + pr_int_temp_processor = null + qdel(pr_give_air) + pr_give_air = null + qdel(ion_trail) + ion_trail = null + if(occupant) + occupant.forceMove(get_turf(src)) + occupant = null + if(occupant2) + occupant2.forceMove(get_turf(src)) + occupant2 = null spacepods_list -= src return ..() @@ -108,7 +128,7 @@ /obj/spacepod/attack_animal(mob/living/simple_animal/user as mob) if(user.melee_damage_upper == 0) - user.emote("[user.friendly] [src]") + user.custom_emote(1, "[user.friendly] [src]") else var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) deal_damage(damage) diff --git a/code/game/vehicles/vehicle.dm b/code/game/vehicles/vehicle.dm index a61015cf6d6..04413a62f44 100644 --- a/code/game/vehicles/vehicle.dm +++ b/code/game/vehicles/vehicle.dm @@ -74,7 +74,6 @@ add_cell() add_iterators() removeVerb(/obj/mecha/verb/disconnect_from_port) - removeVerb(/atom/movable/verb/pull) log_message("[src.name]'s functions initialised. Work protocols active - Entering IDLE mode.") loc.Entered(src) return diff --git a/code/game/verbs/atom_verbs.dm b/code/game/verbs/atom_verbs.dm deleted file mode 100644 index 4f77bf52f4c..00000000000 --- a/code/game/verbs/atom_verbs.dm +++ /dev/null @@ -1,8 +0,0 @@ -/atom/movable/verb/pull() - set name = "Pull" - set category = null - set src in oview(1) - - if(Adjacent(usr)) - usr.start_pulling(src) - return diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index 88077425c67..b7b2a0d3683 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -50,6 +50,12 @@ icon = 'icons/misc/buildmode.dmi' var/obj/effect/bmode/buildholder/master = null +/obj/effect/bmode/Destroy() + if(master && master.cl) + master.cl.screen -= src + master = null + return ..() + /obj/effect/bmode/builddir icon_state = "build" screen_loc = "NORTH,WEST" @@ -133,6 +139,19 @@ var/turf/cornerB = null var/generator_path = null +/obj/effect/bmode/buildholder/Destroy() + qdel(builddir) + builddir = null + qdel(buildhelp) + buildhelp = null + qdel(buildmode) + buildmode = null + qdel(buildquit) + buildquit = null + throw_atom = null + cl = null + return ..() + /obj/effect/bmode/buildmode icon_state = "buildmode1" screen_loc = "NORTH,WEST+2" diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 17a2fc42239..9a62cc44a34 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -16,7 +16,7 @@ var/list/admin_datums = list() /datum/admins/New(initial_rank = "Temporary Admin", initial_rights = 0, ckey) if(!ckey) error("Admin datum created without a ckey argument. Datum has been deleted") - del(src) + qdel(src) return admincaster_signature = "Nanotrasen Officer #[rand(0,9)][rand(0,9)][rand(0,9)]" rank = initial_rank @@ -86,7 +86,7 @@ you will have to do something like if(client.holder.rights & R_ADMIN) yourself. holder.disassociate() del(holder) return 1 - + //This proc checks whether subject has at least ONE of the rights specified in rights_required. /proc/check_rights_for(client/subject, rights_required) if(subject && subject.holder) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 92691e78d69..064878a7696 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -477,22 +477,6 @@ dat += "Head not found!" dat += "" - if(ticker.mode.name == "nations") - dat += "
" - for(var/obj/item/flag/nation/N in world) - dat += "" - dat += "
Flags(s)
[N.name], " - var/atom/flag_loc = N.loc - while(!istype(flag_loc, /turf)) - if(istype(flag_loc, /mob)) - var/mob/M = flag_loc - dat += "carried by [M.real_name] " - if(istype(flag_loc, /obj)) - var/obj/O = flag_loc - dat += "in \a [O.name] " - flag_loc = flag_loc.loc - dat += "in [flag_loc.loc] at ([flag_loc.x], [flag_loc.y], [flag_loc.z])
" - if(istype(ticker.mode, /datum/game_mode/blob)) var/datum/game_mode/blob/mode = ticker.mode dat += "
" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 1b21829f739..c58d9edf765 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -25,7 +25,7 @@ message_admins("[key_name_admin(usr)] rejected [key_name_admin(C.mob)]'s admin help") log_admin("[key_name(usr)] rejected [key_name(C.mob)]'s admin help") - + if(href_list["stickyban"]) stickyban(href_list["stickyban"],href_list) @@ -1062,7 +1062,7 @@ message_admins("\blue [key_name_admin(usr)] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.") del(M.client) - //del(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends. + //qdel(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends. if("No") var/reason = input(usr,"Please state the reason","Reason") as message|null if(!reason) @@ -1086,7 +1086,7 @@ DB_ban_record(BANTYPE_PERMA, M, -1, reason) del(M.client) - //del(M) + //qdel(M) if("Cancel") return @@ -2173,7 +2173,7 @@ log_admin("[key_name(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]") else usr << "You may only use this when the game is running." - + else if(href_list["memoeditlist"]) if(!check_rights(R_SERVER)) return var/sql_key = sanitizeSQL("[href_list["memoeditlist"]]") @@ -2216,7 +2216,7 @@ if (M.client) M.client.perspective = MOB_PERSPECTIVE M.client.eye = M - del(O) + qdel(O) ok = 1*/ if("monkey") feedback_inc("admin_secrets_fun_used",1) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 5fcfa3a12c3..3442edb9298 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -17,7 +17,7 @@ /client/proc/SDQL2_query(query_text as message) set category = "Debug" - + if(!check_rights(R_PROCCALL)) //Shouldn't happen... but just to be safe. message_admins("ERROR: Non-admin [key_name_admin(usr)] attempted to execute a SDQL query!") log_admin("Non-admin [key_name(usr)] attempted to execute a SDQL query!") @@ -95,7 +95,7 @@ if("delete") for(var/datum/d in objs) - del d + del(d) if("select") var/text = "" @@ -474,4 +474,3 @@ if(word != "") query_list += word return query_list - \ No newline at end of file diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index cc7f9f1befa..e46d72c338e 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -40,8 +40,8 @@ var/intercom_range_display_status = 0 /client/proc/camera_view() set category = "Mapping" set name = "Camera Range Display" - - if(!check_rights(R_DEBUG)) + + if(!check_rights(R_DEBUG)) return if(camera_range_display_status) @@ -50,7 +50,7 @@ var/intercom_range_display_status = 0 camera_range_display_status = 1 for(var/obj/effect/debugging/camera_range/C in world) - del(C) + qdel(C) if(camera_range_display_status) for(var/obj/machinery/camera/C in cameranet.cameras) @@ -60,8 +60,8 @@ var/intercom_range_display_status = 0 /client/proc/sec_camera_report() set category = "Mapping" set name = "Camera Report" - - if(!check_rights(R_DEBUG)) + + if(!check_rights(R_DEBUG)) return var/list/obj/machinery/camera/CL = list() @@ -99,8 +99,8 @@ var/intercom_range_display_status = 0 /client/proc/intercom_view() set category = "Mapping" set name = "Intercom Range Display" - - if(!check_rights(R_DEBUG)) + + if(!check_rights(R_DEBUG)) return if(intercom_range_display_status) @@ -109,17 +109,17 @@ var/intercom_range_display_status = 0 intercom_range_display_status = 1 for(var/obj/effect/debugging/marker/M in world) - del(M) + qdel(M) if(intercom_range_display_status) for(var/obj/item/device/radio/intercom/I in world) for(var/turf/T in orange(7,I)) var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T) if (!(F in view(7,I.loc))) - del(F) + qdel(F) feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -var/list/admin_verbs_show_debug_verbs = list( +var/list/admin_verbs_show_debug_verbs = list( /client/proc/camera_view, /client/proc/sec_camera_report, /client/proc/intercom_view, @@ -128,7 +128,7 @@ var/list/admin_verbs_show_debug_verbs = list( /client/proc/powerdebug, //check power /client/proc/count_objects_on_z_level, /client/proc/count_objects_all, - /client/proc/cmd_assume_direct_control, + /client/proc/cmd_assume_direct_control, /client/proc/startSinglo, /client/proc/ticklag, /client/proc/cmd_admin_grantfullaccess, @@ -140,12 +140,12 @@ var/list/admin_verbs_show_debug_verbs = list( /client/proc/forceEvent, /client/proc/nanomapgen_DumpImage ) - + /client/proc/enable_debug_verbs() set category = "Debug" set name = "Debug verbs" - if(!check_rights(R_DEBUG)) + if(!check_rights(R_DEBUG)) return verbs += admin_verbs_show_debug_verbs @@ -155,10 +155,10 @@ var/list/admin_verbs_show_debug_verbs = list( /client/proc/count_objects_on_z_level() set category = "Mapping" set name = "Count Objects On Level" - - if(!check_rights(R_DEBUG)) - return - + + if(!check_rights(R_DEBUG)) + return + var/level = input("Which z-level?","Level?") as text if(!level) return var/num_level = text2num(level) @@ -193,8 +193,8 @@ var/list/admin_verbs_show_debug_verbs = list( /client/proc/count_objects_all() set category = "Mapping" set name = "Count Objects All" - - if(!check_rights(R_DEBUG)) + + if(!check_rights(R_DEBUG)) return var/type_text = input("Which type path?","") as text diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 93e5bb5c078..ad25fab49ce 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -279,12 +279,12 @@ client/proc/one_click_antag() for (var/obj/effect/landmark/A in /area/syndicate_station/start)//Because that's the only place it can BE -Sieve if (A.name == "Syndicate-Gear-Closet") new /obj/structure/closet/syndicate/personal(A.loc) - del(A) + qdel(A) continue if (A.name == "Syndicate-Bomb") new /obj/effect/spawner/newbomb/timer/syndicate(A.loc) - del(A) + qdel(A) continue for(var/datum/mind/synd_mind in ticker.mode.syndicates) diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm index 23f4df6116b..016b4c891a0 100644 --- a/code/modules/admin/verbs/onlyoneteam.dm +++ b/code/modules/admin/verbs/onlyoneteam.dm @@ -2,12 +2,12 @@ if(!ticker) alert("The game hasn't started yet!") return - + var/list/incompatible_species = list("Plasmaman") for(var/mob/living/carbon/human/H in player_list) - if(H.stat == DEAD || !(H.client)) + if(H.stat == DEAD || !(H.client)) continue - if(is_special_character(H)) + if(is_special_character(H)) continue if(H.species.name in incompatible_species) H.set_species("Human") @@ -55,7 +55,7 @@ H.species.equip(H) H.regenerate_icons() - + message_admins("[key_name_admin(usr)] used DODGEBAWWWWWWWL! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1) log_admin("[key_name(usr)] used dodgeball.") nologevent = 1 @@ -85,6 +85,6 @@ return else playsound(src, 'sound/items/dodgeball.ogg', 50, 1) - visible_message("[H] HAS BEEN ELIMINATED!", 3) + visible_message("[H] HAS BEEN ELIMINATED!") H.melt() return diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index adea7ceaad6..9d4f9565e50 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -84,7 +84,7 @@ var/global/sent_strike_team = 0 var/obj/item/weapon/paper/P = new(L.loc) P.info = "

Good morning soldier!. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:
#1 Work as a team.
#2 Accomplish your objective at all costs.
#3 Leave no witnesses.
You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.
If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.

In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations LEADER is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.

Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.
First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.
To make the device functional:
#1 Place bomb in designated detonation zone
#2 Extend and anchor bomb (attack with hand).
#3 Insert Nuclear Auth. Disk into slot.
#4 Type numeric code into keypad ([nuke_code]).
Note: If you make a mistake press R to reset the device.
#5 Press the E button to log onto the device.
You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.
Note: Toggle off the SAFETY.
Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
Note: THE BOMB IS STILL SET AND WILL DETONATE
Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.

The nuclear authorization code is: [nuke_code ? nuke_code : "None provided"]

Good luck, soldier!

" P.name = "Spec. Ops Manual" - P.icon = "pamphlet-ds" + P.icon = "pamphlet-ds" var/obj/item/weapon/stamp/centcom/stamp = new P.stamp(stamp) qdel(stamp) @@ -92,7 +92,7 @@ var/global/sent_strike_team = 0 for (var/obj/effect/landmark/L in landmarks_list) if (L.name == "Commando-Bomb") new /obj/effect/spawner/newbomb/timer/syndicate(L.loc) - del(L) + qdel(L) message_admins("\blue [key_name_admin(usr)] has spawned a CentCom strike squad.", 1) log_admin("[key_name(usr)] used Spawn Death Squad.") diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm index 03992278776..d609b5f8ac7 100644 --- a/code/modules/admin/verbs/striketeam_syndicate.dm +++ b/code/modules/admin/verbs/striketeam_syndicate.dm @@ -93,7 +93,7 @@ var/global/sent_syndicate_strike_team = 0 for (var/obj/effect/landmark/L in landmarks_list) if (L.name == "Syndicate-Commando-Bomb") new /obj/effect/spawner/newbomb/timer/syndicate(L.loc) - del(L) + qdel(L) message_admins("\blue [key_name_admin(usr)] has spawned a Syndicate strike squad.", 1) log_admin("[key_name(usr)] used Spawn Syndicate Squad.") @@ -121,7 +121,7 @@ var/global/sent_syndicate_strike_team = 0 new_syndicate_commando.mind.special_role = "Syndicate Commando" ticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list. new_syndicate_commando.equip_syndicate_commando(syndicate_leader_selected) - del(spawn_location) + qdel(spawn_location) return new_syndicate_commando /mob/living/carbon/human/proc/equip_syndicate_commando(syndicate_leader_selected = 0) diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index ceb621e2e18..29c13f4a6bc 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -3,34 +3,43 @@ desc = "A small electronic device able to ignite combustable substances." icon_state = "igniter" materials = list(MAT_METAL=500, MAT_GLASS=50) - w_amt = 10 origin_tech = "magnets=1" + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread - describe() - return "The igniter is [secured?"secured.":"unsecured."]" +/obj/item/device/assembly/igniter/New() + ..() + sparks.set_up(2, 0, src) + sparks.attach(src) +/obj/item/device/assembly/igniter/Destroy() + qdel(sparks) + sparks = null + return ..() + + +/obj/item/device/assembly/igniter/describe() + return "The igniter is [secured?"secured.":"unsecured."]" + + +/obj/item/device/assembly/igniter/activate() + if(!..()) return 0//Cooldown check + var/turf/location = get_turf(loc) + if(location) location.hotspot_expose(1000,1000) + if (istype(src.loc,/obj/item/device/assembly_holder)) + if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) + var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc + if (tank) + tank.explode() + if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/)) + var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc + if(beakerbomb) + beakerbomb.heat_beaker() + + sparks.start() + return 1 + + +/obj/item/device/assembly/igniter/attack_self(mob/user as mob) activate() - if(!..()) return 0//Cooldown check - var/turf/location = get_turf(loc) - if(location) location.hotspot_expose(1000,1000) - if (istype(src.loc,/obj/item/device/assembly_holder)) - if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) - var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc - if (tank) - tank.explode() - if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/)) - var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc - if(beakerbomb) - beakerbomb.heat_beaker() - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - - return 1 - - - attack_self(mob/user as mob) - activate() - add_fingerprint(user) - return \ No newline at end of file + add_fingerprint(user) + return \ No newline at end of file diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index 70a822cd8fb..d34dc9e4c76 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -11,7 +11,9 @@ /obj/item/assembly/shock_kit/Destroy() qdel(part1) + part1 = null qdel(part2) + part2 = null return ..() /obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob, params) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 86b4037b1b9..fe33be50f48 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -27,6 +27,12 @@ spawn(1) // For things that set the frequency directly set_frequency(frequency) return + + Destroy() + if(radio_controller) + radio_controller.remove_object(src,frequency) + return ..() + describe() return "\The [src]'s power light is [receiving?"on":"off"]" diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index f472b070830..4612979c125 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -84,7 +84,7 @@ if(src.coffin == 1) var/obj/structure/closet/coffin/sarcophagus/sarc = locate(/obj/structure/closet/coffin/sarcophagus) in loc if(sarc) M.loc = sarc - del(src) + qdel(src) diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm index 5c2ccfe7166..3ae2da35068 100644 --- a/code/modules/awaymissions/loot.dm +++ b/code/modules/awaymissions/loot.dm @@ -21,4 +21,4 @@ continue new loot_path(get_turf(src)) - del(src) \ No newline at end of file + qdel(src) \ No newline at end of file diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index daf34508f5b..0ec790896f6 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -321,7 +321,7 @@ var/global/dmm_suite/preloader/_preloader = null /dmm_suite/preloader/New(var/list/the_attributes, var/path) .=..() if(!the_attributes.len) - Del() + del(src) return attributes = the_attributes target_path = path @@ -329,4 +329,4 @@ var/global/dmm_suite/preloader/_preloader = null /dmm_suite/preloader/proc/load(atom/what) for(var/attribute in attributes) what.vars[attribute] = attributes[attribute] - Del() \ No newline at end of file + del(src) \ No newline at end of file diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 19ab6d2a366..a642bb0e823 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -2,6 +2,7 @@ name = "clothing" var/list/species_restricted = null //Only these species can wear this kit. var/rig_restrict_helmet = 0 // Stops the user from equipping a rig helmet without attaching it to the suit first. + var/scan_reagents = 0 //Can the wearer see reagents while it's equipped? /* Sprites used when the clothing item is refit. This is done by setting icon_override. @@ -245,7 +246,6 @@ BLIND // can't see anything icon = 'icons/obj/clothing/hats.dmi' body_parts_covered = HEAD slot_flags = SLOT_HEAD - var/loose = 10 // probability (0..100) of coming off your head when you fall over or lay down var/blockTracking // Do we block AI tracking? var/flash_protect = 0 var/tint = 0 @@ -346,7 +346,6 @@ BLIND // can't see anything max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT siemens_coefficient = 0.9 species_restricted = list("exclude","Diona","Vox","Wryn") - loose = 0 // What kind of idiot designs a pressurized suit where the helmet can fall off? flash_protect = 2 /obj/item/clothing/suit/space diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 209ce95acbe..f2b3dad9843 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -78,10 +78,29 @@ prescription_upgradable = 0 /obj/item/clothing/glasses/science - name = "Science Goggles" - desc = "nothing" + name = "science goggles" + desc = "A pair of snazzy goggles used to protect against chemical spills. Fitted with an analyzer for scanning items and reagents." icon_state = "purple" item_state = "glasses" + prescription_upgradable = 0 + scan_reagents = 1 //You can see reagents while wearing science goggles + +/obj/item/clothing/glasses/science/equipped(mob/user, slot) + if(slot == slot_glasses) + user.scanner.Grant(user) + ..(user, slot) + +/obj/item/clothing/glasses/science/dropped(mob/user) + user.scanner.devices -= 1 + ..(user) + +/obj/item/clothing/glasses/science/night + name = "Night Vision Science Goggle" + desc = "Now you can science in darkness." + icon_state = "nvpurple" + item_state = "glasses" + darkness_view = 8 + see_darkness = 0 /obj/item/clothing/glasses/janitor name = "Janitorial Goggles" @@ -176,6 +195,11 @@ "Vox" = 'icons/mob/species/vox/eyes.dmi' ) +/obj/item/clothing/glasses/sunglasses/reagent + name = "sunscanners" + desc = "Strangely ancient technology used to help provide rudimentary eye color. Outfitted with apparatus to scan individual reagents." + scan_reagents = 1 + /obj/item/clothing/glasses/virussunglasses desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." name = "sunglasses" diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 1cec0a26bb8..d1376bf3b8a 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -9,46 +9,39 @@ name = "ultra rare Pete's hat!" desc = "It smells faintly of plasma" icon_state = "petehat" - loose = 0 /obj/item/clothing/head/collectable/slime name = "collectable slime cap!" desc = "It just latches right in place!" icon_state = "slime" - loose = 0 /obj/item/clothing/head/collectable/xenom name = "collectable xenomorph helmet!" desc = "Hiss hiss hiss!" icon_state = "xenom" - loose = 35 // Zoinks! It was old man McGrief all along! /obj/item/clothing/head/collectable/chef name = "collectable chef's hat" desc = "A rare Chef's Hat meant for hat collectors!" icon_state = "chef" item_state = "chef" - loose = 45 // Mama mia! /obj/item/clothing/head/collectable/paper name = "collectable paper hat" desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians." icon_state = "paper" - loose = 99 // fucking paper /obj/item/clothing/head/collectable/tophat name = "collectable top hat" desc = "A top hat worn by only the most prestigious hat collectors." icon_state = "tophat" item_state = "that" - loose = 70 // I say! /obj/item/clothing/head/collectable/captain name = "collectable captain's hat" desc = "A Collectable Hat that'll make you look just like a real comdom!" icon_state = "captain" item_state = "caphat" - loose = 55 /obj/item/clothing/head/collectable/police name = "collectable police officer's hat" @@ -65,7 +58,6 @@ desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!" icon_state = "welding" item_state = "welding" - loose = 0 species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/eyes.dmi' @@ -76,68 +68,58 @@ desc = "Just like a real Brain Slug!" icon_state = "headslime" item_state = "headslime" - loose = 5 /obj/item/clothing/head/collectable/flatcap name = "collectable flat cap" desc = "A Collectible farmer's Flat Cap!" icon_state = "flat_cap" item_state = "detective" - loose = 5 /obj/item/clothing/head/collectable/pirate name = "collectable pirate hat" desc = "You'd make a great Dread Syndie Roberts!" icon_state = "pirate" item_state = "pirate" - loose = 55 // yar /obj/item/clothing/head/collectable/kitty name = "collectable kitty ears" desc = "The fur feels.....a bit too realistic." icon_state = "kitty" item_state = "kitty" - loose = 2 // meow /obj/item/clothing/head/collectable/rabbitears name = "collectable rabbit ears" desc = "Not as lucky as the feet!" icon_state = "bunny" item_state = "bunny" - loose = 4 // little bunny foo foo /obj/item/clothing/head/collectable/wizard name = "collectable wizard's hat" desc = "NOTE:Any magical powers gained from wearing this hat are purely coincidental." icon_state = "wizard" - loose = 4 /obj/item/clothing/head/collectable/hardhat name = "collectable hard hat" desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!" icon_state = "hardhat0_yellow" item_state = "hardhat0_yellow" - loose = 9 /obj/item/clothing/head/collectable/HoS name = "collectable HoS hat" desc = "Now you can beat prisoners, set silly sentences and arrest for no reason too!" icon_state = "hoscap" - loose = 29 /obj/item/clothing/head/collectable/thunderdome name = "collectable Thunderdome helmet" desc = "Go Red! I mean Green! I mean Red! No Green!" icon_state = "thunderdome" item_state = "thunderdome" - loose = 6 /obj/item/clothing/head/collectable/swat name = "collectable SWAT helmet" desc = "Now you can be in the Deathsquad too!" icon_state = "swat" item_state = "swat" - loose = 3 species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/helmet.dmi' diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index ca24ab55d80..27afdc3ac0b 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -11,7 +11,6 @@ flags_inv = 0 action_button_name = "Toggle Helmet Light" siemens_coefficient = 0.9 - loose = 4 attack_self(mob/user) if(!isturf(user.loc)) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 3925c983f30..5a98a894fee 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -11,7 +11,6 @@ heat_protection = HEAD max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT siemens_coefficient = 0.7 - loose = 4 // generally well seated species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/helmet.dmi' @@ -126,7 +125,6 @@ item_state = "gladiator" flags_inv = HIDEMASK|HIDEEARS|HIDEEYES siemens_coefficient = 1 - loose = 0 // full head, won't fall off obj/item/clothing/head/helmet/redtaghelm name = "red laser tag helmet" diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 7eedccf7345..69e6cf767e5 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -7,7 +7,6 @@ item_state = "chef" desc = "The commander in chef's head wear." siemens_coefficient = 0.9 - loose = 35 // why-a do people always push-a me over //Captain /obj/item/clothing/head/caphat @@ -17,7 +16,6 @@ item_state = "caphat" siemens_coefficient = 0.9 armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) - loose = 43 // not the answer //Captain: no longer space-worthy /obj/item/clothing/head/caphat/parade @@ -32,7 +30,6 @@ desc = "The symbol of true bureaucratic micromanagement." siemens_coefficient = 0.9 armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) - loose = 43 // not the answer //Nanotrasen Representative /obj/item/clothing/head/ntrep @@ -48,7 +45,6 @@ icon_state = "chaplain_hood" flags = HEADCOVERSEYES | BLOCKHAIR siemens_coefficient = 0.9 - loose = 2 //Chaplain /obj/item/clothing/head/nun_hood @@ -57,7 +53,6 @@ icon_state = "nun_hood" flags = HEADCOVERSEYES | BLOCKHAIR siemens_coefficient = 0.9 - loose = 2 /obj/item/clothing/head/det_hat name = "hat" @@ -73,7 +68,6 @@ desc = "A beret, an artists favorite headwear." icon_state = "beret" siemens_coefficient = 0.9 - loose = 16 //Security /obj/item/clothing/head/HoS @@ -128,7 +122,6 @@ desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs." icon_state = "surgcap_blue" flags = BLOCKHEADHAIR - loose = 13 /obj/item/clothing/head/surgery/purple desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is deep purple." diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index a4209c48722..d3dcbcdd561 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -18,14 +18,12 @@ icon_state = "hairflowerp" item_state = "hairflowerp" item_state = "that" - loose = 0 // centcom /obj/item/clothing/head/powdered_wig name = "powdered wig" desc = "A powdered wig." icon_state = "pwig" item_state = "pwig" - loose = 90 // fucking whigs /obj/item/clothing/head/that name = "top-hat" @@ -33,19 +31,16 @@ icon_state = "tophat" item_state = "that" siemens_coefficient = 0.9 - loose = 70 /obj/item/clothing/head/redcoat name = "redcoat's hat" icon_state = "redcoat" desc = "'I guess it's a redhead.'" - loose = 45 /obj/item/clothing/head/mailman name = "mailman's hat" icon_state = "mailman" desc = "'Right-on-time' mail service head wear." - loose = 65 /obj/item/clothing/head/plaguedoctorhat name = "plague doctor's hat" @@ -53,21 +48,18 @@ icon_state = "plaguedoctor" permeability_coefficient = 0.01 siemens_coefficient = 0.9 - loose = 30 /obj/item/clothing/head/hasturhood name = "hastur's hood" desc = "It's unspeakably stylish" icon_state = "hasturhood" flags = HEADCOVERSEYES | BLOCKHAIR - loose = 1 /obj/item/clothing/head/nursehat name = "nurse's hat" desc = "It allows quick identification of trained medical personnel." icon_state = "nursehat" siemens_coefficient = 0.9 - loose = 80 // allowing for awkward come-ons when he/she drops his/her hat and you get it for him/her. /obj/item/clothing/head/syndicatefake name = "black and red space-helmet replica" @@ -77,7 +69,6 @@ flags = BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE siemens_coefficient = 2.0 - loose = 15 // not a very good replica /obj/item/clothing/head/cueball name = "cueball helmet" @@ -86,7 +77,6 @@ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR item_state="cueball" flags_inv = 0 - loose = 0 /obj/item/clothing/head/that name = "sturdy top-hat" @@ -94,7 +84,6 @@ icon_state = "tophat" item_state = "that" flags_inv = 0 - loose = 70 /obj/item/clothing/head/greenbandana @@ -103,7 +92,6 @@ icon_state = "greenbandana" item_state = "greenbandana" flags_inv = 0 - loose = 1 /obj/item/clothing/head/cardborg name = "cardborg helmet" @@ -112,7 +100,6 @@ item_state = "cardborg_h" flags = HEADCOVERSEYES | HEADCOVERSMOUTH flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE - loose = 20 /obj/item/clothing/head/justice name = "justice hat" @@ -120,7 +107,6 @@ icon_state = "justicered" item_state = "justicered" flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR - loose = 0 /obj/item/clothing/head/justice/blue icon_state = "justiceblue" @@ -142,7 +128,6 @@ name = "rabbit ears" desc = "Wearing these makes you looks useless, and only good for your sex appeal." icon_state = "bunny" - loose = 4 /obj/item/clothing/head/flatcap name = "flat cap" @@ -150,28 +135,24 @@ icon_state = "flat_cap" item_state = "detective" siemens_coefficient = 0.9 - loose = 1 /obj/item/clothing/head/pirate name = "pirate hat" desc = "Yarr." icon_state = "pirate" item_state = "pirate" - loose = 18 /obj/item/clothing/head/hgpiratecap name = "pirate hat" desc = "Yarr." icon_state = "hgpiratecap" item_state = "hgpiratecap" - loose = 36 /obj/item/clothing/head/bandana name = "pirate bandana" desc = "Yarr." icon_state = "bandana" item_state = "bandana" - loose = 0 //stylish bs12 hats @@ -222,7 +203,6 @@ item_state = "witch" flags = BLOCKHAIR siemens_coefficient = 2.0 - loose = 1 /obj/item/clothing/head/chicken name = "chicken suit head" @@ -251,7 +231,6 @@ item_state = "bearpelt" flags = BLOCKHAIR siemens_coefficient = 2.0 - loose = 0 // grrrr /obj/item/clothing/head/xenos name = "xenos helmet" @@ -281,7 +260,6 @@ /obj/item/clothing/head/fedora/brownfedora name = "brown fedora" icon_state = "bfedora" - loose = 35 /obj/item/clothing/head/stalhelm name = "Clown Stalhelm" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 7ca5f2ce444..430b1a54341 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -25,7 +25,6 @@ flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) action_button_name = "flip welding helmet" siemens_coefficient = 0.9 - loose = 4 species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/head.dmi' @@ -84,7 +83,6 @@ var/status = 0 var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage var/processing = 0 //I dont think this is used anywhere. - loose = 60 /obj/item/clothing/head/cakehat/process() if(!onfire) @@ -126,7 +124,6 @@ flags_inv = HIDEEARS cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - loose = 1 // too warm, your head doesn't want to leave /obj/item/clothing/head/ushanka/attack_self(mob/user as mob) if(src.icon_state == "ushankadown") @@ -153,7 +150,6 @@ action_button_name = "Toggle Pumpkin Light" armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) brightness_on = 2 //luminosity when on - loose = 80 /obj/item/clothing/head/hardhat/reindeer @@ -177,7 +173,6 @@ icon_state = "kitty" var/icon/mob siemens_coefficient = 1.5 - loose = 33 /obj/item/clothing/head/kitty/update_icon(var/mob/living/carbon/human/user) if(!istype(user)) return diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 7a07fe249a2..46df4374a99 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -1,3 +1,5 @@ +/obj/item/clothing/shoes/proc/step_action(var/mob/living/carbon/human/H) //squeek squeek + /obj/item/clothing/shoes/syndigaloshes desc = "A pair of brown shoes. They seem to have extra grip." name = "brown shoes" @@ -61,6 +63,18 @@ var/footstep = 1 //used for squeeks whilst walking species_restricted = null +/obj/item/clothing/shoes/clown_shoes/step_action(var/mob/living/carbon/human/H) + if(!istype(H)) return 0 + + if(H.m_intent == "run") + if(footstep >= 2) + playsound(src, "clownstep", 50, 1) + footstep = 0 + else + footstep++ + else + playsound(src, "clownstep", 20, 1) + /obj/item/clothing/shoes/jackboots name = "jackboots" desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." @@ -68,7 +82,19 @@ item_state = "jackboots" item_color = "hosred" siemens_coefficient = 0.7 - var/footstep=1 + var/footstep = 1 + +/obj/item/clothing/shoes/jackboots/step_action(var/mob/living/carbon/human/H) + if(!istype(H)) return 0 + + if(H.m_intent == "run") + if(footstep >= 2) + playsound(src, "jackboot", 50, 1) + footstep = 0 + else + footstep++ + else + playsound(src, "jackboot", 20, 1) /obj/item/clothing/shoes/jackboots/jacksandals name = "jacksandals" @@ -132,11 +158,10 @@ icon_state = "griffinboots" item_state = "griffinboots" flags = NODROP - + /obj/item/clothing/shoes/fluff/noble_boot name = "noble boots" desc = "The boots are economically designed to balance function and comfort, so that you can step on peasants without having to worry about blisters. The leather also resists unwanted blood stains." icon_state = "noble_boot" item_color = "noble_boot" item_state = "noble_boot" - \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index d5f09cdc741..d09363f7229 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -37,14 +37,14 @@ on = !on icon_state = "rig[on]-[item_color]" - if(on) + if(on) set_light(brightness_on) - else + else set_light(0) if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user - H.update_inv_head() + H.update_inv_head() /obj/item/clothing/suit/space/rig name = "hardsuit" @@ -135,13 +135,13 @@ boots.flags &= ~NODROP H.unEquip(boots) boots.forceMove(src) - + /obj/item/clothing/suit/space/rig/verb/toggle_helmet() set name = "Toggle Helmet" set category = "Object" set src in usr - if(!isliving(usr)) + if(!isliving(usr)) return if(!helmet) @@ -300,7 +300,7 @@ if(!isturf(user.loc)) user << "You cannot toggle your helmet while in this [user.loc]." //To prevent some lighting anomalities. return - + on = !on if(on) user << "You switch your helmet to travel mode. It will allow you to stand in zero pressure environments, at the cost of speed and armor." @@ -404,6 +404,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50) flash_protect = 0 + scan_reagents = 1 //Generally worn by the CMO, so they'd get utility off of seeing reagents /obj/item/clothing/suit/space/rig/medical icon_state = "rig-medical" diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 6764838430b..57f61d34bbc 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -8,7 +8,6 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES siemens_coefficient = 0.9 - loose = 7 /obj/item/clothing/suit/bio_suit name = "bio suit" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index c56779b1b6a..45e44128ccb 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -445,7 +445,6 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES siemens_coefficient = 0.9 - loose = 7 /obj/item/clothing/suit/jacket name = "bomber jacket" @@ -505,11 +504,10 @@ icon_state = "lordadmiral" item_state = "lordadmiral" allowed = list (/obj/item/weapon/gun) - + /obj/item/clothing/suit/fluff/noble_coat name = "noble coat" desc = "The livid blues, purples and greens are awesome enough to evoke a visceral response in you; it is not dissimilar to indigestion." icon_state = "noble_coat" item_state = "noble_coat" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - \ No newline at end of file diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 12c21e2a70e..8ff83a239a8 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -8,6 +8,11 @@ pockets.max_w_class = 2 //fit only pocket sized items pockets.max_combined_w_class = 4 +/obj/item/clothing/suit/storage/Destroy() + qdel(pockets) + pockets = null + return ..() + /obj/item/clothing/suit/storage/attack_hand(mob/user as mob) if (pockets.handle_attack_hand(user)) ..(user) diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index f1dde170997..9b30dafcf12 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -63,7 +63,6 @@ heat_protection = HEAD max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT siemens_coefficient = 0 - loose = 5 /obj/item/clothing/suit/bomb_suit @@ -105,7 +104,6 @@ desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation" flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR|THICKMATERIAL armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100) - loose = 8 /obj/item/clothing/suit/radiation name = "Radiation suit" diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index beb206e4864..4a631cb7e10 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -6,7 +6,6 @@ permeability_coefficient = 0.01 armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20) unacidable = 1 - loose = 0 // magic //Not given any special protective value since the magic robes are full-body protection --NEO siemens_coefficient = 0.8 diff --git a/code/modules/computer3/laptop.dm b/code/modules/computer3/laptop.dm index b0789d6a740..037b505d779 100644 --- a/code/modules/computer3/laptop.dm +++ b/code/modules/computer3/laptop.dm @@ -52,7 +52,7 @@ O.forceMove(loc) usr << "\The [src] crumbles to pieces." spawn(5) - qdel(src) + qdel(src) return if(!stored_computer.manipulating) @@ -65,7 +65,7 @@ spawn(5) stored_computer.manipulating = 0 - qdel(src) + qdel(src) else usr << "\red You are already opening the computer!" @@ -73,8 +73,9 @@ AltClick() if(Adjacent(usr)) open_computer() - + Destroy() + ..() return QDEL_HINT_HARDDEL_NOW // Warning: GC'ing will cause the laptop to vanish when it next closes //Quickfix until Snapshot works out how he wants to redo power. ~Z diff --git a/code/modules/examine/descriptions/engineering.dm b/code/modules/examine/descriptions/engineering.dm index c3f9b9b21fa..c8842c21bc7 100644 --- a/code/modules/examine/descriptions/engineering.dm +++ b/code/modules/examine/descriptions/engineering.dm @@ -1,4 +1,4 @@ -/obj/machinery/power/supermatter +/obj/machinery/power/supermatter_shard description_info = "When energized by a laser (or something hitting it), it emits radiation and heat. If the heat reaches above 7000 kelvin, it will send an alert and start taking damage. \ After integrity falls to zero percent, it will delaminate, causing a massive explosion, station-wide radiation spikes, and hallucinations. \ Supermatter reacts badly to oxygen in the atmosphere. It'll also heat up really quick if it is in vacuum.
\ diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm index 72407ae289c..b1c01eb9c76 100644 --- a/code/modules/fish/fishtank.dm +++ b/code/modules/fish/fishtank.dm @@ -366,7 +366,7 @@ else //We are deconstructing, make glass sheets instead of shards var/sheets = shard_count + 1 //Deconstructing it salvages all the glass used to build the tank new /obj/item/stack/sheet/glass(get_turf(src), sheets) //Produce the appropriate number of glass sheets, in a single stack - qdel(src) //QDel the tank and it's contents + qdel(src) //qdel the tank and it's contents T.air_update_turf(1) //Update the air for the turf, to avoid permanent atmos sealing with wall tanks /obj/machinery/fishtank/proc/spill_water() diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index a8045fdbd38..0151136b580 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -442,18 +442,18 @@ Gunshots/explosions/opening doors/less rare audio (done) /obj/effect/fake_attacker/proc/updateimage() -// del src.currentimage +// qdel(src.currentimage) if(src.dir == NORTH) - del(src.currentimage) + qdel(src.currentimage) src.currentimage = new /image(up,src) else if(src.dir == SOUTH) - del(src.currentimage) + qdel(src.currentimage) src.currentimage = new /image(down,src) else if(src.dir == EAST) - del(src.currentimage) + qdel(src.currentimage) src.currentimage = new /image(right,src) else if(src.dir == WEST) - del(src.currentimage) + qdel(src.currentimage) src.currentimage = new /image(left,src) my_target << currentimage diff --git a/code/modules/food/cooker.dm b/code/modules/food/cooker.dm index 7512209fc1b..e50cdac3dec 100644 --- a/code/modules/food/cooker.dm +++ b/code/modules/food/cooker.dm @@ -125,7 +125,7 @@ setCooked(I, newfood) newfood.cooktype[thiscooktype] = 1 turnoff(I) - //del(I) + //qdel(I) // MAKE SURE TO OVERRIDE THESE ON THE MACHINE IF IT HAS SPECIAL FOOD INTERACTIONS! // FAILURE TO OVERRIDE WILL RESULT IN FAILURE TO PROPERLY HANDLE SPECIAL INTERACTIONS! --FalseIncarnate diff --git a/code/modules/garbage_collection/garbage_collector.dm b/code/modules/garbage_collection/garbage_collector.dm index 4810eadfb7b..f6675365f8d 100644 --- a/code/modules/garbage_collection/garbage_collector.dm +++ b/code/modules/garbage_collection/garbage_collector.dm @@ -160,7 +160,7 @@ var/global/datum/controller/process/garbage_collector/garbageCollector */ /datum/proc/Destroy() tag = null - return QDEL_HINT_HARDDEL_NOW // By default, assume that queueing any given datum is unsafe + return QDEL_HINT_QUEUE // Garbage Collect everything. // If something gets deleted directly, make sure its Destroy proc is still called /datum/Del() @@ -181,4 +181,3 @@ var/global/datum/controller/process/garbage_collector/garbageCollector /proc/gcwarning(msg) log_to_dd("## GC WARNING: [msg]") - \ No newline at end of file diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 9f0f22f8bcc..033221ce5f2 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -395,13 +395,13 @@ var/obj/item/stack/medical/bruise_pack/tajaran/poultice = new /obj/item/stack/medical/bruise_pack/tajaran(user.loc) poultice.heal_brute = potency user << "You mash the leaves into a poultice." - del(src) + qdel(src) return if("mtear") var/obj/item/stack/medical/ointment/tajaran/poultice = new /obj/item/stack/medical/ointment/tajaran(user.loc) poultice.heal_burn = potency user << "You mash the petals into a poultice." - del(src) + qdel(src) return */ diff --git a/code/modules/jungle/jungle.dm b/code/modules/jungle/jungle.dm index 54819de1dda..f22f0dede9a 100644 --- a/code/modules/jungle/jungle.dm +++ b/code/modules/jungle/jungle.dm @@ -93,7 +93,7 @@ //world << "falsewall_spawner found in wall" var/obj/structure/temple_falsewall/fwall = new(F.loc) fwall.mineral = mineral - del(F) + qdel(F) for(var/obj/effect/landmark/door_spawner/D in T.contents) //world << "door_spawner found in wall" @@ -101,7 +101,7 @@ T.icon_state = "dark" var/spawn_type = text2path("/obj/machinery/door/airlock/[door_mineral]") new spawn_type(T) - del(D)*/ + qdel(D)*/ //a shuttle has crashed somewhere on the map, it should have a power cell to let the adventurers get home /area/jungle/crash_ship_source diff --git a/code/modules/jungle/jungle_temple.dm b/code/modules/jungle/jungle_temple.dm index 1ecdab55973..a021631bb64 100644 --- a/code/modules/jungle/jungle_temple.dm +++ b/code/modules/jungle/jungle_temple.dm @@ -49,7 +49,7 @@ New() if(prob(10)) new /obj/effect/glowshroom(src.loc) - del(src) + qdel(src) /obj/effect/landmark/loot_spawn name = "loot spawner" @@ -267,7 +267,7 @@ for(var/i=0,i(range*0.60)) - deep_count++ - else if(cell>(range*0.40)) - rare_count++ - else - surface_count++ - - if(surface_count < MIN_SURFACE_COUNT || surface_count > MAX_SURFACE_COUNT) return 0 - if(rare_count < MIN_RARE_COUNT || rare_count > MAX_RARE_COUNT) return 0 - if(deep_count < MIN_DEEP_COUNT || deep_count > MAX_DEEP_COUNT) return 0 - return 1 - -//Halfassed diamond-square algorithm with some fuckery since it's a single dimension array. -/datum/ore_distribution/proc/populate_distribution_map() - - //Announce it! - world << "Generating resource distribution map." - - //Seed beginning values. - var/x = 1 - var/y = 1 - var/size = real_size-1 - map[MAP_TOP_LEFT] = (range/3)+rand(range/5) - map[MAP_TOP_RIGHT] = (range/3)+rand(range/5) - map[MAP_BOTTOM_LEFT] = (range/3)+rand(range/5) - map[MAP_BOTTOM_RIGHT] = (range/3)+rand(range/5) - - //Fill in and smooth it out. - var/attempts = 0 - do - attempts++ - generate_distribution_map(1,1,size) - while(attempts < ITERATE_BEFORE_FAIL && !map_is_sane()) - - if(attempts >= ITERATE_BEFORE_FAIL) - world << "Could not generate a sane distribution map. Aborting." - map = null - return - else - apply_to_asteroid() - -/datum/ore_distribution/proc/clear_distribution_map() - for(var/x = 1, x <= real_size, x++) - for(var/y = 1, y <= real_size, y++) - map[MAP_CELL] = 0 - -/datum/ore_distribution/proc/print_distribution_map() - var/line = "" - for(var/x = 1, x <= real_size, x++) - for(var/y = 1, y <= real_size, y++) - line += num2text(round(map[MAP_CELL]/25.5)) - world << line - line = "" - -/datum/ore_distribution/proc/generate_distribution_map(var/x,var/y,var/input_size) - - var/size = input_size - - map[MAP_MID_TOP] = (map[MAP_TOP_LEFT] + map[MAP_TOP_RIGHT])/2 - map[MAP_MID_RIGHT] = (map[MAP_BOTTOM_RIGHT] + map[MAP_TOP_RIGHT])/2 - map[MAP_MID_BOTTOM] = (map[MAP_BOTTOM_LEFT] + map[MAP_BOTTOM_RIGHT])/2 - map[MAP_MID_LEFT] = (map[MAP_TOP_LEFT] + map[MAP_BOTTOM_RIGHT])/2 - map[MAP_CENTRE] = (map[MAP_MID_LEFT]+map[MAP_MID_RIGHT]+map[MAP_MID_BOTTOM]+map[MAP_MID_TOP])/4 - - if(prob(random_variance_chance)) - map[MAP_CENTRE] *= (rand(1) ? (1.0-random_element) : (1.0+random_element)) - map[MAP_CENTRE] = max(0,min(range,map[MAP_CENTRE])) - - if(size>3) - generate_distribution_map(x,y,input_size/2) - generate_distribution_map(x+(input_size/2),y,input_size/2) - generate_distribution_map(x,y+(input_size/2),input_size/2) - generate_distribution_map(x+(input_size/2),y+(input_size/2),input_size/2) - -/datum/ore_distribution/proc/apply_to_asteroid() - - // THESE VALUES DETERMINE THE AREA THAT THE DISTRIBUTION MAP IS APPLIED TO. - // IF YOU DO NOT RUN OFFICIAL BAYCODE ASTEROID MAP YOU NEED TO CHANGE THEM. - // ORIGIN IS THE BOTTOM LEFT CORNER OF THE SQUARE CONTAINING ALL ASTEROID - // TILES YOU WISH TO APPLY THE DISTRIBUTION MAP TO. - - var/origin_x = 13 //We start here... - var/origin_y = 32 //...and here... - var/limit_x = 217 //...and iterate until here... - var/limit_y = 223 //...and here... - var/asteroid_z = 5 //...on this Z-level. - - var/tx = origin_x - var/ty = origin_y - - for(var/y = 1, y <= real_size, y++) - - for(var/x = 1, x <= real_size, x++) - - var/turf/target_turf - - for(var/i=0,i limit_x || ty+i > limit_y) - continue - - target_turf = locate(tx+j, ty+i, asteroid_z) - - if(target_turf && target_turf.has_resources) - - target_turf.resources = list() - target_turf.resources["silicates"] = rand(3,5) - target_turf.resources["carbonaceous rock"] = rand(3,5) - - switch(map[MAP_CELL]) - if(0 to 100) - target_turf.resources["iron"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX) - target_turf.resources["gold"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX) - target_turf.resources["silver"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX) - target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX) - target_turf.resources["diamond"] = 0 - target_turf.resources["plasma"] = 0 - target_turf.resources["osmium"] = 0 - target_turf.resources["hydrogen"] = 0 - if(100 to 124) - target_turf.resources["iron"] = 0 - target_turf.resources["gold"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX) - target_turf.resources["silver"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX) - target_turf.resources["uranium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX) - target_turf.resources["diamond"] = 0 - target_turf.resources["plasma"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX) - target_turf.resources["osmium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX) - target_turf.resources["hydrogen"] = 0 - if(125 to 255) - target_turf.resources["iron"] = 0 - target_turf.resources["gold"] = 0 - target_turf.resources["silver"] = 0 - target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX) - target_turf.resources["diamond"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX) - target_turf.resources["plasma"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX) - target_turf.resources["osmium"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX) - target_turf.resources["hydrogen"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX) - - tx += chunk_size - tx = origin_x - ty += chunk_size - - world << "Resource map generation complete." - return - -#undef MAP_CELL -#undef MAP_CENTRE -#undef MAP_TOP_LEFT -#undef MAP_TOP_RIGHT -#undef MAP_BOTTOM_LEFT -#undef MAP_BOTTOM_RIGHT -#undef MAP_MID_TOP -#undef MAP_MID_BOTTOM -#undef MAP_MID_LEFT -#undef MAP_MID_RIGHT - -#undef MIN_SURFACE_COUNT -#undef MAX_SURFACE_COUNT -#undef MIN_RARE_COUNT -#undef MAX_RARE_COUNT -#undef MIN_DEEP_COUNT -#undef MAX_DEEP_COUNT -#undef ITERATE_BEFORE_FAIL - -#undef RESOURCE_HIGH_MAX -#undef RESOURCE_HIGH_MIN -#undef RESOURCE_MID_MAX -#undef RESOURCE_MID_MIN -#undef RESOURCE_LOW_MAX -#undef RESOURCE_LOW_MIN diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm deleted file mode 100644 index 09888cdb3fa..00000000000 --- a/code/modules/mining/drilling/drill.dm +++ /dev/null @@ -1,392 +0,0 @@ -/obj/machinery/mining - icon = 'icons/obj/mining_drill.dmi' - anchored = 0 - use_power = 0 //The drill takes power directly from a cell. - density = 1 - layer = MOB_LAYER+0.1 //So it draws over mobs in the tile north of it. - -/obj/machinery/mining/drill - name = "mining drill head" - desc = "An enormous drill." - icon_state = "mining_drill" - var/braces_needed = 2 - var/list/supports = list() - var/supported = 0 - var/active = 0 - var/list/resource_field = list() - var/open = 0 - - var/ore_types = list( - "iron" = /obj/item/weapon/ore/iron, - "uranium" = /obj/item/weapon/ore/uranium, - "gold" = /obj/item/weapon/ore/gold, - "silver" = /obj/item/weapon/ore/silver, - "diamond" = /obj/item/weapon/ore/diamond, - "plasma" = /obj/item/weapon/ore/plasma, - "osmium" = /obj/item/weapon/ore/osmium, - "hydrogen" = /obj/item/weapon/ore/hydrogen, - "silicates" = /obj/item/weapon/ore/glass, - "carbonaceous rock" = /obj/item/weapon/ore/coal - ) - - //Upgrades - var/obj/item/weapon/stock_parts/matter_bin/storage - var/obj/item/weapon/stock_parts/micro_laser/cutter - var/obj/item/weapon/stock_parts/capacitor/cellmount - var/obj/item/weapon/stock_parts/cell/cell - - //Flags - var/need_update_field = 0 - var/need_player_check = 0 - -/obj/machinery/mining/drill/New() - - ..() - - storage = new(src) - cutter = new(src) - cellmount = new(src) - - cell = new(src) - cell.maxcharge = 10000 - cell.charge = cell.maxcharge - -/obj/machinery/mining/drill/process() - - if(need_player_check) - return - - check_supports() - - if(!active) return - - if(!anchored || !use_cell_power()) - system_error("system configuration or charge error") - return - - if(need_update_field) - get_resource_field() - - if(world.time % 10 == 0) - update_icon() - - if(!active) - return - - //Drill through the flooring, if any. - if(istype(get_turf(src),/turf/simulated/floor/plating/airless/asteroid)) - var/turf/simulated/floor/plating/airless/asteroid/T = get_turf(src) - if(!T.dug) - T.gets_dug() - else if(istype(get_turf(src),/turf/simulated/floor)) - var/turf/simulated/floor/T = get_turf(src) - T.ex_act(2.0) - - //Dig out the tasty ores. - if(resource_field.len) - var/turf/harvesting = pick(resource_field) - - while(resource_field.len && !harvesting.resources) - harvesting.has_resources = 0 - harvesting.resources = null - resource_field -= harvesting - harvesting = pick(resource_field) - - if(!harvesting) return - - var/total_harvest = get_harvest_capacity() //Ore harvest-per-tick. - var/found_resource = 0 //If this doesn't get set, the area is depleted and the drill errors out. - - for(var/metal in ore_types) - - if(contents.len >= get_storage_capacity()) - system_error("insufficient storage space") - active = 0 - need_player_check = 1 - update_icon() - return - - if(contents.len + total_harvest >= get_storage_capacity()) - total_harvest = get_storage_capacity() - contents.len - - if(total_harvest <= 0) break - if(harvesting.resources[metal]) - - found_resource = 1 - - var/create_ore = 0 - if(harvesting.resources[metal] >= total_harvest) - harvesting.resources[metal] -= total_harvest - create_ore = total_harvest - total_harvest = 0 - else - total_harvest -= harvesting.resources[metal] - create_ore = harvesting.resources[metal] - harvesting.resources[metal] = 0 - - for(var/i=1,i<=create_ore,i++) - var/oretype = ore_types[metal] - new oretype(src) - - if(!found_resource) - harvesting.has_resources = 0 - harvesting.resources = null - resource_field -= harvesting - else - active = 0 - need_player_check = 1 - update_icon() - -/obj/machinery/mining/drill/attack_ai(var/mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/mining/drill/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype(W,/obj/item/weapon/screwdriver)) - if(active) return - open = !open - user << "\blue You [open ? "open" : "close"] the maintenance panel." //TODO: Sprite. - return - else - if(!open || active) return ..() - if(istype(W,/obj/item/weapon/crowbar)) - if(cell) - user << "You pry out \the [cell]." - cell.loc = get_turf(src) - cell = null - else if(storage) - user << "You slip the bolt and pry out \the [storage]." - storage.loc = get_turf(src) - storage = null - else if(cutter) - user << "You carefully detatch and pry out \the [cutter]." - cutter.loc = get_turf(src) - cutter = null - else if(cellmount) - user << "You yank out a few wires and pry out \the [cellmount]." - cellmount.loc = get_turf(src) - cellmount = null - else - user << "There's nothing inside the drilling rig to remove." - return - else if(istype(W,/obj/item/weapon/stock_parts/matter_bin)) - if(storage) - user << "The drill already has a matter bin installed." - else - user.drop_item() - W.loc = src - storage = W - user << "You install \the [W]." - return - else if(istype(W,/obj/item/weapon/stock_parts/micro_laser)) - if(cutter) - user << "The drill already has a cutting head installed." - else - user.drop_item() - W.loc = src - cutter = W - user << "You install \the [W]." - return - else if(istype(W,/obj/item/weapon/stock_parts/capacitor)) - if(cellmount) - user << "The drill already has a cell capacitor installed." - else - user.drop_item() - W.loc = src - cellmount = W - user << "You install \the [W]." - return - else if(istype(W,/obj/item/weapon/stock_parts/cell)) - if(cell) - user << "The drill already has a cell installed." - else - user.drop_item() - W.loc = src - cell = W - user << "You install \the [W]." - return - ..() -/obj/machinery/mining/drill/attack_hand(mob/user as mob) - check_supports() - - if(need_player_check) - user << "You hit the manual override and reset the drill's error checking." - need_player_check = 0 - if(anchored) get_resource_field() - update_icon() - return - - else if(supported) - if(use_cell_power()) - active = !active - if(active) - user << "\blue You engage \the [src] and it lurches downwards, grinding noisily." - need_update_field = 1 - else - user << "\blue You disengage \the [src] and it shudders to a grinding halt." - else - user << "\blue The drill is unpowered." - else - user << "\blue Turning on a piece of industrial machinery without sufficient bracing is a bad idea." - - update_icon() - -/obj/machinery/mining/drill/update_icon() - if(need_player_check) - icon_state = "mining_drill_error" - else if(active) - icon_state = "mining_drill_active" - else if(supported) - icon_state = "mining_drill_braced" - else - icon_state = "mining_drill" - return - -/obj/machinery/mining/drill/proc/check_supports() - - supported = 0 - - if((!supports || !supports.len) && initial(anchored) == 0) - icon_state = "mining_drill" - anchored = 0 - active = 0 - else - anchored = 1 - - if(supports && supports.len >= braces_needed) - supported = 1 - - update_icon() - -/obj/machinery/mining/drill/proc/system_error(var/error) - - if(error) src.visible_message("\red \The [src] flashes a '[error]' warning.") - need_player_check = 1 - active = 0 - update_icon() - -/obj/machinery/mining/drill/proc/get_harvest_capacity() - return (cutter ? cutter.rating : 0) - -/obj/machinery/mining/drill/proc/get_storage_capacity() - return 200 * (storage ? storage.rating : 0) - -/obj/machinery/mining/drill/proc/get_charge_use() - return 50 - (10 * (cellmount ? cellmount.rating : 0)) - -/obj/machinery/mining/drill/proc/get_resource_field() - - resource_field = list() - need_update_field = 0 - - var/turf/T = get_turf(src) - if(!istype(T)) return - - var/tx = T.x-2 - var/ty = T.y-2 - var/turf/mine_turf - for(var/iy=0,iy<5,iy++) - for(var/ix=0,ix<5,ix++) - mine_turf = locate(tx+ix,ty+iy,T.z) - if(mine_turf && istype(mine_turf) && mine_turf.has_resources) - resource_field += mine_turf - - if(!resource_field.len) - system_error("resources depleted") - -/obj/machinery/mining/drill/proc/use_cell_power() - if(!cell) return 0 - var/req = get_charge_use() - if(cell.charge >= req) - cell.use(req) - return 1 - return 0 - -/obj/machinery/mining/drill/verb/unload() - set name = "Unload Drill" - set category = "Object" - set src in oview(1) - - if(usr.stat) return - - var/obj/structure/ore_box/B = locate() in orange(1) - if(B) - for(var/obj/item/weapon/ore/O in contents) - O.loc = B - usr << "\red You unload the drill's storage cache into the ore box." - else - usr << "\red You must move an ore box up to the drill before you can unload it." - - -/obj/machinery/mining/brace - name = "mining drill brace" - desc = "A machinery brace for an industrial drill. It looks easily two feet thick." - icon_state = "mining_brace" - var/obj/machinery/mining/drill/connected - -/obj/machinery/mining/brace/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype(W,/obj/item/weapon/wrench)) - - if(istype(get_turf(src),/turf/space)) - user << "\blue You can't anchor something to empty space. Idiot." - return - - if(connected && connected.active) - user << "\blue You can't unanchor the brace of a running drill!" - return - - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user << "\blue You [anchored ? "un" : ""]anchor the brace." - - anchored = !anchored - if(anchored) - connect() - else - disconnect() - -/obj/machinery/mining/brace/proc/connect() - - var/turf/T = get_step(get_turf(src), src.dir) - - if(!T.has_resources) - src.visible_message("\red The terrain near the brace is unsuitable!") - return - - for(var/thing in T.contents) - if(istype(thing,/obj/machinery/mining/drill)) - connected = thing - break - - if(!connected) return - - if(!connected.supports) connected.supports = list() - - icon_state = "mining_brace_active" - - connected.supports += src - connected.check_supports() - -/obj/machinery/mining/brace/proc/disconnect() - - if(!connected) return - - if(!connected.supports) connected.supports = list() - - icon_state = "mining_brace" - - connected.supports -= src - connected.check_supports() - connected = null - -/obj/machinery/mining/brace/verb/rotate() - set name = "Rotate" - set category = "Object" - set src in oview(1) - - if(usr.stat) return - - if (src.anchored) - usr << "It is anchored in place!" - return 0 - - src.dir = turn(src.dir, 90) - return 1 \ No newline at end of file diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm deleted file mode 100644 index 91ff1e12f8e..00000000000 --- a/code/modules/mining/drilling/scanner.dm +++ /dev/null @@ -1,54 +0,0 @@ -/obj/item/weapon/mining_scanner - name = "ore detector" - desc = "A complex device used to locate ore deep underground." - icon = 'icons/obj/device.dmi' - icon_state = "forensic0-old" //GET A BETTER SPRITE. - item_state = "electronic" -// matter = list("metal" = 150) - - origin_tech = "magnets=1;engineering=1" - -/obj/item/weapon/mining_scanner/attack_self(mob/user as mob) - - user << "You begin sweeping \the [src] about, scanning for metal deposits." - - if(!do_after(user,50, target = src)) return - - if(!user || !src) return - - var/list/metals = list( - "surface minerals" = 0, - "precious metals" = 0, - "nuclear fuel" = 0, - "exotic matter" = 0 - ) - - for(var/turf/T in oview(3,get_turf(user))) - - if(!T.has_resources) - continue - - for(var/metal in T.resources) - - var/ore_type - - switch(metal) - if("silicates" || "carbonaceous rock" || "iron") ore_type = "surface minerals" - if("gold" || "silver" || "diamond") ore_type = "precious metals" - if("uranium") ore_type = "nuclear fuel" - if("plasma" || "osmium" || "hydrogen") ore_type = "exotic matter" - - if(ore_type) metals[ore_type] += T.resources[metal] - - user << "\icon[src] \blue The scanner beeps and displays a readout." - - for(var/ore_type in metals) - - var/result = "no sign" - - switch(metals[ore_type]) - if(1 to 50) result = "trace amounts" - if(51 to 150) result = "significant amounts" - if(151 to INFINITY) result = "huge quantities" - - user << "- [result] of [ore_type]." \ No newline at end of file diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm index 4b293e71350..41d54ca1279 100644 --- a/code/modules/mining/laborcamp/laborshuttle.dm +++ b/code/modules/mining/laborcamp/laborshuttle.dm @@ -40,7 +40,7 @@ proc/move_labor_shuttle() //TODO: Security Access only; add moving the shuttle t */ if(istype(T, /turf/simulated)) - del(T) + qdel(T) for(var/mob/living/carbon/bug in toArea) // If someone somehow is still in the shuttle's docking area... bug.gib() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 7d68a50340f..ed5441c06f1 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -87,6 +87,10 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi ..() /mob/dead/observer/Destroy() + if(ismob(following)) + var/mob/M = following + M.following_mobs -= src + following = null if (ghostimage) ghost_darkness_images -= ghostimage qdel(ghostimage) @@ -115,7 +119,7 @@ Works together with spawning an observer, noted above. if(antagHUD) var/list/target_list = list() for(var/mob/living/target in oview(src, 14)) - if(target.mind && (target.mind.special_role || issilicon(target) || target.mind.nation)) + if(target.mind && (target.mind.special_role || issilicon(target))) target_list += target if(target_list.len) assess_targets(target_list, src) @@ -142,7 +146,6 @@ Works together with spawning an observer, noted above. var/client/C = U.client for(var/mob/living/carbon/human/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] - C.images += target.hud_list[NATIONS_HUD] // ??? THE SNOWFLAKE IS KILLING ME for(var/mob/living/silicon/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] @@ -168,10 +171,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set name = "Ghost" set desc = "Relinquish your life and enter the land of the dead." - if(ticker && ticker.mode.name == "nations") - usr << "\blue Ghosting is disabled." - return - var/mob/M = src if(stat == DEAD) @@ -382,19 +381,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob var/list/following_mobs = list() -/mob/Destroy() - for(var/mob/dead/observer/M in following_mobs) - M.following = null - following_mobs = null - return ..() - -/mob/dead/observer/Destroy() - if(ismob(following)) - var/mob/M = following - M.following_mobs -= src - following = null - return ..() - /mob/Move() . = ..() if(.) diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 937ee9d86d8..a5bb5b1388e 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -125,7 +125,7 @@ name = "Noise" desc = "Noises" key = "" - flags = RESTRICTED|NONGLOBAL|INNATE|NO_TALK_MSG + flags = RESTRICTED|NONGLOBAL|INNATE|NO_TALK_MSG|NO_STUTTER /datum/language/noise/format_message(message, verb) return "[message]" diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index 194e64100e2..d6b8a18fc7b 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -86,6 +86,6 @@ else new_xeno.key = key new_xeno.mind.name = new_xeno.name - del(src) + qdel(src) return */ \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 0fd832ebc0c..dff7ffb59af 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -171,7 +171,7 @@ /mob/living/carbon/alien/humanoid/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index ce94cb4c8a2..2b6407398d2 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -230,13 +230,6 @@ else healths.icon_state = "health6" - if(pullin) - if(pulling) - pullin.icon_state = "pull" - else - pullin.icon_state = "pull0" - - if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]" if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]" if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]" diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index eb32d6b974f..f27ac91d398 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -117,7 +117,7 @@ else new_xeno.key = key new_xeno.mind.name = new_xeno.name - del(src) + qdel(src) else src << "We already have an alive empress." return diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index f9a2b945410..5bda4880e27 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -107,7 +107,7 @@ /mob/living/carbon/alien/larva/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) @@ -255,4 +255,4 @@ else var/mob/living/carbon/alien/humanoid/A = new(loc) A.key = key - del(src) */ \ No newline at end of file + qdel(src) */ \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 3981a18f59d..10b8d580447 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -18,6 +18,12 @@ /obj/item/organ/brain/attack_self(mob/user as mob) return //let's not have players taken out of the round as easily as a click, once you have their brain. +/obj/item/organ/brain/surgeryize() + if(!owner) + return + owner.ear_damage = 0 //Yeah, didn't you...hear? The ears are totally inside the brain. + owner.ear_deaf = 0 + /obj/item/organ/brain/xeno name = "thinkpan" desc = "It looks kind of like an enormous wad of purple bubblegum." diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 26d3aa99875..3bcc4fe44a5 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -37,7 +37,6 @@ hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy") - hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") ..() @@ -404,7 +403,7 @@ /mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) @@ -1840,4 +1839,9 @@ /mob/living/carbon/human/proc/get_full_print() if(!dna || !dna.uni_identity) return - return md5(dna.uni_identity) + return md5(dna.uni_identity) + +/mob/living/carbon/human/can_see_reagents() + for(var/obj/item/clothing/C in src) //If they have some clothing equipped that lets them see reagents, they can see reagents + if(C.scan_reagents) + return 1 diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 09bca41ed3f..25d47867e2b 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -192,16 +192,6 @@ log_attack("[M.name] ([M.ckey]) pushed [src.name] ([src.ckey])") return - /* if(randn <= 45 && !lying) - if(head) - var/obj/item/clothing/head/H = head - if(!istype(H) || prob(H.loose)) - if(unEquip(H)) - if(prob(60)) - step_away(H,M) - visible_message("[M] has knocked [src]'s [H] off!", - "[M] knocked \the [H] clean off your head!") */ - var/talked = 0 // BubbleWrap if(randn <= 60) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index a7056b0abc8..4af3cf88499 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -54,38 +54,6 @@ emp_act return (..(P , def_zone)) -/mob/living/carbon/human/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon = null) - var/obj/item/organ/external/affected = get_organ(check_zone(def_zone)) - var/siemens_coeff = get_siemens_coefficient_organ(affected) - stun_amount *= siemens_coeff - agony_amount *= siemens_coeff - - switch (def_zone) - if("head") - agony_amount *= 1.50 - if("l_hand", "r_hand") - var/c_hand - if (def_zone == "l_hand") - c_hand = l_hand - else - c_hand = r_hand - - if(c_hand && (stun_amount || agony_amount > 10)) - msg_admin_attack("[src.name] ([src.ckey]) was disarmed by a stun effect") - - unEquip(c_hand) - if (affected.status & ORGAN_ROBOT) - emote("me", 1, "drops what they were holding, their [affected.name] malfunctioning!") - else - var/emote_scream = pick("screams in pain and", "lets out a sharp cry and", "cries out and") - emote("me", 1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [affected.name]!") - - if(used_weapon) - var/obj/item/W = used_weapon - affected.add_autopsy_data(W.name, agony_amount) // Add the weapon's name to the autopsy data - - ..(stun_amount, agony_amount, def_zone, used_weapon) - /mob/living/carbon/human/getarmor(var/def_zone, var/type) var/armorval = 0 var/organnum = 0 diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 0e336efad26..c791222d312 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -81,3 +81,12 @@ /mob/living/carbon/human/mob_negates_gravity() return shoes && shoes.negates_gravity() + +/mob/living/carbon/human/Move(NewLoc, direct) + . = ..() + if(shoes) + if(!lying && !buckled) + if(!has_gravity(loc)) + return + var/obj/item/clothing/shoes/S = shoes + S.step_action(src) diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 7654b0d2e3b..63ffbf93de8 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -117,7 +117,7 @@ unEquip(r_hand) var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ") - emote("me", 1, "[(species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [E.name]!") + custom_emote(1, "[(species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [E.name]!") else if(E.is_malfunctioning()) @@ -130,7 +130,7 @@ continue unEquip(r_hand) - emote("me", 1, "drops what they were holding, their [E.name] malfunctioning!") + custom_emote(1, "drops what they were holding, their [E.name] malfunctioning!") var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, src) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 611362f1954..dbb12594803 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1279,9 +1279,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(see_override) //Override all see_invisible = see_override - if(ticker && ticker.mode.name == "nations") - process_nations() - if(healths) if (analgesic) healths.icon_state = "health_health_numb" @@ -1334,12 +1331,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(pressure) pressure.icon_state = "pressure[pressure_alert]" - if(pullin) - if(pulling) pullin.icon_state = "pull1" - else pullin.icon_state = "pull0" -// if(rest) //Not used with new UI -// if(resting || lying || sleeping) rest.icon_state = "rest1" -// else rest.icon_state = "rest0" if(toxin) if(hal_screwyhud == 4 || toxins_alert) toxin.icon_state = "tox1" else toxin.icon_state = "tox0" @@ -1558,7 +1549,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc src << ""+pick("It hurts so much!", "You really need some painkillers..", "Dear god, the pain!") if(shock_stage >= 30) - if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.") + if(shock_stage == 30) custom_emote(1,"is having trouble keeping their eyes open.") eye_blurry = max(2, eye_blurry) stuttering = max(stuttering, 5) @@ -1566,7 +1557,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") if(shock_stage >=60) - if(shock_stage == 60) emote("me",1,"'s body becomes limp.") + if(shock_stage == 60) custom_emote(1,"falls limp.") if (prob(2)) src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") Weaken(20) @@ -1582,7 +1573,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc Paralyse(5) if(shock_stage == 150) - emote("me",1,"can no longer stand, collapsing!") + custom_emote(1,"can no longer stand, collapsing!") Weaken(20) if(shock_stage >= 150) @@ -1871,34 +1862,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc holder.icon_state = "hudshadowlingthrall" hud_list[SPECIALROLE_HUD] = holder - - if(hud_updateflag & 1 << NATIONS_HUD) - var/image/holder = hud_list[NATIONS_HUD] - holder.icon_state = "hudblank" - - if(mind && mind.nation) - switch(mind.nation.name) - if("Atmosia") - holder.icon_state = "hudatmosia" - if("Brigston") - holder.icon_state = "hudbrigston" - if("Cargonia") - holder.icon_state = "hudcargonia" - if("People's Republic of Commandzakstan") - holder.icon_state = "hudcommand" - if("Medistan") - holder.icon_state = "hudmedistan" - if("Scientopia") - holder.icon_state = "hudscientopia" - - hud_list[NATIONS_HUD] = holder hud_updateflag = 0 -/mob/living/carbon/human/proc/process_nations() - var/client/C = client - for(var/mob/living/carbon/human/H in view(src, 14)) - C.images += H.hud_list[NATIONS_HUD] - /mob/living/carbon/human/handle_silent() if(..()) speech_problem_flag = 1 @@ -1933,4 +1898,4 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc // Need this in species. //#undef HUMAN_MAX_OXYLOSS -//#undef HUMAN_CRIT_MAX_OXYLOSS +//#undef HUMAN_CRIT_MAX_OXYLOSS diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 9cd0301b885..26ef94d472a 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -462,7 +462,7 @@ if(D.client) D.loc = H.loc else - del(D) + qdel(D) H.visible_message("" */ +//mob verbs are a lot faster than object verbs +//for more info on why this is not atom/pull, see examinate() in mob.dm +/mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1)) + set name = "Pull" + set category = "Object" + + if(AM.Adjacent(src)) + src.start_pulling(AM) + return + //same as above /mob/living/pointed(atom/A as mob|obj|turf in view()) if(src.stat || !src.canmove || src.restrained()) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 916b5b80195..08be473c4a7 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -65,21 +65,6 @@ apply_damage(P.damage, P.damage_type, def_zone, armor) return P.on_hit(src, armor, def_zone) -//Handles the effects of "stun" weapons -/mob/living/proc/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon=null) - flash_pain() - - if (stun_amount) - Stun(stun_amount) - Weaken(stun_amount) - apply_effect(STUTTER, stun_amount) - apply_effect(EYE_BLUR, stun_amount) - - if (agony_amount) - apply_damage(agony_amount, HALLOSS, def_zone, 0, used_weapon) - apply_effect(STUTTER, agony_amount/10) - apply_effect(EYE_BLUR, agony_amount/10) - /mob/living/proc/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null) return 0 //only carbon liveforms have this proc diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 437f9882a99..5e5847c0ab8 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -158,9 +158,10 @@ proc/get_radio_key_from_channel(var/channel) message = handle_autohiss(message, speaking) - var/list/handle_s = handle_speech_problems(message, verb) - message = handle_s[1] - verb = handle_s[2] + if(speaking && !(speaking.flags & NO_STUTTER)) + var/list/handle_s = handle_speech_problems(message, verb) + message = handle_s[1] + verb = handle_s[2] if(!message || message == "") return 0 @@ -242,13 +243,15 @@ proc/get_radio_key_from_channel(var/channel) if(M.loc && M.locs[1] in hearturfs) listening |= M + var/list/speech_bubble_recipients = list() var/speech_bubble_test = say_test(message) - var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]") - spawn(30) qdel(speech_bubble) for(var/mob/M in listening) - M << speech_bubble M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol) + if(M.client) + speech_bubble_recipients.Add(M.client) + spawn(0) + flick_overlay(image('icons/mob/talk.dmi', src, "h[speech_bubble_test]",MOB_LAYER+1), speech_bubble_recipients, 30) for(var/obj/O in listening_obj) spawn(0) @@ -398,19 +401,23 @@ proc/get_radio_key_from_channel(var/channel) watching -= eavesdropping //now mobs + var/list/speech_bubble_recipients = list() var/speech_bubble_test = say_test(message) - var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]") - spawn(30) qdel(speech_bubble) for(var/mob/M in listening) - M << speech_bubble M.hear_say(message, verb, speaking, alt_name, italics, src) + if(M.client) + speech_bubble_recipients.Add(M.client) if(eavesdropping.len) var/new_message = stars(message) //hopefully passing the message twice through stars() won't hurt... I guess if you already don't understand the language, when they speak it too quietly to hear normally you would be able to catch even less. for(var/mob/M in eavesdropping) - M << speech_bubble M.hear_say(new_message, verb, speaking, alt_name, italics, src) + if(M.client) + speech_bubble_recipients.Add(M.client) + + spawn(0) + flick_overlay(image('icons/mob/talk.dmi', src, "h[speech_bubble_test]",MOB_LAYER+1), speech_bubble_recipients, 30) if(watching.len) var/rendered = "[src.name] [not_heard]." diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 4375c9f3c04..3dd855994ae 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -183,7 +183,6 @@ var/list/ai_verbs_default = list( hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") ai_list += src ..() @@ -229,6 +228,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/Destroy() ai_list -= src + qdel(eyeobj) // No AI, no Eye return ..() @@ -595,7 +595,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm index 584af962874..d2b23c93eff 100644 --- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm +++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm @@ -5,7 +5,7 @@ var/datum/cameranet/cameranet = new() /datum/cameranet - // The cameras on the map, no matter if they work or not. Updated in obj/machinery/camera.dm by New() and Del(). + // The cameras on the map, no matter if they work or not. Updated in obj/machinery/camera.dm by New() and Destroy(). var/list/cameras = list() var/cameras_unsorted = 1 // The chunks of the map, mapping the areas that the cameras can see. diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 89dbeb14740..ef0e1f712f8 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -29,6 +29,7 @@ qdel(ghostimage) ghostimage = null; updateallghostimages() + ai = null return ..() // Movement code. Returns 0 to stop air movement from moving it. @@ -41,10 +42,6 @@ set src = usr.contents return 0 -/mob/aiEye/pull() - set popup_menu = 0 - set src = usr.contents - return 0 // Use this when setting the aiEye's location. // It will also stream the chunk that the new loc is in. @@ -95,11 +92,6 @@ spawn(5) eyeobj.loc = src.loc -/mob/living/silicon/ai/Destroy() - eyeobj.ai = null - qdel(eyeobj) // No AI, no Eye - return ..() - /atom/proc/move_camera_by_click() if(istype(usr, /mob/living/silicon/ai)) var/mob/living/silicon/ai/AI = usr diff --git a/code/modules/mob/living/silicon/ai/freelook/read_me.dm b/code/modules/mob/living/silicon/ai/freelook/read_me.dm index 53e68ff1377..8ddb0689409 100644 --- a/code/modules/mob/living/silicon/ai/freelook/read_me.dm +++ b/code/modules/mob/living/silicon/ai/freelook/read_me.dm @@ -20,7 +20,7 @@ HOW IT WORKS It works by first creating a camera network datum. Inside of this camera network are "chunks" (which will be - explained later) and "cameras". The cameras list is kept up to date by obj/machinery/camera/New() and Del(). + explained later) and "cameras". The cameras list is kept up to date by obj/machinery/camera/New() and Destroy(). Next the camera network has chunks. These chunks are a 16x16 tile block of turfs and cameras contained inside the chunk. These turfs are then sorted out based on what the cameras can and cannot see. If none of the cameras can see the turf, inside diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index ab4031bab01..d00e209d2fb 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -206,7 +206,7 @@ /mob/living/silicon/pai/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index cbc449410fc..bd7b023b5b6 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -68,6 +68,7 @@ //Some tidying-up. flavor_text = "It's a tiny little repair drone. The casing is stamped with an NT logo and the subscript: 'Nanotrasen Recursive Repair Systems: Fixing Tomorrow's Problem, Today!'" + scanner.Grant(src) update_icons() /mob/living/silicon/robot/drone/init() diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 25904e27723..7b1810617b4 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -12,7 +12,8 @@ /obj/item/weapon/firealarm_electronics, /obj/item/weapon/airalarm_electronics, /obj/item/weapon/airlock_electronics, - /obj/item/weapon/module/power_control, + /obj/item/weapon/intercom_electronics, + /obj/item/weapon/apc_electronics, /obj/item/weapon/stock_parts, /obj/item/mounted/frame/light_fixture, /obj/item/mounted/frame/apc_frame, @@ -366,4 +367,4 @@ stack = stack_plastic stack.amount++ - decompiler.stored_comms[type]--; + decompiler.stored_comms[type]--; \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 5113c719dbb..4d0fc33ca06 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -65,7 +65,7 @@ for(var/V in components) var/datum/robot_component/C = components[V] C.consume_power() - + var/amt = Clamp((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell. cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick @@ -287,7 +287,6 @@ src.bodytemp.icon_state = "temp-2" - if(src.pullin) src.pullin.icon_state = "pull[src.pulling ? 1 : 0]" //Oxygen and fire does nothing yet!! // if (src.oxygen) src.oxygen.icon_state = "oxy[src.oxygen_alert ? 1 : 0]" // if (src.fire) src.fire.icon_state = "fire[src.fire_alert ? 1 : 0]" diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 2e71b85b668..0b80df799ee 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -149,7 +149,7 @@ var/list/robot_verbs_default = list( hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + scanner.Grant(src) /mob/living/silicon/robot/proc/init(var/alien=0) aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src) @@ -206,6 +206,10 @@ var/list/robot_verbs_default = list( connected_ai.connected_robots -= src qdel(wires) wires = null + qdel(module) + module = null + camera = null + cell = null return ..() /mob/living/silicon/robot/proc/pick_module() @@ -905,7 +909,7 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 4e45d6bc2ba..8546c793876 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -10,7 +10,7 @@ var/obj/item/emag = null var/obj/item/borg/upgrade/jetpack = null var/list/subsystems = list() - + var/list/stacktypes var/channels = list() @@ -30,7 +30,16 @@ src.modules += new /obj/item/device/flash/cyborg(src) src.emag = new /obj/item/toy/sword(src) src.emag.name = "Placeholder Emag Item" - + +/obj/item/weapon/robot_module/Destroy() + for(var/module in modules) + qdel(module) + modules.Cut() + qdel(emag) + emag = null + qdel(jetpack) + jetpack = null + return ..() /obj/item/weapon/robot_module/proc/fix_modules() for(var/obj/item/I in modules) @@ -83,7 +92,7 @@ R.add_language("Chittin", 0) R.add_language("Bubblish", 0) R.add_language("Clownish",0) - + /obj/item/weapon/robot_module/proc/add_subsystems(var/mob/living/silicon/robot/R) R.verbs |= subsystems @@ -102,7 +111,7 @@ src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/device/healthanalyzer(src) src.emag = new /obj/item/weapon/melee/energy/sword/cyborg(src) - + fix_modules() /obj/item/weapon/robot_module/medical @@ -114,7 +123,7 @@ /obj/item/stack/medical/splint = 5, /obj/item/stack/nanopaste = 5 ) - + /obj/item/weapon/robot_module/medical/New() src.modules += new /obj/item/device/flash/cyborg(src) src.modules += new /obj/item/device/healthanalyzer/advanced(src) @@ -144,7 +153,7 @@ src.emag.reagents.add_reagent("facid", 250) src.emag.name = "Polyacid spray" - + fix_modules() /obj/item/weapon/robot_module/medical/respawn_consumable(var/mob/living/silicon/robot/R) @@ -223,7 +232,7 @@ src.modules += new /obj/item/taperoll/police(src) src.modules += new /obj/item/clothing/mask/gas/sechailer/cyborg(src) src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src) - + fix_modules() /obj/item/weapon/robot_module/janitor @@ -240,7 +249,7 @@ src.emag.reagents.add_reagent("lube", 250) src.emag.name = "Lube spray" - + fix_modules() /obj/item/weapon/robot_module/butler @@ -270,7 +279,7 @@ R.my_atom = src.emag R.add_reagent("beer2", 50) src.emag.name = "Mickey Finn's Special Brew" - + fix_modules() /obj/item/weapon/robot_module/butler/respawn_consumable(var/mob/living/silicon/robot/R) @@ -327,7 +336,7 @@ src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) src.modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(src) src.emag = new /obj/item/borg/stun(src) - + fix_modules() /obj/item/weapon/robot_module/deathsquad @@ -341,7 +350,7 @@ src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += new /obj/item/weapon/crowbar(src) src.emag = null - + fix_modules() /obj/item/weapon/robot_module/syndicate @@ -357,9 +366,9 @@ src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/weapon/pinpointer/operative(src) src.emag = null - + fix_modules() - + /obj/item/weapon/robot_module/syndicate_medical name = "syndicate medical robot module" stacktypes = list( @@ -368,7 +377,7 @@ /obj/item/stack/medical/splint = 25, /obj/item/stack/nanopaste = 25 ) - + /obj/item/weapon/robot_module/syndicate_medical/New() src.modules += new /obj/item/device/flash/cyborg(src) src.modules += new /obj/item/device/healthanalyzer/advanced(src) @@ -395,7 +404,7 @@ src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/weapon/pinpointer/operative(src) src.emag = null - + fix_modules() /obj/item/weapon/robot_module/combat @@ -410,7 +419,7 @@ src.modules += new /obj/item/borg/combat/mobility(src) src.modules += new /obj/item/weapon/wrench(src) //Is a combat android really going to be stopped by a chair? src.emag = new /obj/item/weapon/gun/energy/lasercannon/cyborg(src) - + fix_modules() /obj/item/weapon/robot_module/alien/hunter diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index c78721f8357..986f6b3c7e1 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -64,8 +64,6 @@ src << "\red Warning: Electromagnetic pulse detected." ..() -/mob/living/silicon/stun_effect_act(var/stun_amount, var/agony_amount) - return //immune /mob/living/silicon/proc/damage_mob(var/brute = 0, var/fire = 0, var/tox = 0) return diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm index 6d5cd3ba6bd..a7d07c8485c 100644 --- a/code/modules/mob/living/simple_animal/bees.dm +++ b/code/modules/mob/living/simple_animal/bees.dm @@ -30,7 +30,6 @@ /mob/living/simple_animal/bee/New(loc, var/obj/machinery/apiary/new_parent) ..() parent = new_parent - verbs -= /atom/movable/verb/pull /mob/living/simple_animal/bee/Destroy() if(parent) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 3b6e7320717..875d6cfcf95 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -64,10 +64,10 @@ /mob/living/simple_animal/construct/attack_animal(mob/living/simple_animal/M as mob) if(istype(M, /mob/living/simple_animal/construct/builder)) health += 5 - M.emote("mends some of \the [src]'s wounds.") + M.custom_emote(1,"mends some of \the [src]'s wounds.") else if(M.melee_damage_upper <= 0) - M.emote("[M.friendly] \the [src]") + M.custom_emote(1, "[M.friendly] \the [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm index ae21a0a3d8f..ef5a8ec3719 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/living/simple_animal/corpse.dm @@ -78,7 +78,7 @@ W.assignment = corpseidjob W.registered_name = M.real_name M.equip_to_slot_or_del(W, slot_wear_id) - del(src) + qdel(src) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index b13714ae552..44735915da3 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -39,7 +39,7 @@ if(!stat && !resting && !buckled) for(var/mob/living/simple_animal/mouse/M in view(1,src)) if(!M.stat && Adjacent(M)) - emote("me", 1, "splats \the [M]!") + custom_emote(1, "splats \the [M]!") M.splat() movement_target = null stop_automated_movement = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 0b904097fa3..c6bed1b1c26 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -38,9 +38,6 @@ if(fire) if(fire_alert) fire.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for heat and 2 for cold. else fire.icon_state = "fire0" - if(pullin) - if(pulling) pullin.icon_state = "pull1" - else pullin.icon_state = "pull0" if(oxygen) if(oxygen_alert) oxygen.icon_state = "oxy1" else oxygen.icon_state = "oxy0" @@ -97,7 +94,7 @@ user << "[src] is wearing too much armor! You can't reach \his skin." visible_message("[user] gently taps [src] with [O].") if(health>0 && prob(15)) - emote("me", 1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.") + custom_emote(1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.") return if (istype(O, /obj/item/weapon/razor)) @@ -189,6 +186,7 @@ var/list/allowed_types = list( /obj/item/clothing/suit/armor/vest, /obj/item/clothing/suit/space/deathsquad, + /obj/item/clothing/suit/space/rig/engineering, /obj/item/device/radio, /obj/item/device/radio/off, /obj/item/clothing/suit/cardborg, @@ -369,6 +367,11 @@ desc = "That's not red paint. That's real corgi blood." valid = 1 + if(/obj/item/clothing/head/helmet/space/rig/engineering) + name = "Space Explorer [real_name]" + desc = "That's one small step for a corgi. One giant yap for corgikind." + valid = 1 + if(/obj/item/clothing/mask/fakemoustache) name = "Definitely Not [real_name]" desc = "That's Definitely Not [real_name]" @@ -461,10 +464,10 @@ movement_target.attack_animal(src) else if(ishuman(movement_target.loc) ) if(prob(20)) - emote("me", 1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face") + custom_emote(1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face") if(prob(1)) - emote("me", 1, pick("dances around.","chases its tail!")) + custom_emote(1, pick("dances around.","chases its tail!")) spawn(0) if (ckey == null) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) @@ -591,7 +594,7 @@ if(!stat && !resting && !buckled) if(prob(1)) if (ckey == null) - emote("me", 1, pick("dances around.","chases her tail.")) + custom_emote(1, 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 @@ -609,10 +612,10 @@ if(change > 0) if(M && stat != DEAD) // Added check to see if this mob (the corgi) is dead to fix issue 2454 flick_overlay(image('icons/mob/animal.dmi',src,"heart-ani2",MOB_LAYER+1), list(M.client), 20) - emote("me", 1, "yaps happily!") + custom_emote(1, "yaps happily!") else if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case) - emote("me", 1, "growls!") + custom_emote(1, "growls!") /mob/living/simple_animal/pet/corgi/Ian/borgi name = "E-N" diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index f25e44927f8..274326bd78f 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -63,7 +63,7 @@ health = min(maxHealth, health + MED.heal_brute) MED.amount -= 1 if(MED.amount <= 0) - del(MED) + qdel(MED) for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) M.show_message("\blue [user] applies the [MED] on [src]") diff --git a/code/modules/mob/living/simple_animal/friendly/pug.dm b/code/modules/mob/living/simple_animal/friendly/pug.dm index 224d46dd8f7..a819602719a 100644 --- a/code/modules/mob/living/simple_animal/friendly/pug.dm +++ b/code/modules/mob/living/simple_animal/friendly/pug.dm @@ -24,7 +24,7 @@ if(!stat && !resting && !buckled) if(prob(1)) - emote("me", 1, pick("chases its tail.")) + custom_emote(1, pick("chases its 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 diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index a2b56219f56..0c2174d131e 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -50,13 +50,13 @@ /mob/living/simple_animal/hostile/scarybat/FindTarget() . = ..() if(.) - emote("flutters towards [.]") + custom_emote(1, "flutters towards [.]") /mob/living/simple_animal/hostile/scarybat/Found(var/atom/A)//This is here as a potential override to pick a specific target if available if(istype(A) && A == owner) return 0 return ..() - + /mob/living/simple_animal/hostile/scarybat/CanAttack(var/atom/the_target)//This is here as a potential override to pick a specific target if available if(istype(the_target) && the_target == owner) return 0 diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 514d2d313bd..05b8740e671 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -86,7 +86,7 @@ if(stance_step in list(1,4,7)) //every 3 ticks var/action = pick( list( "growls at [target]", "stares angrily at [target]", "prepares to attack [target]", "closely watches [target]" ) ) if(action) - emote(action) + custom_emote(1, action) if(!found_mob) stance_step-- @@ -97,7 +97,7 @@ if(HOSTILE_STANCE_ATTACKING) if(stance_step >= 20) //attacks for 20 ticks, then it gets tired and needs to rest - emote( "is worn out and needs to rest" ) + custom_emote(1, "is worn out and needs to rest" ) stance = HOSTILE_STANCE_TIRED stance_step = 0 walk(src, 0) //This stops the bear's walking @@ -125,14 +125,14 @@ /mob/living/simple_animal/hostile/bear/FindTarget() . = ..() if(.) - emote("stares alertly at [.]") + custom_emote(1, "stares alertly at [.]") stance = HOSTILE_STANCE_ALERT /mob/living/simple_animal/hostile/bear/LoseTarget() ..(5) /mob/living/simple_animal/hostile/bear/AttackingTarget() - emote( pick( list("slashes at [target]", "bites [target]") ) ) + custom_emote(1, pick( list("slashes at [target]", "bites [target]") ) ) var/damage = rand(20,30) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 93b90107133..5c8c80d5bde 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -48,7 +48,7 @@ /mob/living/simple_animal/hostile/carp/FindTarget() . = ..() if(.) - emote("me", 1, "gnashes at [.]!") + custom_emote(1, "gnashes at [.]!") /mob/living/simple_animal/hostile/carp/AttackingTarget() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 06988408c83..bbcacd234fe 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -39,7 +39,7 @@ /mob/living/simple_animal/hostile/faithless/FindTarget() . = ..() if(.) - emote("me", 1, "wails at [.]!") + custom_emote(1, "wails at [.]!") /mob/living/simple_animal/hostile/faithless/AttackingTarget() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index dd42262bdcd..6246b286841 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -41,7 +41,7 @@ /mob/living/simple_animal/hostile/mimic/FindTarget() . = ..() if(.) - emote("growls at [.]") + custom_emote(1, "growls at [.]") /mob/living/simple_animal/hostile/mimic/Die() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index eb3d989cb3e..37f675f532e 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -161,7 +161,7 @@ ..() qdel(src) -/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() +/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell. //some random debris left behind if(has_loot) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread @@ -170,16 +170,16 @@ var/obj/O //shards - O = PoolOrNew(/obj/item/weapon/shard, loc) + O = new /obj/item/weapon/shard(loc) step_to(O, get_turf(pick(view(7, src)))) if(prob(75)) - O = PoolOrNew(/obj/item/weapon/shard, loc) + O = new /obj/item/weapon/shard(loc) step_to(O, get_turf(pick(view(7, src)))) if(prob(50)) - O = PoolOrNew(/obj/item/weapon/shard, loc) + O = new /obj/item/weapon/shard(loc) step_to(O, get_turf(pick(view(7, src)))) if(prob(25)) - O = PoolOrNew(/obj/item/weapon/shard, loc) + O = new /obj/item/weapon/shard(loc) step_to(O, get_turf(pick(view(7, src)))) //rods diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm index 01178af83f2..93d510de9ff 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm @@ -59,7 +59,7 @@ /mob/living/simple_animal/hostile/retaliate/ghost/FindTarget() . = ..() if(.) - emote("wails at [.]") + custom_emote(1, "wails at [.]") /mob/living/simple_animal/hostile/retaliate/ghost/Life() if(target) diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 2d49cbf836d..a5138f08d08 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -40,7 +40,7 @@ /mob/living/simple_animal/hostile/tree/FindTarget() . = ..() if(.) - emote("growls at [.]") + custom_emote(1, "growls at [.]") /mob/living/simple_animal/hostile/tree/AttackingTarget() . =..() diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index c3ab9221a20..84d92ee5985 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -343,7 +343,7 @@ //Search for item to steal parrot_interest = search_for_item() if(parrot_interest) - emote("looks in [parrot_interest]'s direction and takes flight") + custom_emote(1,"looks in [parrot_interest]'s direction and takes flight") parrot_state = PARROT_SWOOP | PARROT_STEAL icon_state = "parrot_fly" return @@ -365,7 +365,7 @@ if(AM) if(istype(AM, /obj/item) || isliving(AM)) //If stealable item parrot_interest = AM - emote("turns and flies towards [parrot_interest]") + custom_emote(1,"turns and flies towards [parrot_interest]") parrot_state = PARROT_SWOOP | PARROT_STEAL return else //Else it's a perch @@ -479,11 +479,11 @@ var/obj/item/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone))) H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1) - emote(pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons.")) + custom_emote(1, pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons.")) else L.adjustBruteLoss(damage) - emote(pick("pecks at [L].", "claws [L].")) + custom_emote(1, pick("pecks at [L].", "claws [L].")) return //Otherwise, fly towards the mob! diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 8696a4b0f3c..c8c9c8c37c0 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -152,23 +152,23 @@ else randomValue -= speak.len if(emote_see && randomValue <= emote_see.len) - emote(pick(emote_see),1) + custom_emote(1, pick(emote_see)) else - emote(pick(emote_hear),2) + custom_emote(2, pick(emote_hear)) else say(pick(speak)) else if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len)) - emote(pick(emote_see),1) + custom_emote(1, pick(emote_see)) if((emote_hear && emote_hear.len) && !(emote_see && emote_see.len)) - emote(pick(emote_hear),2) + custom_emote(2, pick(emote_hear)) if((emote_hear && emote_hear.len) && (emote_see && emote_see.len)) var/length = emote_hear.len + emote_see.len var/pick = rand(1,length) if(pick <= emote_see.len) - emote(pick(emote_see),1) + custom_emote(1, pick(emote_see)) else - emote(pick(emote_hear),2) + custom_emote(2,pick(emote_hear)) //Atmos @@ -272,7 +272,7 @@ /mob/living/simple_animal/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("me", 1, "[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 1a1304dbd19..a1478496ff7 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -30,7 +30,9 @@ client.images = null //remove the images such as AIs being unable to see runes client.screen = list() //remove hud items just in case - if(hud_used) del(hud_used) //remove the hud objects + if(hud_used) + qdel(hud_used) //remove the hud objects + hud_used = null hud_used = new /datum/hud(src) next_move = 1 @@ -46,7 +48,7 @@ if(ckey in deadmins) - verbs += /client/proc/readmin + verbs += /client/proc/readmin //Clear ability list and update from mob. client.verbs -= ability_verbs @@ -58,12 +60,12 @@ var/mob/living/carbon/human/H = src if(H.species && H.species.abilities) client.verbs |= H.species.abilities - + client.screen += client.void - + CallHook("Login", list("client" = src.client, "mob" = src)) - + // Calling update_interface() in /mob/Login() causes the Cyborg to immediately be ghosted; because of winget(). // Calling it in the overriden Login, such as /mob/living/Login() doesn't cause this. /mob/proc/update_interface() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ae830d920b3..2c96609324d 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -3,9 +3,13 @@ dead_mob_list -= src living_mob_list -= src qdel(hud_used) + hud_used = null if(mind && mind.current == src) spellremove(src) ghostize() + for(var/mob/dead/observer/M in following_mobs) + M.following = null + following_mobs = null return ..() /mob/New() @@ -841,6 +845,30 @@ var/list/slot_equipment_priority = list( \ if(istype(M,/mob/living/silicon/ai)) return show_inv(usr) +//this and stop_pulling really ought to be /mob/living procs +/mob/proc/start_pulling(atom/movable/AM) + if ( !AM || !src || src==AM || !isturf(AM.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort! + return + if (!( AM.anchored )) + AM.add_fingerprint(src) + + // If we're pulling something then drop what we're currently pulling and pull this instead. + if(pulling) + // Are we trying to pull something we are already pulling? Then just stop here, no need to continue. + if(AM == pulling) + return + stop_pulling() + + src.pulling = AM + AM.pulledby = src + if(pullin) + pullin.update_icon(src) + if(ismob(AM)) + var/mob/M = AM + if(!iscarbon(src)) + M.LAssailant = null + else + M.LAssailant = usr /mob/verb/stop_pulling() @@ -850,37 +878,8 @@ var/list/slot_equipment_priority = list( \ if(pulling) pulling.pulledby = null pulling = null - -/mob/proc/start_pulling(var/atom/movable/AM) - - if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort! - return - - if (AM.anchored) - usr << "It won't budge!" - return - - var/mob/M = AM - if(ismob(AM)) - if(!iscarbon(src)) - M.LAssailant = null - else - M.LAssailant = usr - - if(pulling) - var/pulling_old = pulling - stop_pulling() - // Are we pulling the same thing twice? Just stop pulling. - if(pulling_old == AM) - return - - src.pulling = AM - AM.pulledby = src - - //Attempted fix for people flying away through space when cuffed and dragged. - if(ismob(AM)) - var/mob/pulled = AM - pulled.inertia_dir = 0 + if(pullin) + pullin.update_icon(src) /mob/proc/can_use_hands() return @@ -1443,4 +1442,9 @@ mob/proc/yank_out_object() M.pixel_y = initial(M.pixel_y) /mob/proc/can_unbuckle(mob/user) - return 1 \ No newline at end of file + return 1 + + +//Can the mob see reagents inside of containers? +/mob/proc/can_see_reagents() + return 0 \ No newline at end of file diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 37af6e961a9..4f3ad8d2d6b 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -131,6 +131,9 @@ var/datum/hud/hud_used = null + var/research_scanner = 0 //For research scanner equipped mobs. Enable to show research data when examining. + var/datum/action/scan_mode/scanner = new + var/list/grabbed_by = list( ) var/list/requests = list( ) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index dce8b3c9ffd..214c6dfa3a9 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -450,5 +450,27 @@ /mob/proc/mob_negates_gravity() return 0 +/mob/proc/Move_Pulled(atom/A) + if (!canmove || restrained() || !pulling) + return + if (pulling.anchored) + return + if (!pulling.Adjacent(src)) + return + if (A == loc && pulling.density) + return + if (!Process_Spacemove(get_dir(pulling.loc, A))) + return + if (ismob(pulling)) + var/mob/M = pulling + var/atom/movable/t = M.pulling + M.stop_pulling() + step(pulling, get_dir(pulling.loc, A)) + if(M) + M.start_pulling(t) + else + step(pulling, get_dir(pulling.loc, A)) + return + /mob/proc/update_gravity() return diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index da87a2b7537..9624e8fe53b 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -481,6 +481,7 @@ domutcheck(new_character) new_character.dna.UpdateSE() + new_character.sync_organ_dna() //just fucking incase I guess // Do the initial caching of the player's body icons. new_character.force_update_limbs() diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 142f350131e..6f9e9ad1440 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -189,9 +189,9 @@ datum/preferences return clothes_s proc/update_preview_icon(var/for_observer=0) //seriously. This is horrendous. - del(preview_icon_front) - del(preview_icon_side) - del(preview_icon) + qdel(preview_icon_front) + qdel(preview_icon_side) + qdel(preview_icon) var/g = "m" if(gender == FEMALE) g = "f" @@ -806,8 +806,8 @@ datum/preferences preview_icon_front = new(preview_icon, dir = SOUTH) preview_icon_side = new(preview_icon, dir = WEST) - del(eyes_s) - del(underwear_s) - del(undershirt_s) - del(socks_s) - del(clothes_s) + qdel(eyes_s) + qdel(underwear_s) + qdel(undershirt_s) + qdel(socks_s) + qdel(clothes_s) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index a93d2a278a8..e7d4fd89eba 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -323,4 +323,7 @@ var/list/organ_cache = list() if(fingerprintslast) O.fingerprintslast = fingerprintslast user.put_in_active_hand(O) - qdel(src) \ No newline at end of file + qdel(src) + +/obj/item/organ/proc/surgeryize() + return \ No newline at end of file diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 5438fdd3ec3..46d7f01b0d9 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -33,10 +33,10 @@ if(is_bruised()) if(prob(2)) - spawn owner.emote("me", 1, "coughs up blood!") + spawn owner.custom_emote(1, "coughs up blood!") owner.drip(10) if(prob(4)) - spawn owner.emote("me", 1, "gasps for air!") + spawn owner.custom_emote(1, "gasps for air!") owner.losebreath += 5 /obj/item/organ/kidneys @@ -81,6 +81,14 @@ owner.b_eyes ? owner.b_eyes : 0 ) +/obj/item/organ/eyes/surgeryize() + if(!owner) + return + owner.disabilities &= ~NEARSIGHTED + owner.sdisabilities &= ~BLIND + owner.eye_blurry = 0 + owner.eye_blind = 0 + /obj/item/organ/liver name = "liver" icon_state = "liver" diff --git a/code/modules/pooling/pool.dm b/code/modules/pooling/pool.dm index 048940cfb51..25ff8e3e603 100644 --- a/code/modules/pooling/pool.dm +++ b/code/modules/pooling/pool.dm @@ -16,7 +16,7 @@ To put a object back in the pool, call PlaceInPool(object) This will call destroy on the object, set its loc to null, and reset all of its vars to their default -You can override your object's destroy to return QDEL_HINT_PLACEINPOOL +You can override your object's destroy to return QDEL_HINT_PUTINPOOL to ensure its always placed in this pool (this will only be acted on if qdel calls destroy, and destroy will not get called twice) */ diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 41e294eba58..67f5771588a 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -105,6 +105,15 @@ /obj/machinery/power/apc/noalarm report_power_alarm = 0 +/obj/item/weapon/apc_electronics + name = "power control module" + desc = "Heavy-duty switching circuits for power control." + icon = 'icons/obj/module.dmi' + icon_state = "power_mod" + w_class = 2.0 + item_state = "electronic" + flags = CONDUCT + /obj/machinery/power/apc/connect_to_network() //Override because the APC does not directly connect to the network; it goes through a terminal. //The terminal is what the power computer looks for anyway. @@ -421,7 +430,7 @@ user.visible_message(\ "[user.name] has removed the power control board from [src.name]!",\ "You remove the power control board.") - new /obj/item/weapon/module/power_control(loc) + new /obj/item/weapon/apc_electronics(loc) else if (opened!=2) //cover isn't removed opened = 0 update_icon() @@ -532,7 +541,7 @@ new /obj/item/stack/cable_coil(loc,10) user << "You cut the cables and dismantle the power terminal." qdel(terminal) // qdel - else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack)) + else if (istype(W, /obj/item/weapon/apc_electronics) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack)) user << "You trying to insert the power control board into the frame..." playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 10, target = src)) @@ -540,7 +549,7 @@ has_electronics = 1 user << "You place the power control board inside the frame." qdel(W) // qdel - else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && ((stat & BROKEN) || malfhack)) + else if (istype(W, /obj/item/weapon/apc_electronics) && opened && has_electronics==0 && ((stat & BROKEN) || malfhack)) user << "You cannot put the board inside, the frame is damaged." return else if (istype(W, /obj/item/weapon/weldingtool) && opened && has_electronics==0 && !terminal) @@ -1046,7 +1055,7 @@ src.occupier.mind.transfer_to(src.occupier.parent) src.occupier.parent.adjustOxyLoss(src.occupier.getOxyLoss()) src.occupier.parent.cancel_camera() - del(src.occupier) // qdel + qdel(src.occupier) // qdel if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA) for(var/obj/item/weapon/pinpointer/point in world) for(var/datum/mind/AI_mind in ticker.mode.malf_ai) @@ -1114,9 +1123,12 @@ if(!area.requires_power) return - lastused_light = area.usage(LIGHT) + lastused_light = area.usage(STATIC_LIGHT) + lastused_light += area.usage(LIGHT) lastused_equip = area.usage(EQUIP) + lastused_equip += area.usage(STATIC_EQUIP) lastused_environ = area.usage(ENVIRON) + lastused_environ += area.usage(STATIC_ENVIRON) area.clear_usage() lastused_total = lastused_light + lastused_equip + lastused_environ @@ -1357,4 +1369,4 @@ else return 0 -#undef APC_UPDATE_ICON_COOLDOWN +#undef APC_UPDATE_ICON_COOLDOWN \ No newline at end of file diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 247c5d5d752..081fd35e3f8 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -610,7 +610,7 @@ obj/structure/cable/proc/cableColor(var/colorC) if(ismob(loc)) //handle mob icon update var/mob/M = loc M.unEquip(src) - qqdel(src) + qdel(src) return 1 else amount -= used diff --git a/code/modules/power/engine.dm b/code/modules/power/engine.dm index 614a7393d9a..1d7a97406e4 100644 --- a/code/modules/power/engine.dm +++ b/code/modules/power/engine.dm @@ -1,20 +1,6 @@ /turf/simulated/floor/engine/attack_hand(var/mob/user as mob) - if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) - return - if (user.pulling.anchored) - return - if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) - return - if (ismob(user.pulling)) - var/mob/M = user.pulling - var/atom/movable/t = M.pulling - M.stop_pulling() - step(user.pulling, get_dir(user.pulling.loc, src)) - M.start_pulling(t) - else - step(user.pulling, get_dir(user.pulling.loc, src)) - return + user.Move_Pulled(src) /turf/simulated/floor/engine/ex_act(severity) switch(severity) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 24373f1b4f5..c75f53905f4 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -136,6 +136,7 @@ power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list var/on = 0 // 1 if on, 0 if off var/on_gs = 0 + var/static_power_used = 0 var/brightness_range = 8 // luminosity when on, also used in power calculation var/brightness_power = 3 var/brightness_color = null @@ -180,7 +181,6 @@ // create a new lighting fixture /obj/machinery/light/New() ..() - spawn(2) var/area/A = get_area(src) if(A && !A.requires_power) @@ -233,10 +233,8 @@ switchcount++ if(rigged) if(status == LIGHT_OK && trigger) - log_admin("LOG: Rigged light explosion, last touched by [fingerprintslast]") message_admins("LOG: Rigged light explosion, last touched by [fingerprintslast]") - explode() else if( prob( min(60, switchcount*switchcount*0.01) ) ) if(status == LIGHT_OK && trigger) @@ -251,10 +249,14 @@ use_power = 1 set_light(0) - active_power_usage = brightness_range * 10 + active_power_usage = (brightness_range * 10) if(on != on_gs) on_gs = on - + if(on) + static_power_used = brightness_range * 20 //20W per unit luminosity + addStaticPower(static_power_used, STATIC_LIGHT) + else + removeStaticPower(static_power_used, STATIC_LIGHT) // attempt to set the light's on/off status // will not switch on if broken/burned/empty @@ -556,19 +558,10 @@ // timed process // use power -#define LIGHTING_POWER_FACTOR 20 //20W per unit luminosity - - -/obj/machinery/light/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY - if(on) - use_power(brightness_range * LIGHTING_POWER_FACTOR, LIGHT) - - // called when area power state changes /obj/machinery/light/power_change() - spawn(10) - var/area/A = get_area_master(src) - if(A) seton(A.lightswitch && A.power_light) + var/area/A = get_area_master(src) + if(A) seton(A.lightswitch && A.power_light) // called when on fire diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 083fe7009c2..d97a8fe7898 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -44,7 +44,7 @@ return powernet.avail else return 0 - + /obj/machinery/power/proc/load() if(powernet) return powernet.load @@ -77,6 +77,15 @@ chan = power_channel A.use_power(amount, chan) +/obj/machinery/proc/addStaticPower(value, powerchannel) + var/area/A = get_area(src) + if(!A) + return + A.addStaticPower(value, powerchannel) + +/obj/machinery/proc/removeStaticPower(value, powerchannel) + addStaticPower(-value, powerchannel) + /obj/machinery/proc/power_change() // called whenever the power settings of the containing area change // by default, check equipment channel & set flag // can override if needed diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm index 29d8af7a12f..d40281eae65 100644 --- a/code/modules/power/powernet.dm +++ b/code/modules/power/powernet.dm @@ -29,8 +29,7 @@ M.powernet = null powernets -= src - ..() - return QDEL_HINT_QUEUE + return ..() //Returns the amount of excess power (before refunding to SMESs) from last tick. //This is for machines that might adjust their power consumption using this data. diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 93936f3b06f..d7b8d2bcdd1 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -191,7 +191,7 @@ src.fire_delay = rand(minimum_fire_delay,maximum_fire_delay) src.shot_number = 0 - var/obj/item/projectile/beam/emitter/A = PoolOrNew(/obj/item/projectile/beam/emitter,src.loc) + var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter(src.loc) A.dir = src.dir playsound(get_turf(src), 'sound/weapons/emitter.ogg', 25, 1) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index c4170888d3d..338f3830766 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -45,6 +45,7 @@ /obj/singularity/Destroy() processing_objects.Remove(src) singularities -= src + target = null return ..() /obj/singularity/Move(atom/newloc, direct) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index f9b97b7f26a..597a078b320 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -72,6 +72,7 @@ /obj/machinery/power/supermatter_shard/Destroy() investigate_log("has been destroyed.", "supermatter") qdel(radio) + radio = null return ..() /obj/machinery/power/supermatter_shard/proc/explode() @@ -233,7 +234,7 @@ /obj/machinery/power/supermatter_shard/attack_ai(mob/user as mob) ui_interact(user) - + /obj/machinery/power/supermatter_shard/attack_ghost(mob/user as mob) ui_interact(user) @@ -242,16 +243,16 @@ "You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"",\ "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) - + playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) + Consume(user) - + /obj/machinery/power/supermatter_shard/proc/get_integrity() var/integrity = damage / explosion_point integrity = round(100 - integrity * 100) integrity = integrity < 0 ? 0 : integrity return integrity - + // This is purely informational UI that may be accessed by AIs or robots /obj/machinery/power/supermatter_shard/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] diff --git a/code/modules/power/switch.dm b/code/modules/power/switch.dm index 2bb312c12f0..0f36d7274bf 100644 --- a/code/modules/power/switch.dm +++ b/code/modules/power/switch.dm @@ -80,5 +80,5 @@ else icon_state = icon_state_off for(var/obj/structure/cable/C in src.loc) - del(C) + qdel(C) */ \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 8117ff8441c..557407ac8a3 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -24,7 +24,7 @@ desc = "A 9mm bullet casing." caliber = "9mm" projectile_type = "/obj/item/projectile/bullet/weakbullet3" - + /obj/item/ammo_casing/c9mmap desc = "A 9mm bullet casing." caliber = "9mm" @@ -63,6 +63,14 @@ pellets = 5 deviation = 30 +/obj/item/ammo_casing/shotgun/rubbershot + name = "rubber shot" + desc = "A shotgun casing filled with densely-packed rubber balls, used to incapacitate crowds from a distance." + icon_state = "bshell" + projectile_type = "/obj/item/projectile/bullet/rpellet" + pellets = 5 + deviation = 30 + materials = list(MAT_METAL=4000) /obj/item/ammo_casing/shotgun/beanbag name = "beanbag slug" diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index d84b9e9dc75..9ef9938071a 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -71,7 +71,7 @@ /obj/item/ammo_box/magazine/internal/shotriot name = "riot shotgun internal magazine" desc = "Oh god, this shouldn't be here" - ammo_type = "/obj/item/ammo_casing/shotgun/beanbag" + ammo_type = "/obj/item/ammo_casing/shotgun/rubbershot" caliber = "shotgun" max_ammo = 6 multiload = 0 @@ -125,26 +125,30 @@ /obj/item/ammo_box/magazine/uzim9mm/update_icon() ..() - icon_state = "uzi9mm-[round(ammo_count(),4)]" - + icon_state = "uzi9mm-[round(ammo_count(),4)]" + /obj/item/ammo_box/magazine/smgm9mm name = "SMG magazine (9mm)" icon_state = "smg9mm" ammo_type = "/obj/item/ammo_casing/c9mm" caliber = "9mm" max_ammo = 30 - + materials = list(MAT_METAL = 2000) + /obj/item/ammo_box/magazine/smgm9mm/ap name = "SMG magazine (Armour Piercing 9mm)" ammo_type = /obj/item/ammo_casing/c9mmap + materials = list(MAT_METAL = 3000) /obj/item/ammo_box/magazine/smgm9mm/toxin name = "SMG magazine (Toxin Tipped 9mm)" ammo_type = /obj/item/ammo_casing/c9mmtox + materials = list(MAT_METAL = 3000) /obj/item/ammo_box/magazine/smgm9mm/fire name = "SMG Magazine (Incendiary 9mm)" ammo_type = /obj/item/ammo_casing/c9mminc + materials = list(MAT_METAL = 3000) /obj/item/ammo_box/magazine/smgm9mm/update_icon() ..() diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index b4462517019..cbe75d884ef 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -75,10 +75,6 @@ /obj/item/projectile/beam/emitter/singularity_pull() return //don't want the emitters to miss -/obj/item/projectile/beam/emitter/Destroy() - ..() - return QDEL_HINT_PUTINPOOL - /obj/item/projectile/lasertag name = "laser tag beam" icon_state = "omnilaser" @@ -233,12 +229,12 @@ f.hotspot_expose(1000,CELL_VOLUME) if((x == 1 || x == world.maxx || y == 1 || y == world.maxy)) //world << "deleting" - //del(src) //Delete if it passes the world edge + //qdel(src) //Delete if it passes the world edge broken = 1 return if(kill_count < 1) //world << "deleting" - //del(src) + //qdel(src) broken = 1 kill_count-- //world << "[x] [y]" @@ -275,401 +271,4 @@ if(istype(target, /mob/living)) var/mob/living/M = target M.playsound_local(src, "explosion", 50, 1) - ..() - -/* -/* - * Use: Caches beam state images and holds turfs that had these images overlaid. - * Structure: - * beam_master - * icon_states/dirs of beams - * image for that beam - * references for fired beams - * icon_states/dirs for each placed beam image - * turfs that have that icon_state/dir - */ -var/list/beam_master = list() - -// Special laser the captains gun uses -/obj/item/projectile/beam/captain - name = "captain laser" - damage = 40 - -/obj/item/projectile/beam/lightning - invisibility = 101 - name = "lightning" - damage = 0 - icon = 'icons/obj/lightning.dmi' - icon_state = "lightning" - stun = 10 - weaken = 10 - stutter = 50 - eyeblur = 50 - var/tang = 0 - layer = 3 - var/turf/last = null - kill_count = 6 - - proc/adjustAngle(angle) - angle = round(angle) + 45 - if(angle > 180) - angle -= 180 - else - angle += 180 - if(!angle) - angle = 1 - /*if(angle < 0) - //angle = (round(abs(get_angle(A, user))) + 45) - 90 - angle = round(angle) + 45 + 180 - else - angle = round(angle) + 45*/ - return angle - - process() - var/first = 1 //So we don't make the overlay in the same tile as the firer - var/broke = 0 - var/broken - var/atom/curr = current - var/Angle=round(Get_Angle(firer,curr)) - var/icon/I=new('icons/obj/zap.dmi',"lightning") - I.Turn(Angle) - var/DX=(32*curr.x+curr.pixel_x)-(32*firer.x+firer.pixel_x) - var/DY=(32*curr.y+curr.pixel_y)-(32*firer.y+firer.pixel_y) - var/N=0 - var/length=round(sqrt((DX)**2+(DY)**2)) - var/count = 0 - for(N,N= kill_count) - break - count++ - var/obj/effect/overlay/beam/X=new(loc) - X.BeamSource=src - if(N+32>length) - var/icon/II=new(icon,icon_state) - II.DrawBox(null,1,(length-N),32,32) - II.Turn(Angle) - X.icon=II - else X.icon=I - var/Pixel_x=round(sin(Angle)+32*sin(Angle)*(N+16)/32) - var/Pixel_y=round(cos(Angle)+32*cos(Angle)*(N+16)/32) - if(DX==0) Pixel_x=0 - if(DY==0) Pixel_y=0 - if(Pixel_x>32) - for(var/a=0, a<=Pixel_x,a+=32) - X.x++ - Pixel_x-=32 - if(Pixel_x<-32) - for(var/a=0, a>=Pixel_x,a-=32) - X.x-- - Pixel_x+=32 - if(Pixel_y>32) - for(var/a=0, a<=Pixel_y,a+=32) - X.y++ - Pixel_y-=32 - if(Pixel_y<-32) - for(var/a=0, a>=Pixel_y,a-=32) - X.y-- - Pixel_y+=32 - X.pixel_x=Pixel_x - X.pixel_y=Pixel_y - var/turf/TT = get_turf(X.loc) - if(TT == firer.loc) - continue - if(TT.density) - del(X) - break - for(var/atom/O in TT) - if(!O.CanPass(src)) - del(X) - broke = 1 - break - for(var/mob/living/O in TT.contents) - if(istype(O, /mob/living)) - if(O.density) - del(X) - broke = 1 - break - if(broke) - if(X) - del(X) - break - spawn - while(src) //Move until we hit something - if(first) - icon = midicon - if((!( current ) || loc == current)) //If we pass our target - broken = 1 - icon = endicon - tang = adjustAngle(get_angle(original,current)) - if(tang > 180) - tang -= 180 - else - tang += 180 - icon_state = "[tang]" - var/turf/simulated/floor/f = current - if(f && istype(f)) - f.break_tile() - f.hotspot_expose(1000,CELL_VOLUME) - if((x == 1 || x == world.maxx || y == 1 || y == world.maxy)) - //world << "deleting" - //del(src) //Delete if it passes the world edge - broken = 1 - return - if(kill_count < 1) - //world << "deleting" - //del(src) - broken = 1 - kill_count-- - //world << "[x] [y]" - if(!bumped && !isturf(original)) - if(loc == get_turf(original)) - if(!(original in permutated)) - icon = endicon - if(!broken) - tang = adjustAngle(get_angle(original,current)) - if(tang > 180) - tang -= 180 - else - tang += 180 - icon_state = "[tang]" - Bump(original) - first = 0 - if(broken) - //world << "breaking" - break - else - last = get_turf(src.loc) - step_towards(src, current) //Move~ - if(src.loc != current) - tang = adjustAngle(get_angle(src.loc,current)) - icon_state = "[tang]" - del(src) - return - /*cleanup(reference) //Waits .3 seconds then removes the overlay. - //world << "setting invisibility" - sleep(50) - src.invisibility = 101 - return*/ - on_hit(atom/target, blocked = 0) - if(istype(target, /mob/living)) - var/mob/living/M = target - M.playsound_local(src, "explosion", 50, 1) - ..() - -/obj/item/projectile/beam - name = "laser" - icon_state = "laser" - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 40 - damage_type = BURN - hitsound = 'sound/weapons/sear.ogg' - flag = "laser" - eyeblur = 4 - var/frequency = 1 - - process() - var/reference = "\ref[src]" //So we do not have to recalculate it a ton - var/first = 1 //So we don't make the overlay in the same tile as the firer - spawn while(src) //Move until we hit something - - if((!( current ) || loc == current)) //If we pass our target - current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z) - if((x == 1 || x == world.maxx || y == 1 || y == world.maxy)) - del(src) //Delete if it passes the world edge - return - step_towards(src, current) //Move~ - - if(kill_count < 1) - del(src) - return - kill_count-- - - if(!bumped && !isturf(original)) - if(loc == get_turf(original)) - if(!(original in permutated)) - Bump(original) - - if(!first) //Add the overlay as we pass over tiles - var/target_dir = get_dir(src, current) //So we don't call this too much - - //If the icon has not been added yet - if( !("[icon_state][target_dir]" in beam_master) ) - var/image/I = image(icon,icon_state,10,target_dir) //Generate it. - beam_master["[icon_state][target_dir]"] = I //And cache it! - - //Finally add the overlay - src.loc.overlays += beam_master["[icon_state][target_dir]"] - - //Add the turf to a list in the beam master so they can be cleaned up easily. - if(reference in beam_master) - var/list/turf_master = beam_master[reference] - if("[icon_state][target_dir]" in turf_master) - var/list/turfs = turf_master["[icon_state][target_dir]"] - turfs += loc - else - turf_master["[icon_state][target_dir]"] = list(loc) - else - var/list/turfs = list() - turfs["[icon_state][target_dir]"] = list(loc) - beam_master[reference] = turfs - else - first = 0 - cleanup(reference) - return - dumbfire(var/dir) - var/reference = "\ref[src]" //So we do not have to recalculate it a ton - var/first = 1 //So we don't make the overlay in the same tile as the firer - if(!dir) - del(src) - spawn while(src) //Move until we hit something - if((x == 1 || x == world.maxx || y == 1 || y == world.maxy)) - del(src) //Delete if it passes the world edge - return - var/turf/T = get_step(src, dir) - step_towards(src, T) //Move~ - - if(kill_count < 1) - del(src) - kill_count-- - - if(!bumped && !isturf(original)) - if(loc == get_turf(original)) - if(!(original in permutated)) - Bump(original) - - if(!first) //Add the overlay as we pass over tiles - var/target_dir = dir //So we don't call this too much - - //If the icon has not been added yet - if( !("[icon_state][target_dir]" in beam_master) ) - var/image/I = image(icon,icon_state,10,target_dir) //Generate it. - beam_master["[icon_state][target_dir]"] = I //And cache it! - - //Finally add the overlay - src.loc.overlays += beam_master["[icon_state][target_dir]"] - - //Add the turf to a list in the beam master so they can be cleaned up easily. - if(reference in beam_master) - var/list/turf_master = beam_master[reference] - if("[icon_state][target_dir]" in turf_master) - var/list/turfs = turf_master["[icon_state][target_dir]"] - turfs += loc - else - turf_master["[icon_state][target_dir]"] = list(loc) - else - var/list/turfs = list() - turfs["[icon_state][target_dir]"] = list(loc) - beam_master[reference] = turfs - else - first = 0 - cleanup(reference) - return - - proc/cleanup(reference) //Waits .3 seconds then removes the overlay. - src = null // Redundant. - spawn(3) - var/list/turf_master = beam_master[reference] - for(var/laser_state in turf_master) - var/list/turfs = turf_master[laser_state] - for(var/turf/T in turfs) - T.overlays -= beam_master[laser_state] - return - -/obj/item/projectile/beam/practice - name = "laser" - icon_state = "laser" - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 0 - damage_type = BURN - flag = "laser" - eyeblur = 2 - -//Heavy lasers now deal slightly more damage, but have a slower firing rate; overall DPS still identical to lasers. -/obj/item/projectile/beam/heavylaser - name = "heavy laser" - icon_state = "heavylaser" - damage = 50 - -/obj/item/projectile/beam/xray - name = "xray beam" - icon_state = "xray" - damage = 15 - irradiate = 30 - kill_count = 50 - - -/obj/item/projectile/beam/pulse - name = "pulse" - icon_state = "u_laser" - damage = 50 - on_hit(var/atom/target, var/blocked = 0) - if(istype(target,/turf/)||istype(target,/obj/structure/)) - target.ex_act(2) - ..() - - -/obj/item/projectile/beam/deathlaser - name = "death laser" - icon_state = "heavylaser" - damage = 60 - -/obj/item/projectile/beam/emitter - name = "emitter beam" - icon_state = "emitter" - damage = 30 - - -/obj/item/projectile/beam/lastertag/blue - name = "lasertag beam" - icon_state = "bluelaser" - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 0 - damage_type = BURN - flag = "laser" - - on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/M = target - if(istype(M.wear_suit, /obj/item/clothing/suit/redtag)) - M.Weaken(5) - return 1 - -/obj/item/projectile/beam/lastertag/red - name = "lasertag beam" - icon_state = "laser" - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 0 - damage_type = BURN - flag = "laser" - - on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/M = target - if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag)) - M.Weaken(5) - return 1 - -/obj/item/projectile/beam/lastertag/omni//A laser tag bolt that stuns EVERYONE - name = "lasertag beam" - icon_state = "omnilaser" - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 0 - damage_type = BURN - flag = "laser" - - on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/M = target - if((istype(M.wear_suit, /obj/item/clothing/suit/bluetag))||(istype(M.wear_suit, /obj/item/clothing/suit/redtag))) - M.Weaken(5) - return 1 - - -/obj/item/projectile/beam/stun - name = "stun beam" - icon_state = "stun" - nodamage = 1 - damage = 0 - agony = 40 - damage_type = HALLOSS -*/ \ No newline at end of file + ..() \ No newline at end of file diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index e23c8653667..2859edc6a3c 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -27,7 +27,7 @@ /obj/item/projectile/bullet/weakbullet3 damage = 20 - + /obj/item/projectile/bullet/toxinbullet damage = 15 @@ -67,6 +67,9 @@ /obj/item/projectile/bullet/heavybullet damage = 35 +/obj/item/projectile/bullet/rpellet + damage = 3 + stamina = 25 /obj/item/projectile/bullet/stunshot//taser slugs for shotguns, nothing special name = "stunshot" @@ -116,7 +119,7 @@ /obj/item/projectile/bullet/incendiary/shell/Move() ..() var/turf/location = get_turf(src) - PoolOrNew(/obj/effect/hotspot, location) + new /obj/effect/hotspot(location) location.hotspot_expose(700, 50, 1) /obj/item/projectile/bullet/incendiary/shell/dragonsbreath diff --git a/code/modules/projectiles/targeting.dm b/code/modules/projectiles/targeting.dm index 5b4811a0486..3ef440f6f2e 100644 --- a/code/modules/projectiles/targeting.dm +++ b/code/modules/projectiles/targeting.dm @@ -288,7 +288,7 @@ client/verb/ToggleGunMode() else usr << "Target may no longer move." target_can_run = 0 - del(usr.gun_run_icon) //no need for icon for running permission + qdel(usr.gun_run_icon) //no need for icon for running permission //Updating walking permission button if(usr.gun_move_icon) diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 333dfc97114..f98c01072f6 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -602,12 +602,11 @@ atom/proc/create_reagents(var/max_vol) reagents.my_atom = src /datum/reagents/Destroy() - ..() + . = ..() processing_objects.Remove(src) for(var/datum/reagent/R in reagent_list) qdel(R) reagent_list.Cut() reagent_list = null if(my_atom && my_atom.reagents == src) - my_atom.reagents = null - return QDEL_HINT_QUEUE \ No newline at end of file + my_atom.reagents = null \ No newline at end of file diff --git a/code/modules/reagents/newchem/drugs.dm b/code/modules/reagents/newchem/drugs.dm index f858cc41797..f700ec2aa16 100644 --- a/code/modules/reagents/newchem/drugs.dm +++ b/code/modules/reagents/newchem/drugs.dm @@ -95,7 +95,7 @@ /datum/chemical_reaction/crank/on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/T = get_turf(holder.my_atom) for(var/turf/turf in range(1,T)) - PoolOrNew(/obj/effect/hotspot, turf) + new /obj/effect/hotspot(turf) explosion(T,0,0,2) return diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index e20a8d1c491..9905345926b 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -513,16 +513,25 @@ datum/reagent/morphine/addiction_act_stage4(var/mob/living/M as mob) datum/reagent/oculine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M.eye_blurry = max(M.eye_blurry-5 , 0) - M.eye_blind = max(M.eye_blind-5 , 0) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] - if(istype(E)) - if(E.damage > 0) - E.damage -= 1 + if(prob(80)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] + if(istype(E)) + E.damage = max(E.damage-1, 0) + M.eye_blurry = max(M.eye_blurry-1 , 0) + M.ear_damage = max(M.ear_damage-1, 0) + if(prob(50)) + M.disabilities &= ~NEARSIGHTED + if(prob(30)) + M.sdisabilities &= ~BLIND + M.eye_blind = 0 + if(M.ear_damage <= 25) + if(prob(30)) + M.ear_deaf = 0 ..() return + /datum/chemical_reaction/oculine name = "Oculine" id = "oculine" diff --git a/code/modules/reagents/newchem/other.dm b/code/modules/reagents/newchem/other.dm index 6b63bb397f2..7e1e9899993 100644 --- a/code/modules/reagents/newchem/other.dm +++ b/code/modules/reagents/newchem/other.dm @@ -290,7 +290,7 @@ datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob) M << "Something isn't right!" M.adjustBruteLoss(1) if(2) - M.emote("me",1,"strains, but nothing happens.") + M.custom_emote(1,"strains, but nothing happens.") M.adjustBruteLoss(2) if(3) M.emote("scream") diff --git a/code/modules/reagents/newchem/pyro.dm b/code/modules/reagents/newchem/pyro.dm index 9a978acc26f..a85060132ae 100644 --- a/code/modules/reagents/newchem/pyro.dm +++ b/code/modules/reagents/newchem/pyro.dm @@ -46,7 +46,7 @@ /datum/chemical_reaction/clf3/on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/T = get_turf(holder.my_atom) for(var/turf/turf in range(1,T)) - PoolOrNew(/obj/effect/hotspot, turf) + new /obj/effect/hotspot(turf) return /datum/reagent/clf3/reaction_turf(var/turf/simulated/T, var/volume) @@ -59,13 +59,13 @@ if(prob(volume/10)) F.make_plating() if(istype(F, /turf/simulated/floor/)) - PoolOrNew(/obj/effect/hotspot, F) + new /obj/effect/hotspot(F) if(istype(T, /turf/simulated/wall/)) var/turf/simulated/wall/W = T if(prob(volume/10)) W.ChangeTurf(/turf/simulated/floor) if(istype(T, /turf/simulated/shuttle/)) - PoolOrNew(/obj/effect/hotspot, T) + new /obj/effect/hotspot(T) return /datum/reagent/clf3/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) @@ -429,7 +429,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit return var/turf/simulated/T = get_turf(holder.my_atom) for(var/turf/simulated/turf in range(created_volume/10,T)) - PoolOrNew(/obj/effect/hotspot, turf) + new /obj/effect/hotspot(turf) return /datum/reagent/phlogiston/on_mob_life(var/mob/living/M as mob) diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm index 02e1f4a65cd..809a8dfd34d 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm @@ -30,13 +30,6 @@ result_amount = 2 mix_message = "The solvent extracts an antibiotic compound from the fungus." - audioline - name = "Audioline" - id = "audioline" - result = "audioline" - required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1) - result_amount = 3 - rezadone name = "Rezadone" id = "rezadone" diff --git a/code/modules/reagents/oldchem/reagents/_reagent_base.dm b/code/modules/reagents/oldchem/reagents/_reagent_base.dm index d2ca7ff569e..0dcf2e98c30 100644 --- a/code/modules/reagents/oldchem/reagents/_reagent_base.dm +++ b/code/modules/reagents/oldchem/reagents/_reagent_base.dm @@ -76,6 +76,5 @@ return /datum/reagent/Destroy() - ..() - holder = null - return QDEL_HINT_QUEUE \ No newline at end of file + . = ..() + holder = null \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm index 696fa6354a5..a9f2d48bb19 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_med.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm @@ -61,20 +61,6 @@ ..() return -/datum/reagent/audioline - name = "Audioline" - id = "audioline" - description = "Heals ear damage." - reagent_state = LIQUID - color = "#6600FF" // rgb: 100, 165, 255 - -/datum/reagent/audioline/on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.ear_damage = 0 - M.ear_deaf = 0 - ..() - return - /datum/reagent/mitocholide name = "Mitocholide" id = "mitocholide" @@ -91,7 +77,7 @@ for(var/name in H.internal_organs_by_name) var/obj/item/organ/I = H.internal_organs_by_name[name] if(I.damage > 0) - I.damage -= 0.20 + I.damage = max(I.damage-0.4, 0) ..() return diff --git a/code/modules/reagents/reagent_containers/drugs.dm b/code/modules/reagents/reagent_containers/drugs.dm index 1829058b294..53d9310f6cc 100644 --- a/code/modules/reagents/reagent_containers/drugs.dm +++ b/code/modules/reagents/reagent_containers/drugs.dm @@ -18,15 +18,6 @@ src.pixel_y = rand(-10.0, 10) base_name = name - - examine(mob/user) - if(..(user, 2)) - user << "\blue It contains:" - if(reagents && reagents.reagent_list.len) - user << "\blue [src.reagents.total_volume] units of powder." - else - user << "\blue Nothing." - afterattack(obj/target, mob/user, proximity) if(!proximity) return diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 9e2bca5edcb..5d4c986539a 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -156,7 +156,7 @@ else if (reagents.total_volume<=src.volume/4) user << "\blue \The [src] is almost empty!" else if (reagents.total_volume<=src.volume*0.66) - user << "\blue \The [src] is half full!" + user << "\blue \The [src] is half empty!" // Pessimism is the real order of the day. else if (reagents.total_volume<=src.volume*0.90) user << "\blue \The [src] is almost full!" else diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm index 0cf90626ccc..aa304ca9bdc 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm @@ -18,7 +18,7 @@ var/obj/item/weapon/broken_bottle/B = new /obj/item/weapon/broken_bottle(user.loc) user.put_in_active_hand(B) if(prob(33)) - PoolOrNew(/obj/item/weapon/shard, target.loc) // Create a glass shard at the target's location! + new /obj/item/weapon/shard(target.loc) // Create a glass shard at the target's location! B.icon_state = src.icon_state var/icon/I = new('icons/obj/drinks.dmi', src.icon_state) diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm index 74d939bb49a..caab1e519c1 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm @@ -12,7 +12,7 @@ proc/smash(mob/living/target as mob, mob/living/user as mob) //Creates a shattering noise and replaces the drinking glass with a glass shard user.drop_item() - var/obj/item/weapon/shard/S = PoolOrNew(/obj/item/weapon/shard, user.loc) + var/obj/item/weapon/shard/S = new /obj/item/weapon/shard(user.loc) user.put_in_active_hand(S) playsound(src, "shatter", 70, 1) diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm index 7b9833e78fd..943c5022dc4 100644 --- a/code/modules/reagents/reagent_containers/food/sandwich.dm +++ b/code/modules/reagents/reagent_containers/food/sandwich.dm @@ -5,7 +5,7 @@ if(istype(W,/obj/item/weapon/shard) || istype(W,/obj/item/weapon/reagent_containers/food/snacks)) var/obj/item/weapon/reagent_containers/food/snacks/csandwich/S = new(get_turf(src)) S.attackby(W,user, params) - del(src) + qdel(src) ..() /obj/item/weapon/reagent_containers/food/snacks/csandwich @@ -77,7 +77,7 @@ /obj/item/weapon/reagent_containers/food/snacks/csandwich/Destroy() for(var/obj/item/O in ingredients) - del(O) + qdel(O) return ..() /obj/item/weapon/reagent_containers/food/snacks/csandwich/examine(mob/user) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 6f12c03c6a8..33946f4c4b8 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -551,9 +551,10 @@ throw_impact(atom/hit_atom) ..() - new/obj/effect/decal/cleanable/egg_smudge(src.loc) - src.reagents.reaction(hit_atom, TOUCH) - src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.") + var/turf/T = get_turf(hit_atom) + new/obj/effect/decal/cleanable/egg_smudge(T) + if(reagents) + reagents.reaction(hit_atom, TOUCH) qdel(src) attackby(obj/item/weapon/W as obj, mob/user as mob, params) @@ -1652,82 +1653,40 @@ icon_state = "monkeycube" bitesize = 12 filling_color = "#ADAC7F" - var/monkey_type = "Monkey" /obj/item/weapon/reagent_containers/food/snacks/monkeycube/New() ..() reagents.add_reagent("protein",10) -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O as obj, mob/user as mob, proximity) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user, proximity) if(!proximity) return if(istype(O,/obj/structure/sink) && !wrapped) - user << "You place [name] under a stream of water..." - if(loc == user) - user.unEquip(src) - forceMove(get_turf(src)) + user << "You place [src] under a stream of water..." + user.drop_item() + forceMove(get_turf(O)) return Expand() ..() -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user as mob) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user) if(wrapped) Unwrap(user) -/* -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/On_Consume(var/mob/M) - M << "Something inside of you suddently expands!" - - - if (istype(M, /mob/living/carbon/human)) - //Do not try to understand. - var/obj/item/weapon/surprise = new/obj/item/weapon(M) - var/mob/living/carbon/monkey/ook = new monkey_type(null) //no other way to get access to the vars, alas - surprise.icon = ook.icon - surprise.icon_state = ook.icon_state - surprise.name = "malformed [ook.name]" - surprise.desc = "Looks like \a very deformed [ook.name], a little small for its kind. It shows no signs of life." - del(ook) //rip nullspace monkey - surprise.transform *= 0.6 - surprise.add_blood(M) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/E = H.get_organ("chest") - E.fracture() - for (var/obj/item/organ/I in E.internal_organs) - I.take_damage(rand(I.min_bruised_damage, I.min_broken_damage+1)) - - if (!E.hidden && prob(60)) //set it snuggly - E.hidden = surprise - E.cavity = 0 - else //someone is having a bad day - E.createwound(CUT, 30) - E.embed(surprise) - else if (issmall(M)) - M.visible_message("[M] suddenly tears in half!") - var/mob/living/carbon/monkey/ook = new monkey_type(M.loc) - ook.name = "malformed [ook.name]" - ook.transform *= 0.6 - ook.add_blood(M) - M.gib() - ..() -*/ - /obj/item/weapon/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature) if(volume >= 5) return Expand() /obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand() - for(var/mob/M in viewers(src,7)) - M << "\red \The [src] expands!" - var/mob/living/carbon/human/H = new (src) + visible_message("[src] expands!") + var/mob/living/carbon/human/H = new (get_turf(src)) H.set_species(monkey_type) qdel(src) -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user as mob) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user) icon_state = "monkeycube" desc = "Just add water!" - user << "You unwrap the cube." + user << "You unwrap the cube." wrapped = 0 - return /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped desc = "Still wrapped in some paper." @@ -1737,22 +1696,23 @@ /obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube name = "farwa cube" monkey_type = "Farwa" + /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube name = "farwa cube" monkey_type = "Farwa" - /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wolpincube name = "wolpin cube" monkey_type = "Wolpin" + /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/wolpincube name = "wolpin cube" monkey_type = "Wolpin" - /obj/item/weapon/reagent_containers/food/snacks/monkeycube/stokcube name = "stok cube" monkey_type = "Stok" + /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube name = "stok cube" monkey_type = "Stok" diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index ac20303584d..1245bfe4e01 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -49,11 +49,6 @@ examine(mob/user) if(!..(user, 2)) return - user << "\blue It contains:" - if(reagents && reagents.reagent_list.len) - user << "\blue [src.reagents.total_volume] units of liquid." - else - user << "\blue Nothing." if (!is_open_container()) user << "\blue Airtight lid seals it completely." diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index d736b89ce4c..c4ba69dc71a 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -124,21 +124,7 @@ // attack with hand, move pulled object onto conveyor /obj/machinery/conveyor/attack_hand(mob/user as mob) - if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) - return - if (user.pulling.anchored) - return - if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) - return - if (ismob(user.pulling)) - var/mob/M = user.pulling - M.stop_pulling() - step(user.pulling, get_dir(user.pulling.loc, src)) - user.stop_pulling() - else - step(user.pulling, get_dir(user.pulling.loc, src)) - user.stop_pulling() - return + user.Move_Pulled(src) // make the conveyor broken diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 9e4b3661c0d..10fb01573d5 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -18,244 +18,244 @@ var/base_state = "pipe-s" // update iconstate and dpdir due to dir and type - proc/update() - var/flip = turn(dir, 180) - var/left = turn(dir, 90) - var/right = turn(dir, -90) +/obj/structure/disposalconstruct/proc/update() + var/flip = turn(dir, 180) + var/left = turn(dir, 90) + var/right = turn(dir, -90) - switch(ptype) - if(0) - base_state = "pipe-s" - dpdir = dir | flip - if(1) - base_state = "pipe-c" - dpdir = dir | right - if(2) - base_state = "pipe-j1" - dpdir = dir | right | flip - if(3) - base_state = "pipe-j2" - dpdir = dir | left | flip - if(4) - base_state = "pipe-y" - dpdir = dir | left | right - if(5) - base_state = "pipe-t" - dpdir = dir - // disposal bin has only one dir, thus we don't need to care about setting it - if(6) - if(anchored) - base_state = "disposal" - else - base_state = "condisposal" + switch(ptype) + if(0) + base_state = "pipe-s" + dpdir = dir | flip + if(1) + base_state = "pipe-c" + dpdir = dir | right + if(2) + base_state = "pipe-j1" + dpdir = dir | right | flip + if(3) + base_state = "pipe-j2" + dpdir = dir | left | flip + if(4) + base_state = "pipe-y" + dpdir = dir | left | right + if(5) + base_state = "pipe-t" + dpdir = dir + // disposal bin has only one dir, thus we don't need to care about setting it + if(6) + if(anchored) + base_state = "disposal" + else + base_state = "condisposal" - if(7) - base_state = "outlet" - dpdir = dir + if(7) + base_state = "outlet" + dpdir = dir - if(8) - base_state = "intake" - dpdir = dir + if(8) + base_state = "intake" + dpdir = dir - if(9) - base_state = "pipe-j1s" - dpdir = dir | right | flip + if(9) + base_state = "pipe-j1s" + dpdir = dir | right | flip - if(10) - base_state = "pipe-j2s" - dpdir = dir | left | flip + if(10) + base_state = "pipe-j2s" + dpdir = dir | left | flip - if(ptype<6 || ptype>8) - icon_state = "con[base_state]" - else - icon_state = base_state + if(ptype<6 || ptype>8) + icon_state = "con[base_state]" + else + icon_state = base_state - if(invisibility) // if invisible, fade icon - icon -= rgb(0,0,0,128) + if(invisibility) // if invisible, fade icon + icon -= rgb(0,0,0,128) - // hide called by levelupdate if turf intact status changes - // change visibility status and force update of icon - hide(var/intact) - invisibility = (intact && level==1) ? 101: 0 // hide if floor is intact - update() +// hide called by levelupdate if turf intact status changes +// change visibility status and force update of icon +/obj/structure/disposalconstruct/hide(var/intact) + invisibility = (intact && level==1) ? 101: 0 // hide if floor is intact + update() - // flip and rotate verbs - verb/rotate() - set name = "Rotate Pipe" - set src in view(1) +// flip and rotate verbs +/obj/structure/disposalconstruct/verb/rotate() + set name = "Rotate Pipe" + set src in view(1) - if(usr.stat) - return - - if(anchored) - usr << "You must unfasten the pipe before rotating it." - return - - dir = turn(dir, -90) - update() - - verb/flip() - set name = "Flip Pipe" - set src in view(1) - if(usr.stat) - return - - if(anchored) - usr << "You must unfasten the pipe before flipping it." - return - - dir = turn(dir, 180) - switch(ptype) - if(2) - ptype = 3 - if(3) - ptype = 2 - if(9) - ptype = 10 - if(10) - ptype = 9 - - update() - - // returns the type path of disposalpipe corresponding to this item dtype - proc/dpipetype() - switch(ptype) - if(0,1) - return /obj/structure/disposalpipe/segment - if(2,3,4) - return /obj/structure/disposalpipe/junction - if(5) - return /obj/structure/disposalpipe/trunk - if(6) - return /obj/machinery/disposal - if(7) - return /obj/structure/disposaloutlet - if(8) - return /obj/machinery/disposal/deliveryChute - if(9,10) - return /obj/structure/disposalpipe/sortjunction + if(usr.stat) return + if(anchored) + usr << "You must unfasten the pipe before rotating it." + return + + dir = turn(dir, -90) + update() + +/obj/structure/disposalconstruct/verb/flip() + set name = "Flip Pipe" + set src in view(1) + if(usr.stat) + return + + if(anchored) + usr << "You must unfasten the pipe before flipping it." + return + + dir = turn(dir, 180) + switch(ptype) + if(2) + ptype = 3 + if(3) + ptype = 2 + if(9) + ptype = 10 + if(10) + ptype = 9 + + update() + +// returns the type path of disposalpipe corresponding to this item dtype +/obj/structure/disposalconstruct/proc/dpipetype() + switch(ptype) + if(0,1) + return /obj/structure/disposalpipe/segment + if(2,3,4) + return /obj/structure/disposalpipe/junction + if(5) + return /obj/structure/disposalpipe/trunk + if(6) + return /obj/machinery/disposal + if(7) + return /obj/structure/disposaloutlet + if(8) + return /obj/machinery/disposal/deliveryChute + if(9,10) + return /obj/structure/disposalpipe/sortjunction + return - // attackby item - // wrench: (un)anchor - // weldingtool: convert to real pipe - attackby(var/obj/item/I, var/mob/user, params) - var/nicetype = "pipe" - var/ispipe = 0 // Indicates if we should change the level of this pipe - src.add_fingerprint(user) - switch(ptype) - if(6) - nicetype = "disposal bin" - if(7) - nicetype = "disposal outlet" - if(8) - nicetype = "delivery chute" - if(9, 10) - nicetype = "sorting pipe" - ispipe = 1 - else - nicetype = "pipe" - ispipe = 1 +// attackby item +// wrench: (un)anchor +// weldingtool: convert to real pipe - var/turf/T = src.loc - if(T.intact) - user << "You can only attach the [nicetype] if the floor plating is removed." - return +/obj/structure/disposalconstruct/attackby(var/obj/item/I, var/mob/user, params) + var/nicetype = "pipe" + var/ispipe = 0 // Indicates if we should change the level of this pipe + src.add_fingerprint(user) + switch(ptype) + if(6) + nicetype = "disposal bin" + if(7) + nicetype = "disposal outlet" + if(8) + nicetype = "delivery chute" + if(9, 10) + nicetype = "sorting pipe" + ispipe = 1 + else + nicetype = "pipe" + ispipe = 1 - var/obj/structure/disposalpipe/CP = locate() in T - if(ptype>=6 && ptype <= 8) // Disposal or outlet - if(CP) // There's something there - if(!istype(CP,/obj/structure/disposalpipe/trunk)) - user << "The [nicetype] requires a trunk underneath it in order to work." - return - else // Nothing under, fuck. + var/turf/T = src.loc + if(T.intact) + user << "You can only attach the [nicetype] if the floor plating is removed." + return + + var/obj/structure/disposalpipe/CP = locate() in T + if(ptype>=6 && ptype <= 8) // Disposal or outlet + if(CP) // There's something there + if(!istype(CP,/obj/structure/disposalpipe/trunk)) user << "The [nicetype] requires a trunk underneath it in order to work." return - else - if(CP) - update() - var/pdir = CP.dpdir - if(istype(CP, /obj/structure/disposalpipe/broken)) - pdir = CP.dir - if(pdir & dpdir) - user << "There is already a [nicetype] at that location." - return - - - if(istype(I, /obj/item/weapon/wrench)) - if(anchored) - anchored = 0 - if(ispipe) - level = 2 - density = 0 - else - density = 1 - user << "You detach the [nicetype] from the underfloor." - else - anchored = 1 - if(ispipe) - level = 1 // We don't want disposal bins to disappear under the floors - density = 0 - else - density = 1 // We don't want disposal bins or outlets to go density 0 - user << "You attach the [nicetype] to the underfloor." - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + else // Nothing under, fuck. + user << "The [nicetype] requires a trunk underneath it in order to work." + return + else + if(CP) update() + var/pdir = CP.dpdir + if(istype(CP, /obj/structure/disposalpipe/broken)) + pdir = CP.dir + if(pdir & dpdir) + user << "There is already a [nicetype] at that location." + return - else if(istype(I, /obj/item/weapon/weldingtool)) - if(anchored) - var/obj/item/weapon/weldingtool/W = I - if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - user << "Welding the [nicetype] in place." - if(do_after(user, 20, target = src)) - if(!src || !W.isOn()) return - user << "The [nicetype] has been welded in place!" - update() // TODO: Make this neat - if(ispipe) // Pipe - var/pipetype = dpipetype() - var/obj/structure/disposalpipe/P = new pipetype(src.loc) - src.transfer_fingerprints_to(P) - P.base_icon_state = base_state - P.dir = dir - P.dpdir = dpdir - P.updateicon() + if(istype(I, /obj/item/weapon/wrench)) + if(anchored) + anchored = 0 + if(ispipe) + level = 2 + density = 0 + else + density = 1 + user << "You detach the [nicetype] from the underfloor." + else + anchored = 1 + if(ispipe) + level = 1 // We don't want disposal bins to disappear under the floors + density = 0 + else + density = 1 // We don't want disposal bins or outlets to go density 0 + user << "You attach the [nicetype] to the underfloor." + playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + update() - //Needs some special treatment ;) - if(ptype==9 || ptype==10) - var/obj/structure/disposalpipe/sortjunction/SortP = P - SortP.updatedir() + else if(istype(I, /obj/item/weapon/weldingtool)) + if(anchored) + var/obj/item/weapon/weldingtool/W = I + if(W.remove_fuel(0,user)) + playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + user << "Welding the [nicetype] in place." + if(do_after(user, 20, target = src)) + if(!src || !W.isOn()) return + user << "The [nicetype] has been welded in place!" + update() // TODO: Make this neat + if(ispipe) // Pipe - else if(ptype==6) // Disposal bin - var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc) - src.transfer_fingerprints_to(P) - P.mode = 0 // start with pump off + var/pipetype = dpipetype() + var/obj/structure/disposalpipe/P = new pipetype(src.loc) + src.transfer_fingerprints_to(P) + P.base_icon_state = base_state + P.dir = dir + P.dpdir = dpdir + P.update_icon() - else if(ptype==7) // Disposal outlet + //Needs some special treatment ;) + if(ptype==9 || ptype==10) + var/obj/structure/disposalpipe/sortjunction/SortP = P + SortP.updatedir() - var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc) - src.transfer_fingerprints_to(P) - P.dir = dir - var/obj/structure/disposalpipe/trunk/Trunk = CP - Trunk.linked = P + else if(ptype==6) // Disposal bin + var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc) + src.transfer_fingerprints_to(P) + P.mode = 0 // start with pump off - else if(ptype==8) // Disposal outlet + else if(ptype==7) // Disposal outlet - var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc) - src.transfer_fingerprints_to(P) - P.dir = dir + var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc) + src.transfer_fingerprints_to(P) + P.dir = dir + var/obj/structure/disposalpipe/trunk/Trunk = CP + Trunk.linked = P - qdel(src) - return - else - user << "You need more welding fuel to complete this task." + else if(ptype==8) // Disposal outlet + + var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc) + src.transfer_fingerprints_to(P) + P.dir = dir + + qdel(src) return else - user << "You need to attach it to the plating first!" + user << "You need more welding fuel to complete this task." return + else + user << "You need to attach it to the plating first!" + return diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 91cdc759161..ce5ca78ebe0 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -29,18 +29,21 @@ // find the attached trunk (if present) and init gas resvr. /obj/machinery/disposal/New() ..() - spawn(5) - trunk = locate() in src.loc - if(!trunk) - mode = 0 - flush = 0 - else - trunk.linked = src // link the pipe trunk to self + trunk_check() - air_contents = new/datum/gas_mixture() - //gas.volume = 1.05 * CELLSTANDARD - update() + air_contents = new/datum/gas_mixture() + //gas.volume = 1.05 * CELLSTANDARD + update() +/obj/machinery/disposal/proc/trunk_check() + trunk = locate() in src.loc + if(!trunk) + mode = 0 + flush = 0 + else + mode = initial(mode) + flush = initial(flush) + trunk.linked = src // link the pipe trunk to self /obj/machinery/disposal/Destroy() eject() @@ -48,6 +51,15 @@ trunk.linked = null return ..() +/obj/machinery/disposal/initialize() + // this will get a copy of the air turf and take a SEND PRESSURE amount of air from it + var/atom/L = loc + var/datum/gas_mixture/env = new + env.copy_from(L.return_air()) + var/datum/gas_mixture/removed = env.remove(SEND_PRESSURE + 1) + air_contents.merge(removed) + trunk_check() + // attack by item places it in to disposal /obj/machinery/disposal/attackby(var/obj/item/I, var/mob/user, params) if(stat & BROKEN || !I || !user || ((I.flags & NODROP) && !istype(I, /obj/item/weapon/storage/bag/trash/cyborg))) @@ -652,267 +664,266 @@ var/base_icon_state // initial icon state on map // new pipe, set the icon_state as on map - New() - ..() - base_icon_state = icon_state - return +/obj/structure/disposalpipe/New() + ..() + base_icon_state = icon_state - // pipe is deleted - // ensure if holder is present, it is expelled - Destroy() - var/obj/structure/disposalholder/H = locate() in src - if(H) - // holder was present - H.active = 0 - var/turf/T = src.loc - if(T.density) - // deleting pipe is inside a dense turf (wall) - // this is unlikely, but just dump out everything into the turf in case - - for(var/atom/movable/AM in H) - AM.loc = T - AM.pipe_eject(0) - qdel(H) - ..() - return - - // otherwise, do normal expel from turf - if(H) - expel(H, T, 0) - return ..() - - singularity_pull(S, current_size) - if(current_size >= STAGE_FIVE) - qdel(src) - - // returns the direction of the next pipe object, given the entrance dir - // by default, returns the bitmask of remaining directions - proc/nextdir(var/fromdir) - return dpdir & (~turn(fromdir, 180)) - - // transfer the holder through this pipe segment - // overriden for special behaviour - // - proc/transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir) - H.dir = nextdir - var/turf/T = H.nextloc() - var/obj/structure/disposalpipe/P = H.findpipe(T) - - if(P) - // find other holder in next loc, if inactive merge it with current - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) - - H.loc = P - else // if wasn't a pipe, then set loc to turf - H.loc = T - return null - - return P - - - // update the icon_state to reflect hidden status - proc/update() +// pipe is deleted +// ensure if holder is present, it is expelled +/obj/structure/disposalpipe/Destroy() + var/obj/structure/disposalholder/H = locate() in src + if(H) + // holder was present + H.active = 0 var/turf/T = src.loc - hide(T.intact && !istype(T,/turf/space)) // space never hides pipes + if(T.density) + // deleting pipe is inside a dense turf (wall) + // this is unlikely, but just dump out everything into the turf in case - // hide called by levelupdate if turf intact status changes - // change visibility status and force update of icon - hide(var/intact) - invisibility = intact ? 101: 0 // hide if floor is intact - updateicon() - - // update actual icon_state depending on visibility - // if invisible, append "f" to icon_state to show faded version - // this will be revealed if a T-scanner is used - // if visible, use regular icon_state - proc/updateicon() - /*if(invisibility) - icon_state = "[base_icon_state]f" - else - icon_state = base_icon_state*/ - return - - - // expel the held objects into a turf - // called when there is a break in the pipe - // - - proc/expel(var/obj/structure/disposalholder/H, var/turf/T, var/direction) - - if(!T) + for(var/atom/movable/AM in H) + AM.loc = T + AM.pipe_eject(0) + qdel(H) + ..() return - var/turf/target - - if(T.density) // dense ouput turf, so stop holder - H.active = 0 - H.loc = src - return - if(T.intact && istype(T,/turf/simulated/floor)) //intact floor, pop the tile - var/turf/simulated/floor/F = T - //F.health = 100 - F.burnt = 1 - F.intact = 0 - F.levelupdate() - new /obj/item/stack/tile(H) // add to holder so it will be thrown with other stuff - F.icon_state = "Floor[F.burnt ? "1" : ""]" - - if(direction) // direction is specified - if(istype(T, /turf/space)) // if ended in space, then range is unlimited - target = get_edge_target_turf(T, direction) - else // otherwise limit to 10 tiles - target = get_ranged_target_turf(T, direction, 10) - - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - if(H) - for(var/atom/movable/AM in H) - AM.loc = T - AM.pipe_eject(direction) - spawn(1) - if(AM) - AM.throw_at(target, 100, 1) - H.vent_gas(T) - qdel(H) - - else // no specified direction, so throw in random direction - - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - if(H) - for(var/atom/movable/AM in H) - target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5)) - - AM.loc = T - AM.pipe_eject(0) - spawn(1) - if(AM) - AM.throw_at(target, 5, 1) - - H.vent_gas(T) // all gas vent to turf - qdel(H) - - return - - // call to break the pipe - // will expel any holder inside at the time - // then delete the pipe - // remains : set to leave broken pipe pieces in place - proc/broken(var/remains = 0) - if(remains) - for(var/D in cardinal) - if(D & dpdir) - var/obj/structure/disposalpipe/broken/P = new(src.loc) - P.dir = D - - src.invisibility = 101 // make invisible (since we won't delete the pipe immediately) - var/obj/structure/disposalholder/H = locate() in src + // otherwise, do normal expel from turf if(H) - // holder was present - H.active = 0 - var/turf/T = src.loc - if(T.density) - // broken pipe is inside a dense turf (wall) - // this is unlikely, but just dump out everything into the turf in case - - for(var/atom/movable/AM in H) - AM.loc = T - AM.pipe_eject(0) - qdel(H) - return - - // otherwise, do normal expel from turf - if(H) - expel(H, T, 0) - - spawn(2) // delete pipe after 2 ticks to ensure expel proc finished - qdel(src) - - - // pipe affected by explosion - ex_act(severity) - - switch(severity) - if(1.0) - broken(0) - return - if(2.0) - health -= rand(5,15) - healthcheck() - return - if(3.0) - health -= rand(0,15) - healthcheck() - return - - - // test health for brokenness - proc/healthcheck() - if(health < -2) - broken(0) - else if(health<1) - broken(1) - return - - //attack by item - //weldingtool: unfasten and convert to obj/disposalconstruct - - attackby(var/obj/item/I, var/mob/user, params) - - var/turf/T = src.loc - if(T.intact) - return // prevent interaction with T-scanner revealed pipes - src.add_fingerprint(user) - if(istype(I, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = I - - if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - // check if anything changed over 2 seconds - var/turf/uloc = user.loc - var/atom/wloc = W.loc - user << "Slicing the disposal pipe." - sleep(30) - if(!W.isOn()) return - if(user.loc == uloc && wloc == W.loc) - welded() - else - user << "You must stay still while welding the pipe." - else - user << "You need more welding fuel to cut the pipe." - return - - // called when pipe is cut with welder - proc/welded() - - var/obj/structure/disposalconstruct/C = new (src.loc) - switch(base_icon_state) - if("pipe-s") - C.ptype = 0 - if("pipe-c") - C.ptype = 1 - if("pipe-j1") - C.ptype = 2 - if("pipe-j2") - C.ptype = 3 - if("pipe-y") - C.ptype = 4 - if("pipe-t") - C.ptype = 5 - if("pipe-j1s") - C.ptype = 9 - if("pipe-j2s") - C.ptype = 10 - src.transfer_fingerprints_to(C) - C.dir = dir - C.density = 0 - C.anchored = 1 - C.update() + expel(H, T, 0) + return ..() +/obj/structure/disposalpipe/singularity_pull(S, current_size) + if(current_size >= STAGE_FIVE) qdel(src) +// returns the direction of the next pipe object, given the entrance dir +// by default, returns the bitmask of remaining directions +/obj/structure/disposalpipe/proc/nextdir(var/fromdir) + return dpdir & (~turn(fromdir, 180)) + +// transfer the holder through this pipe segment +// overriden for special behaviour +// +/obj/structure/disposalpipe/proc/transfer(var/obj/structure/disposalholder/H) + var/nextdir = nextdir(H.dir) + H.dir = nextdir + var/turf/T = H.nextloc() + var/obj/structure/disposalpipe/P = H.findpipe(T) + + if(P) + // find other holder in next loc, if inactive merge it with current + var/obj/structure/disposalholder/H2 = locate() in P + if(H2 && !H2.active) + H.merge(H2) + + H.loc = P + else // if wasn't a pipe, then set loc to turf + H.loc = T + return null + + return P + + +// update the icon_state to reflect hidden status +/obj/structure/disposalpipe/proc/update() + var/turf/T = src.loc + hide(T.intact && !istype(T,/turf/space)) // space never hides pipes + update_icon() + +// hide called by levelupdate if turf intact status changes +// change visibility status and force update of icon +/obj/structure/disposalpipe/hide(var/intact) + invisibility = intact ? 101: 0 // hide if floor is intact + update_icon() + +// update actual icon_state depending on visibility +// if invisible, append "f" to icon_state to show faded version +// this will be revealed if a T-scanner is used +// if visible, use regular icon_state +/obj/structure/disposalpipe/update_icon() + if(invisibility) + icon_state = "[base_icon_state]f" + else + icon_state = base_icon_state + + +// expel the held objects into a turf +// called when there is a break in the pipe +// + +/obj/structure/disposalpipe/proc/expel(var/obj/structure/disposalholder/H, var/turf/T, var/direction) + + if(!T) + return + + var/turf/target + + if(T.density) // dense ouput turf, so stop holder + H.active = 0 + H.loc = src + return + if(T.intact && istype(T,/turf/simulated/floor)) //intact floor, pop the tile + var/turf/simulated/floor/F = T + //F.health = 100 + F.burnt = 1 + F.intact = 0 + F.levelupdate() + new /obj/item/stack/tile(H) // add to holder so it will be thrown with other stuff + F.icon_state = "Floor[F.burnt ? "1" : ""]" + + if(direction) // direction is specified + if(istype(T, /turf/space)) // if ended in space, then range is unlimited + target = get_edge_target_turf(T, direction) + else // otherwise limit to 10 tiles + target = get_ranged_target_turf(T, direction, 10) + + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + if(H) + for(var/atom/movable/AM in H) + AM.loc = T + AM.pipe_eject(direction) + spawn(1) + if(AM) + AM.throw_at(target, 100, 1) + H.vent_gas(T) + qdel(H) + + else // no specified direction, so throw in random direction + + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + if(H) + for(var/atom/movable/AM in H) + target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5)) + + AM.loc = T + AM.pipe_eject(0) + spawn(1) + if(AM) + AM.throw_at(target, 5, 1) + + H.vent_gas(T) // all gas vent to turf + qdel(H) + + return + +// call to break the pipe +// will expel any holder inside at the time +// then delete the pipe +// remains : set to leave broken pipe pieces in place +/obj/structure/disposalpipe/proc/broken(var/remains = 0) + if(remains) + for(var/D in cardinal) + if(D & dpdir) + var/obj/structure/disposalpipe/broken/P = new(src.loc) + P.dir = D + + src.invisibility = 101 // make invisible (since we won't delete the pipe immediately) + var/obj/structure/disposalholder/H = locate() in src + if(H) + // holder was present + H.active = 0 + var/turf/T = src.loc + if(T.density) + // broken pipe is inside a dense turf (wall) + // this is unlikely, but just dump out everything into the turf in case + + for(var/atom/movable/AM in H) + AM.loc = T + AM.pipe_eject(0) + qdel(H) + return + + // otherwise, do normal expel from turf + if(H) + expel(H, T, 0) + + spawn(2) // delete pipe after 2 ticks to ensure expel proc finished + qdel(src) + + +// pipe affected by explosion +/obj/structure/disposalpipe/ex_act(severity) + + switch(severity) + if(1.0) + broken(0) + return + if(2.0) + health -= rand(5,15) + healthcheck() + return + if(3.0) + health -= rand(0,15) + healthcheck() + return + + +// test health for brokenness +/obj/structure/disposalpipe/proc/healthcheck() + if(health < -2) + broken(0) + else if(health<1) + broken(1) + return + +//attack by item +//weldingtool: unfasten and convert to obj/disposalconstruct + +/obj/structure/disposalpipe/attackby(var/obj/item/I, var/mob/user, params) + + var/turf/T = src.loc + if(T.intact) + return // prevent interaction with T-scanner revealed pipes + src.add_fingerprint(user) + if(istype(I, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = I + + if(W.remove_fuel(0,user)) + playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + // check if anything changed over 2 seconds + var/turf/uloc = user.loc + var/atom/wloc = W.loc + user << "Slicing the disposal pipe." + sleep(30) + if(!W.isOn()) return + if(user.loc == uloc && wloc == W.loc) + welded() + else + user << "You must stay still while welding the pipe." + else + user << "You need more welding fuel to cut the pipe." + return + +// called when pipe is cut with welder +/obj/structure/disposalpipe/proc/welded() + + var/obj/structure/disposalconstruct/C = new (src.loc) + switch(base_icon_state) + if("pipe-s") + C.ptype = 0 + if("pipe-c") + C.ptype = 1 + if("pipe-j1") + C.ptype = 2 + if("pipe-j2") + C.ptype = 3 + if("pipe-y") + C.ptype = 4 + if("pipe-t") + C.ptype = 5 + if("pipe-j1s") + C.ptype = 9 + if("pipe-j2s") + C.ptype = 10 + src.transfer_fingerprints_to(C) + C.dir = dir + C.density = 0 + C.anchored = 1 + C.update() + + qdel(src) + // *** TEST verb //client/verb/dispstop() // for(var/obj/structure/disposalholder/H in world) @@ -922,16 +933,14 @@ /obj/structure/disposalpipe/segment icon_state = "pipe-s" - New() - ..() - if(icon_state == "pipe-s") - dpdir = dir | turn(dir, 180) - else - dpdir = dir | turn(dir, -90) - - update() - return +/obj/structure/disposalpipe/segment/New() + ..() + if(icon_state == "pipe-s") + dpdir = dir | turn(dir, 180) + else + dpdir = dir | turn(dir, -90) + update() @@ -939,45 +948,44 @@ /obj/structure/disposalpipe/junction icon_state = "pipe-j1" - New() - ..() - if(icon_state == "pipe-j1") - dpdir = dir | turn(dir, -90) | turn(dir,180) - else if(icon_state == "pipe-j2") - dpdir = dir | turn(dir, 90) | turn(dir,180) - else // pipe-y - dpdir = dir | turn(dir,90) | turn(dir, -90) - update() - return +/obj/structure/disposalpipe/junction/New() + ..() + if(icon_state == "pipe-j1") + dpdir = dir | turn(dir, -90) | turn(dir,180) + else if(icon_state == "pipe-j2") + dpdir = dir | turn(dir, 90) | turn(dir,180) + else // pipe-y + dpdir = dir | turn(dir,90) | turn(dir, -90) + update() // next direction to move // if coming in from secondary dirs, then next is primary dir // if coming in from primary dir, then next is equal chance of other dirs - nextdir(var/fromdir) - var/flipdir = turn(fromdir, 180) - if(flipdir != dir) // came from secondary dir - return dir // so exit through primary - else // came from primary - // so need to choose either secondary exit - var/mask = ..(fromdir) +/obj/structure/disposalpipe/junction/nextdir(var/fromdir) + var/flipdir = turn(fromdir, 180) + if(flipdir != dir) // came from secondary dir + return dir // so exit through primary + else // came from primary + // so need to choose either secondary exit + var/mask = ..(fromdir) - // find a bit which is set - var/setbit = 0 - if(mask & NORTH) - setbit = NORTH - else if(mask & SOUTH) - setbit = SOUTH - else if(mask & EAST) - setbit = EAST - else - setbit = WEST + // find a bit which is set + var/setbit = 0 + if(mask & NORTH) + setbit = NORTH + else if(mask & SOUTH) + setbit = SOUTH + else if(mask & EAST) + setbit = EAST + else + setbit = WEST - if(prob(50)) // 50% chance to choose the found bit or the other one - return setbit - else - return mask & (~setbit) + if(prob(50)) // 50% chance to choose the found bit or the other one + return setbit + else + return mask & (~setbit) //a three-way junction that sorts objects /obj/structure/disposalpipe/sortjunction diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 90cebcf4648..fccc9008310 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -122,6 +122,14 @@ build_path = /obj/item/weapon/airlock_electronics category = list("initial", "Electronics") +/datum/design/apc_electronics + name="Power Control Module" + id = "apc_electronics" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/weapon/apc_electronics + category = list("initial", "Electronics") + /datum/design/intercom_electronics name = "Intercom Electronics" id = "intercom_electronics" @@ -418,6 +426,14 @@ build_path = /obj/item/ammo_casing/shotgun/beanbag category = list("initial", "Security") +/datum/design/rubbershot + name = "Rubber shot" + id = "rubber_shot" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_casing/shotgun/rubbershot + category = list("initial", "Security") + /datum/design/c38 name = "Speed Loader (.38)" id = "c38" diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm index 330098a2383..87f4db7e1f0 100644 --- a/code/modules/research/designs/equipment_designs.dm +++ b/code/modules/research/designs/equipment_designs.dm @@ -10,7 +10,7 @@ materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_PLASMA = 1500, MAT_URANIUM = 200) build_path = /obj/item/weapon/weldingtool/experimental category = list("Equipment") - + /datum/design/health_hud name = "Health Scanner HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." @@ -120,4 +120,24 @@ materials = list(MAT_METAL = 6000, MAT_GLASS = 2000) build_path = /obj/item/device/detective_scanner locked = 1 //no validhunting scientists. + category = list("Equipment") + +/datum/design/sci_goggles + name = "Science Goggles" + desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine." + id = "scigoggles" + req_tech = list("materials" = 3, "magnets" = 3, "engineering" = 2) + build_type = PROTOLATHE + materials = list(MAT_METAL = 250, MAT_GLASS = 300) + build_path = /obj/item/clothing/glasses/science + category = list("Equipment") + +/datum/design/nv_sci_goggles + name = "Night Vision Science Goggles" + desc = "Like Science google, but works in darkness." + id = "nvscigoggles" + req_tech = list("materials" = 5, "magnets" = 5, "engineering" = 4) + build_type = PROTOLATHE + materials = list(MAT_METAL = 250, MAT_GLASS = 300, MAT_PLASMA = 250, MAT_URANIUM = 1000) + build_path = /obj/item/clothing/glasses/science category = list("Equipment") \ No newline at end of file diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 9072217e4f7..f0e7a0ddf69 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -54,7 +54,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, var/selected_category var/list/datum/design/matching_designs = list() //for the search function -/obj/machinery/computer/rdconsole/proc/CallTechName(var/ID) //A simple helper proc to find the name of a tech with a given ID. +/proc/CallTechName(ID) //A simple helper proc to find the name of a tech with a given ID. var/datum/tech/check_tech var/return_name = null for(var/T in subtypesof(/datum/tech)) @@ -68,7 +68,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, return return_name -/obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID) +proc/CallMaterialName(ID) var/datum/reagent/temp_reagent var/return_name = null if (copytext(ID, 1, 2) == "$") @@ -183,7 +183,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, /obj/machinery/computer/rdconsole/Topic(href, href_list) if(..()) return 1 - + if(!allowed(usr) && !isobserver(usr)) return 1 @@ -1115,7 +1115,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "
Blob
" return dat - + /obj/machinery/computer/rdconsole/core name = "Core R&D Console" desc = "A console used to interface with R&D tools." @@ -1126,7 +1126,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, desc = "A console used to interface with R&D tools." id = 2 req_access = list(access_robotics) - + /obj/machinery/computer/rdconsole/experiment name = "E.X.P.E.R.I-MENTOR R&D Console" desc = "A console used to interface with R&D tools." @@ -1137,4 +1137,3 @@ won't update every console in existence) but it's more of a hassle to do. Also, desc = "A console used to interface with R&D tools." id = 4 req_access = list(access_mechanic) - \ No newline at end of file diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm index 0215c67e520..817baf70e16 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm @@ -99,7 +99,7 @@ //failure user.visible_message("[src] suddenly crumbles away.",\ "\red [src] has disintegrated under your onslaught, any secrets it was holding are long gone.") - del(src) + qdel(src) return if(prob(excavation_level)) @@ -115,4 +115,4 @@ else user.visible_message("[src] suddenly crumbles away.",\ "\blue [src] has been whittled away under your careful excavation, but there was nothing of interest inside.") - del(src) + qdel(src) diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm index 27a51f80135..54bdf4fd961 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm @@ -20,17 +20,17 @@ /obj/structure/crystal/Destroy() src.visible_message("\The [src] shatters!") if(prob(75)) - PoolOrNew(/obj/item/weapon/shard/plasma, loc) + new /obj/item/weapon/shard/plasma(loc) if(prob(50)) - PoolOrNew(/obj/item/weapon/shard/plasma, loc) + new /obj/item/weapon/shard/plasma(loc) if(prob(25)) - PoolOrNew(/obj/item/weapon/shard/plasma, loc) + new /obj/item/weapon/shard/plasma(loc) if(prob(75)) - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) if(prob(50)) - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) if(prob(25)) - PoolOrNew(/obj/item/weapon/shard, loc) + new /obj/item/weapon/shard(loc) return ..() //todo: laser_act diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_forcefield.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_forcefield.dm index e076eedd2bd..82848156023 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_forcefield.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_forcefield.dm @@ -13,7 +13,7 @@ if(created_field.len) for(var/obj/effect/energy_field/F in created_field) created_field.Remove(F) - del F + qdel(F) else if(holder) var/turf/T = get_turf(holder) while(created_field.len < 16) diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm index a3ab9612471..01ce550c045 100644 --- a/code/modules/research/xenoarchaeology/finds/finds.dm +++ b/code/modules/research/xenoarchaeology/finds/finds.dm @@ -57,7 +57,7 @@ else for(var/mob/M in viewers(world.view, user)) M.show_message("[src] burns away into nothing.",1) - del(src) + qdel(src) w.remove_fuel(4) else for(var/mob/M in viewers(world.view, user)) @@ -73,7 +73,7 @@ ..() if(prob(33)) src.visible_message("[src] crumbles away, leaving some dust and gravel behind.") - del(src) + qdel(src) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Archaeological finds @@ -311,9 +311,9 @@ apply_material_decorations = 0 if(22) if(prob(50)) - new_item = PoolOrNew(/obj/item/weapon/shard, loc) + new_item = new /obj/item/weapon/shard(loc) else - new_item = PoolOrNew(/obj/item/weapon/shard/plasma, loc) + new_item = new /obj/item/weapon/shard/plasma(loc) apply_prefix = 0 apply_image_decorations = 0 @@ -547,7 +547,7 @@ talking_atom.holder_atom = new_item talking_atom.init() - del(src) + qdel(src) else if(talkative) src.talking_atom = new() diff --git a/code/modules/research/xenoarchaeology/finds/finds_fossils.dm b/code/modules/research/xenoarchaeology/finds/finds_fossils.dm index 8338de5a3ae..a619325d941 100644 --- a/code/modules/research/xenoarchaeology/finds/finds_fossils.dm +++ b/code/modules/research/xenoarchaeology/finds/finds_fossils.dm @@ -17,7 +17,7 @@ var/turf/T = get_turf(src) if(istype(T, /turf/simulated/mineral)) T:last_find = W - del src + qdel(src) /obj/item/weapon/fossil/bone name = "Fossilised bone" @@ -40,8 +40,8 @@ var/b = new src.type o.contents.Add(a) o.contents.Add(b) - del W - del src + qdel(W) + qdel(src) /obj/skeleton name = "Incomplete skeleton" @@ -62,7 +62,7 @@ if(!bstate) bnum++ src.contents.Add(new/obj/item/weapon/fossil/bone) - del W + qdel(W) if(bnum==breq) usr = user icon_state = "skel" diff --git a/code/modules/research/xenoarchaeology/master_controller.dm b/code/modules/research/xenoarchaeology/master_controller.dm index 43c9bcef812..a4421aa3e61 100644 --- a/code/modules/research/xenoarchaeology/master_controller.dm +++ b/code/modules/research/xenoarchaeology/master_controller.dm @@ -108,7 +108,7 @@ datum/controller/game_controller/proc/SetupXenoarch() if(!genome_prefixes) genome_prefixes = alphabet_uppercase.Copy() if(!genome_prefixes.len) - del genome_prefixes + qdel(genome_prefixes) genome_prefixes = alphabet_uppercase.Copy() //create animal gene sequences diff --git a/code/modules/scripting/Parser/Keywords.dm b/code/modules/scripting/Parser/Keywords.dm index bdd33d8bda0..e39ee506857 100644 --- a/code/modules/scripting/Parser/Keywords.dm +++ b/code/modules/scripting/Parser/Keywords.dm @@ -46,7 +46,7 @@ var/const/Represents a special statement in the code triggered by a keyword. nS_Keyword New(inline=0) if(inline) - del src + del(src) kwReturn Parse(n_Parser/nS_Parser/parser) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 6fe84897c3b..6b29f969743 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -150,6 +150,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) for(var/obj/item/organ/I in affected.internal_organs) + if(I) + I.surgeryize() if(I && I.damage > 0) if(I.robotic < 2) user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ @@ -193,7 +195,7 @@ if (!..()) return 0 - + var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!(affected && !(affected.status & ORGAN_ROBOT))) @@ -310,7 +312,7 @@ if(!istype(O)) return 0 - + if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT)) user << "You cannot install a naked organ into a robotic body." return 2 diff --git a/code/modules/vehicle/train/trains/ambulance.dm b/code/modules/vehicle/train/trains/ambulance.dm index fea50fba521..f7094f10ad8 100644 --- a/code/modules/vehicle/train/trains/ambulance.dm +++ b/code/modules/vehicle/train/trains/ambulance.dm @@ -33,7 +33,6 @@ /obj/vehicle/train/ambulance/engine/New() ..() cell = new /obj/item/weapon/stock_parts/cell/high - verbs -= /atom/movable/verb/pull key = new() /obj/vehicle/train/ambulance/engine/Move() diff --git a/code/modules/vehicle/train/trains/cargo/cargo_train.dm b/code/modules/vehicle/train/trains/cargo/cargo_train.dm index 338432fabad..5933ada33d5 100644 --- a/code/modules/vehicle/train/trains/cargo/cargo_train.dm +++ b/code/modules/vehicle/train/trains/cargo/cargo_train.dm @@ -41,7 +41,6 @@ /obj/vehicle/train/cargo/engine/New() ..() cell = new /obj/item/weapon/stock_parts/cell/high - verbs -= /atom/movable/verb/pull key = new() var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs overlays += I @@ -279,10 +278,5 @@ if(!lead && !tow) anchored = 0 - if(verbs.Find(/atom/movable/verb/pull)) - return - else - verbs += /atom/movable/verb/pull else - anchored = 1 - verbs -= /atom/movable/verb/pull + anchored = 1 \ No newline at end of file diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index e73fea39d27..7b1c38e4bef 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -552,7 +552,7 @@ stage = 3 activate(var/mob/living/carbon/mob,var/multiplier) if(prob(30)) - mob.emote("me",1,"is sweating profusely!") + mob.custom_emote(1,"is sweating profusely!") if(istype(mob.loc,/turf/simulated)) var/turf/simulated/T = mob.loc @@ -583,7 +583,7 @@ if(pick(0,1)) mob.say(pick("Uh HUH!", "Thank you, Thank you very much...", "I ain't nothin' but a hound dog!", "Swing low, sweet chariot!")) else - mob.emote("me",1,pick("curls his lip!", "gyrates his hips!", "thrusts his hips!")) + mob.custom_emote(1,pick("curls his lip!", "gyrates his hips!", "thrusts his hips!")) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob if(H.species.name == "Human" && !(H.f_style == "Pompadour")) @@ -945,7 +945,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human) name = "Wheezing" stage = 1 activate(var/mob/living/carbon/mob,var/multiplier) - mob.emote("me",1,"wheezes.") + mob.custom_emote(1,"wheezes.") /datum/disease2/effect/optimistic_minor diff --git a/config/example/config.txt b/config/example/config.txt index 076a0e80766..6f5485ba6e6 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -86,7 +86,6 @@ PROBABILITY RAGINMAGES 0 PROBABILITY BORER 0 PROBABILITY XENOS 2 PROBABILITY MUTINY 1 -PROBABILITY NATIONS 0 PROBABILITY METEOR 0 ## Hash out to disable random events during the round. diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index b9602a93b1d..ca86e3b6814 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ diff --git a/icons/mob/corgi_back.dmi b/icons/mob/corgi_back.dmi index a8871a76d49..ffc5e9428db 100644 Binary files a/icons/mob/corgi_back.dmi and b/icons/mob/corgi_back.dmi differ diff --git a/icons/mob/corgi_head.dmi b/icons/mob/corgi_head.dmi index 93a789b08f7..8c48077682e 100644 Binary files a/icons/mob/corgi_head.dmi and b/icons/mob/corgi_head.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 2a7d6de6cb6..cc0fcbf3e09 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/mob/screen1.dmi b/icons/mob/screen1.dmi index 38fc4dd06be..b6a84df335a 100644 Binary files a/icons/mob/screen1.dmi and b/icons/mob/screen1.dmi differ diff --git a/icons/mob/screen1_Midnight.dmi b/icons/mob/screen1_Midnight.dmi index 89723dc9363..808734a832e 100644 Binary files a/icons/mob/screen1_Midnight.dmi and b/icons/mob/screen1_Midnight.dmi differ diff --git a/icons/mob/screen1_NinjaHUD.dmi b/icons/mob/screen1_NinjaHUD.dmi index d4f554a0aa4..bbbf743533e 100644 Binary files a/icons/mob/screen1_NinjaHUD.dmi and b/icons/mob/screen1_NinjaHUD.dmi differ diff --git a/icons/mob/screen1_Orange.dmi b/icons/mob/screen1_Orange.dmi index bda7f98857b..15964ad65d0 100644 Binary files a/icons/mob/screen1_Orange.dmi and b/icons/mob/screen1_Orange.dmi differ diff --git a/icons/mob/screen1_Vampire.dmi b/icons/mob/screen1_Vampire.dmi index a5026a36fa2..6a30aa697d8 100644 Binary files a/icons/mob/screen1_Vampire.dmi and b/icons/mob/screen1_Vampire.dmi differ diff --git a/icons/mob/screen1_White.dmi b/icons/mob/screen1_White.dmi index b96463eee2b..b474f443445 100644 Binary files a/icons/mob/screen1_White.dmi and b/icons/mob/screen1_White.dmi differ diff --git a/icons/mob/screen1_corgi.dmi b/icons/mob/screen1_corgi.dmi index cfe8f62efa5..dafa9ae2b44 100644 Binary files a/icons/mob/screen1_corgi.dmi and b/icons/mob/screen1_corgi.dmi differ diff --git a/icons/mob/screen1_old.dmi b/icons/mob/screen1_old.dmi index 51dce681bf7..7da629f1dae 100644 Binary files a/icons/mob/screen1_old.dmi and b/icons/mob/screen1_old.dmi differ diff --git a/icons/mob/screen1_robot.dmi b/icons/mob/screen1_robot.dmi index cc2051ee1ce..9188e33ff5f 100644 Binary files a/icons/mob/screen1_robot.dmi and b/icons/mob/screen1_robot.dmi differ diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index 2df0cf5540e..c41b8e60053 100644 Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ diff --git a/nano/css/shared.css b/nano/css/shared.css index 861fd9e165c..786b577e615 100644 --- a/nano/css/shared.css +++ b/nano/css/shared.css @@ -445,6 +445,11 @@ div.notice { white-space: nowrap; } +.pdanote { + color: #cd6500; + font-weight: bold; +} + /* DNA Modifier styling */ .dnaBlock { float: left; diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js index 40c6b6077e5..28a41518010 100644 --- a/nano/js/nano_base_helpers.js +++ b/nano/js/nano_base_helpers.js @@ -102,6 +102,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) { diff --git a/nano/maptools/MapPatcher.jar b/nano/maptools/MapPatcher.jar deleted file mode 100644 index 5cbaad488c1..00000000000 Binary files a/nano/maptools/MapPatcher.jar and /dev/null differ diff --git a/nano/maptools/clean_map.bat b/nano/maptools/clean_map.bat deleted file mode 100644 index 82ed1829b4f..00000000000 --- a/nano/maptools/clean_map.bat +++ /dev/null @@ -1 +0,0 @@ -java -jar MapPatcher.jar -clean ../maps/tgstation2.dmm.backup ../maps/tgstation2.dmm ../maps/tgstation2.dmm \ No newline at end of file diff --git a/nano/maptools/mapmerge.sh b/nano/maptools/mapmerge.sh deleted file mode 100644 index bddb60100e0..00000000000 --- a/nano/maptools/mapmerge.sh +++ /dev/null @@ -1,9 +0,0 @@ -java -jar maptools/MapPatcher.jar -merge $1 $2 $3 $2 -if [ "$?" -gt 0 ] -then - echo "Unable to automatically resolve map conflicts, please merge manually." - exit 1 -fi -java -jar maptools/MapPatcher.jar -clean $1 $2 $2 - -exit 0 diff --git a/nano/maptools/new_clean.bat b/nano/maptools/new_clean.bat deleted file mode 100644 index 9d9ec108b5d..00000000000 --- a/nano/maptools/new_clean.bat +++ /dev/null @@ -1,96 +0,0 @@ -@setlocal enableextensions enabledelayedexpansion -@echo off - -set /a count=0 -for /f "tokens=*" %%A in ('dir /b /a-d "../maps/*.dmm"') do ( - set /a count+=1 - set num.!count!=%%A -) - -for /f "tokens=2* delims=.=" %%A in ('set num.') do echo %%A = %%B - -:choosemap -echo ... -set /p prompt="Which map # would you like to clean?: " || set prompt=_None - -if /i "%prompt%"=="exit" ( - goto :quitmaybe -) - -if "%prompt%"=="_None" ( - goto :prom_error -) else set mapnum=%prompt% - -for /f "tokens=2* delims=.=" %%A in ('set num.%mapnum%') do set map=%%B - -if "%map%"=="" ( - echo That's not a valid map, donklorde. - goto :choosemap -) - -if not exist "../maps/%map%.backup" ( - goto :bckup_error -) - -goto :printpath - -:prom_error -echo You didn't choose anything! -goto :choosemap - -:bckup_error -echo ... -echo WARNING: A .backup does not exist for %map% ! -echo ... -goto :choosemap - - -:printpath -echo ... -echo ============= -echo Map filepath (This should NOT be the .backup): -echo:../maps/%map% -echo ============= -goto :finalize - - -:finalize -echo ... -set /p finalize="Is this filepath correct?: " || set finalize=None -if "%finalize%"=="None" (goto :fin_error) -if /i "%finalize%"=="y" (goto :java) -if /i "%finalize%"=="yes" (goto :java) -if /i "%finalize%"=="n" (goto :quitmaybe) -if /i "%finalize%"=="no" (goto :quitmaybe) -goto :fin_error - -:fin_error -echo ... -echo That wasn't a valid response you donk! -echo Valid responses: y, n, yes, no -goto :finalize - -:java -echo Starting MapPatcher... -java -jar MapPatcher.jar -clean ../maps/%map%.backup ../maps/%map% ../maps/%map% -goto :exit - -:quitmaybe -echo ... -set /p exitmaybe="Exit the program?: " || set exitmaybe=_NothingChosen -if "%exitmaybe%"=="_NothingChosen" (goto :qm_error) -if /i "%exitmaybe%"=="y" (goto :exit) -if /i "%exitmaybe%"=="yes" (goto :exit) -if /i "%exitmaybe%"=="n" (goto :choosemap) -if /i "%exitmaybe%"=="no" (goto :choosemap) -goto :qm_error - -:qm_error -echo ... -echo That wasn't a valid response, or you didn't choose anything! -echo Valid responses: y, n, yes, no -goto :quitmaybe - -:exit -pause -exit \ No newline at end of file diff --git a/nano/maptools/new_prepare.bat b/nano/maptools/new_prepare.bat deleted file mode 100644 index ddcdfabe1cb..00000000000 --- a/nano/maptools/new_prepare.bat +++ /dev/null @@ -1,73 +0,0 @@ -@setlocal enableextensions enabledelayedexpansion -@echo off - -set /a count=0 -for /f "tokens=*" %%A in ('dir /b /a-d "../maps/*.dmm"') do ( - set /a count+=1 - set num.!count!=%%A -) - -for /f "tokens=2* delims=.=" %%A in ('set num.') do echo %%A = %%B - -:choosemap -echo ... -set /p prompt="Which map # would you like to back up?: " || set prompt=_None - -if /i "%prompt%"=="exit" ( - goto :quitmaybe -) - -if "%prompt%"=="_None" ( - goto :prom_error -) else set mapnum=%prompt% - -for /f "tokens=2* delims=.=" %%A in ('set num.%mapnum%') do set map=%%B - -if "%map%"=="" ( - echo That's not a valid map, donklorde. - goto :choosemap -) - -goto :printpath - -:prom_error -echo You didn't choose anything! -goto :choosemap - -:printpath -echo ... -echo ============= -echo Backing up: -echo:../maps/%map% -echo Into: -echo:../maps/%map%.backup -echo ============= -goto :copymap - -:copymap -echo Copying... -cd ../maps -copy %map% %map%.backup -echo Done. -goto :exit - -:quitmaybe -echo ... -set /p exitmaybe="Exit the program?: " || set exitmaybe=_NothingChosen -if "%exitmaybe%"=="_NothingChosen" (goto :qm_error) -if /i "%exitmaybe%"=="y" (goto :exit) -if /i "%exitmaybe%"=="yes" (goto :exit) -if /i "%exitmaybe%"=="n" (goto :choosemap) -if /i "%exitmaybe%"=="no" (goto :choosemap) -goto :qm_error - -:qm_error -echo ... -echo That wasn't a valid response, or you didn't choose anything! -echo Valid responses: y, n, yes, no -goto :quitmaybe - -:exit -pause -exit - diff --git a/nano/maptools/prepare_map.bat b/nano/maptools/prepare_map.bat deleted file mode 100644 index 98c5c884b01..00000000000 --- a/nano/maptools/prepare_map.bat +++ /dev/null @@ -1,2 +0,0 @@ -cd ../maps -copy tgstation2.dmm tgstation2.dmm.backup diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index 8b2920bb23b..753e06f299e 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -3,16 +3,90 @@ Title: PDA UI Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm --> +{{if data.useRetro}} + + + +{{/if}} {{if data.owner}}
Functions:
- - {{:helper.link('Close', 'gear', {'choice' : "Close"}, null, 'fixedLeft')}} - {{if data.idInserted}} {{:helper.link('Update PDA Info', 'eject', {'choice' : "UpdateInfo"}, null, 'fixedLeftWide')}} {{/if}} - {{if data.mode != 0}} {{:helper.link('Return', 'arrowreturn-1-w', {'choice' : "Return"}, null, 'fixedLeft')}} {{/if}} + + {{:helper.link('Close', 'gear', {'choice' : "Close"}, null, 'pdalink fixedLeft')}} + {{if data.idInserted}} {{:helper.link('Update PDA Info', 'eject', {'choice' : "UpdateInfo"}, null, 'pdalink fixedLeftWide')}} {{/if}} + {{if data.mode != 0}} {{:helper.link('Return', 'arrowreturn-1-w', {'choice' : "Return"}, null, 'pdalink fixedLeft')}} {{/if}} + {{:helper.link('Toggle R.E.T.R.O. mode', 'gear', {'choice': "Retro"}, null, 'floatRight')}}

@@ -42,7 +116,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm ID:
- {{:helper.link(data.idLink, 'eject', {'choice' : "Authenticate"}, data.idInserted ? null : 'disabled', data.idInserted ? 'fixedLeftWidest' : 'fixedLeft')}} + {{:helper.link(data.idLink, 'eject', {'choice' : "Authenticate"}, data.idInserted ? null : 'disabled', data.idInserted ? 'link fixedLeftWidest' : 'link fixedLeft')}}

@@ -66,9 +140,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm General:
- {{:helper.link('Notekeeper', 'note', {'choice' : "1"}, null, 'fixedLeftWide')}} - {{:helper.link('Messenger', data.newMessage ? 'mail-closed' : 'mail-open', {'choice' : "2"}, null, 'fixedLeftWide')}} - {{:helper.link('Crew Manifest', 'contact', {'choice' : "41"}, null, 'fixedLeftWide')}} + {{:helper.link('Notekeeper', 'note', {'choice' : "1"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Messenger', data.newMessage ? 'mail-closed' : 'mail-open', {'choice' : "2"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Crew Manifest', 'contact', {'choice' : "41"}, null, 'pdalink fixedLeftWide')}}

@@ -79,7 +153,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Clown:
- {{:helper.link('Honk Synthesizer', 'gear', {'choice' : "Honk"}, null, 'fixedLeftWide')}} + {{:helper.link('Honk Synthesizer', 'gear', {'choice' : "Honk"}, null, 'pdalink fixedLeftWide')}}

@@ -90,7 +164,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Engineering:
- {{:helper.link('Power Monitor', 'alert', {'choice' : "43"}, null, 'fixedLeftWide')}} + {{:helper.link('Power Monitor', 'alert', {'choice' : "43"}, null, 'pdalink fixedLeftWide')}}

@@ -101,8 +175,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Medical:
- {{:helper.link('Medical Records', 'gear', {'choice' : "44"}, null, 'fixedLeftWide')}} - {{:helper.link(data.scanmode == 1 ? 'Disable Med Scanner' : 'Enable Med Scanner', 'gear', {'choice' : "Medical Scan"}, null , 'fixedLeftWide')}} + {{:helper.link('Medical Records', 'gear', {'choice' : "44"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link(data.scanmode == 1 ? 'Disable Med Scanner' : 'Enable Med Scanner', 'gear', {'choice' : "Medical Scan"}, null , 'pdalink fixedLeftWide')}}

@@ -113,8 +187,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Security:
- {{:helper.link('Security Records', 'gear', {'choice' : "45"}, null, 'fixedLeftWide')}} - {{if data.cartridge.radio ==1}} {{:helper.link('Security Bot Access', 'gear', {'choice' : "46"}, null, 'fixedLeftWide')}} {{/if}} + {{:helper.link('Security Records', 'gear', {'choice' : "45"}, null, 'pdalink fixedLeftWide')}} + {{if data.cartridge.radio ==1}} {{:helper.link('Security Bot Access', 'gear', {'choice' : "46"}, null, 'pdalink fixedLeftWide')}} {{/if}}
@@ -126,8 +200,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Quartermaster:
- {{:helper.link('Supply Records', 'gear', {'choice' : "47"}, null, 'fixedLeftWide')}} - {{if data.cartridge.radio == 3}} {{:helper.link('Delivery Bot Control', 'gear', {'choice' : "48"}, null, 'fixedLeftWide')}} {{/if}} + {{:helper.link('Supply Records', 'gear', {'choice' : "47"}, null, 'pdalink fixedLeftWide')}} + {{if data.cartridge.radio == 3}} {{:helper.link('Delivery Bot Control', 'gear', {'choice' : "48"}, null, 'pdalink fixedLeftWide')}} {{/if}}
@@ -142,29 +216,29 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{if data.cartridge}} {{if data.cartridge.access.access_status_display == 1}} - {{:helper.link('Status Display', 'gear', {'choice' : "42"}, null, 'fixedLeftWide')}} + {{:helper.link('Status Display', 'gear', {'choice' : "42"}, null, 'pdalink fixedLeftWide')}} {{/if}} {{if data.cartridge.access.access_janitor==1}} - {{:helper.link('Custodial Locator', 'gear', {'choice' : "49"}, null, 'fixedLeftWide')}} + {{:helper.link('Custodial Locator', 'gear', {'choice' : "49"}, null, 'pdalink fixedLeftWide')}} {{/if}} {{if data.cartridge.radio == 2}} - {{:helper.link('Signaler System', 'gear', {'choice' : "40"}, null, 'fixedLeftWide')}} + {{:helper.link('Signaler System', 'gear', {'choice' : "40"}, null, 'pdalink fixedLeftWide')}} {{/if}} {{if data.cartridge.access.access_reagent_scanner==1}} - {{:helper.link(data.scanmode == 3 ? 'Disable Reagent Scanner' : 'Enable Reagent Scanner', 'gear', {'choice' : "Reagent Scan"}, null, 'fixedLeftWider')}} + {{:helper.link(data.scanmode == 3 ? 'Disable Reagent Scanner' : 'Enable Reagent Scanner', 'gear', {'choice' : "Reagent Scan"}, null, 'pdalink fixedLeftWider')}} {{/if}} {{if data.cartridge.access.access_engine==1}} - {{:helper.link(data.scanmode == 4 ? 'Disable Halogen Counter' : 'Enable Halogen Counter', 'gear', {'choice' : "Halogen Counter"}, null, 'fixedLeftWider')}} + {{:helper.link(data.scanmode == 4 ? 'Disable Halogen Counter' : 'Enable Halogen Counter', 'gear', {'choice' : "Halogen Counter"}, null, 'pdalink fixedLeftWider')}} {{/if}} {{if data.cartridge.access.access_atmos==1}} - {{:helper.link(data.scanmode == 5 ? 'Disable Gas Scanner' : 'Enable Gas Scanner', 'gear', {'choice' : "Gas Scan"}, null, 'fixedLeftWide')}} + {{:helper.link(data.scanmode == 5 ? 'Disable Gas Scanner' : 'Enable Gas Scanner', 'gear', {'choice' : "Gas Scan"}, null, 'pdalink fixedLeftWide')}} {{/if}} {{if data.cartridge.access.access_remote_door==1}} - {{:helper.link('Toggle Door', 'gear', {'choice' : "Toggle Door"}, null, 'fixedLeftWide')}} + {{:helper.link('Toggle Door', 'gear', {'choice' : "Toggle Door"}, null, 'pdalink fixedLeftWide')}} {{/if}} {{/if}} - {{:helper.link('Atmospheric Scan', 'gear', {'choice' : "3"}, null, 'fixedLeftWide')}} - {{:helper.link(data.fon==1 ? 'Disable Flashlight' : 'Enable Flashlight', 'lightbulb', {'choice' : "Light"}, null,'fixedLeftWide')}} + {{:helper.link('Atmospheric Scan', 'gear', {'choice' : "3"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link(data.fon==1 ? 'Disable Flashlight' : 'Enable Flashlight', 'lightbulb', {'choice' : "Light"}, null,'pdalink fixedLeftWide')}}
{{if data.pai}} @@ -173,8 +247,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm PAI Utilities:
- {{:helper.link('Configuration', 'gear', {'choice' : "pai", 'option' : "1"}, null, 'fixedLeft')}} - {{:helper.link('Eject pAI', 'eject', {'choice' : "pai", 'option' : "2"}, null, 'fixedLeft')}} + {{:helper.link('Configuration', 'gear', {'choice' : "pai", 'option' : "1"}, null, 'pdalink fixedLeft')}} + {{:helper.link('Eject pAI', 'eject', {'choice' : "pai", 'option' : "2"}, null, 'pdalink fixedLeft')}}
{{/if}} @@ -189,13 +263,13 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
- {{:data.note}} + {{:data.note}}
- {{:helper.link('Edit Notes', 'gear', {'choice' : "Edit"}, null, 'fixedLeft')}} + {{:helper.link('Edit Notes', 'gear', {'choice' : "Edit"}, null, 'pdalink fixedLeft')}}
@@ -207,10 +281,10 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Messenger Functions:
- {{:helper.link(data.silent==1 ? 'Ringer: Off' : 'Ringer: On', data.silent==1 ? 'volume-off' : 'volume-on', {'choice' : "Toggle Ringer"}, null, 'fixedLeftWide')}} - {{:helper.link(data.toff==1 ? 'Messenger: Off' : 'Messenger: On',data.toff==1 ? 'close':'check', {'choice' : "Toggle Messenger"}, null, 'fixedLeftWide')}} - {{:helper.link('Set Ringtone', 'comment', {'choice' : "Ringtone"}, null, 'fixedLeftWide')}} - {{:helper.link('Delete all Conversations', 'trash', {'choice' : "Clear", 'option' : "All"}, null, 'fixedLeftWider')}} + {{:helper.link(data.silent==1 ? 'Ringer: Off' : 'Ringer: On', data.silent==1 ? 'volume-off' : 'volume-on', {'choice' : "Toggle Ringer"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link(data.toff==1 ? 'Messenger: Off' : 'Messenger: On',data.toff==1 ? 'close':'check', {'choice' : "Toggle Messenger"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Set Ringtone', 'comment', {'choice' : "Ringtone"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Delete all Conversations', 'trash', {'choice' : "Clear", 'option' : "All"}, null, 'pdalink fixedLeftWider')}}
{{if data.toff == 0}} @@ -233,16 +307,16 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm

Current Conversations

{{for data.convopdas}}
- {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Select Conversation", 'convo' : value.Reference } , null, value.fixedLeftWider)}} + {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Select Conversation", 'convo' : value.Reference } , null, 'pdalink fixedLeftWider')}} {{if data.cartridge}} {{if data.cartridge.access.access_detonate_pda && value.Detonate}} - {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}} + {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} {{if data.cartridge.access.access_clown}} - {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}} + {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} {{if data.cartridge.access.access_mime}} - {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'fixedLeft')}} + {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} {{/if}}
@@ -250,11 +324,11 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm

Other PDAs

{{for data.pdas}}
- {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Message", 'target' : value.Reference}, null, value.fixedLeftWider)}} + {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Message", 'target' : value.Reference}, null, 'pdalink fixedLeftWider')}} {{if data.cartridge}} - {{if data.cartridge.access.access_detonate_pda && value.Detonate}} {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}} - {{if data.cartridge.access.access_clown}} {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}} - {{if data.cartridge.access.access_mime}} {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}} + {{if data.cartridge.access.access_detonate_pda && value.Detonate}} {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} + {{if data.cartridge.access.access_clown}} {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} + {{if data.cartridge.access.access_mime}} {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} {{/if}}
{{/for}} @@ -269,7 +343,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Messenger Functions:
- {{:helper.link('Delete Conversation', 'trash', {'choice' : "Clear", 'option' : "Convo"}, null, 'fixedLeftWide')}} + {{:helper.link('Delete Conversation', 'trash', {'choice' : "Clear", 'option' : "Convo"}, null, 'pdalink fixedLeftWide')}}

@@ -290,7 +364,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm - {{:helper.link('Reply', 'comment', {'choice' : "Message", 'target': data.active_conversation}, null, 'fixedLeft')}} + {{:helper.link('Reply', 'comment', {'choice' : "Message", 'target': data.active_conversation}, null, 'pdalink fixedLeft')}} {{else data.mode== 41}} @@ -382,38 +456,38 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{if data.aircontents.reading == 1}}
- Pressure: + Pressure:
{{:helper.string('{1} kPa', data.aircontents.pressure < 80 || data.aircontents.pressure > 120 ? 'bad' : data.aircontents.pressure < 95 || data.aircontents.pressure > 110 ? 'average' : 'good' , data.aircontents.pressure)}}
- Temperature: + Temperature:
{{:helper.string('{1} °C', data.aircontents.temp < 5 || data.aircontents.temp > 35 ? 'bad' : data.aircontents.temp < 15 || data.aircontents.temp > 25 ? 'average' : 'good' , data.aircontents.temp)}}

- Oxygen: + Oxygen:
{{:helper.string('{1}%', data.aircontents.oxygen < 17 ? 'bad' : data.aircontents.oxygen < 19 ? 'average' : 'good' , data.aircontents.oxygen)}}
- Nitrogen: + Nitrogen:
{{:helper.string('{1}%', data.aircontents.nitrogen > 82 ? 'bad' : data.aircontents.nitrogen > 80 ? 'average' : 'good' , data.aircontents.nitrogen)}}
- Carbon Dioxide: + Carbon Dioxide:
{{:helper.string('{1}%', data.aircontents.carbon_dioxide > 5 ? 'bad' : 'good' , data.aircontents.carbon_dioxide)}}
- Plasma: + Plasma:
{{:helper.string('{1}%', data.aircontents.plasma > 0 ? 'bad' : 'good' , data.aircontents.plasma)}} @@ -421,7 +495,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{if data.aircontents.other > 0}}
- Unknown: + Unknown:
{{:data.aircontents.other}}% diff --git a/nano/templates/poolcontroller.tmpl b/nano/templates/poolcontroller.tmpl index 246542107a2..7f24546e4b2 100644 --- a/nano/templates/poolcontroller.tmpl +++ b/nano/templates/poolcontroller.tmpl @@ -7,39 +7,49 @@ Used In File(s): \code\game\machinery\poolcontroller.dm Current Temperature:
- {{:data.currentTemp}} + {{:helper.capitalizeFirstLetter(data.currentTemp)}}
+
+
+ Saftey Status: +
{{if data.emagged}} - WARNING: SAFE MODE OVERRIDE + WARNING: OVERRIDDEN {{else}} - Safeties Nominal + Nominal {{/if}}
+
Temperature Selection:
+ {{if data.emagged}}
- {{:helper.link('Scalding', 'circle-arrow-n', { 'temp' : 'Scalding' })}} + {{:helper.link('Scalding', 'circle-arrow-n', { 'temp' : 'Scalding' }, data.currentTemp == "scalding" ? 'selected' : null)}}
{{/if}} +
- {{:helper.link('Warm', 'circle-arrow-n', { 'temp' : 'Warm' })}} + {{:helper.link('Warm', 'circle-arrow-n', { 'temp' : 'Warm' }, data.currentTemp == "warm" ? 'selected' : null)}}
+
- {{:helper.link('Normal', 'circle-arrow-e', { 'temp' : 'Normal' })}} + {{:helper.link('Normal', 'circle-arrow-e', { 'temp' : 'Normal' }, data.currentTemp == "normal" ? 'selected' : null)}}
+
- {{:helper.link('Cool', 'circle-arrow-s', { 'temp' : 'Cool' })}} + {{:helper.link('Cool', 'circle-arrow-s', { 'temp' : 'Cool' }, data.currentTemp == "cool" ? 'selected' : null)}}
+ {{if data.emagged}}
- {{:helper.link('Frigid', 'circle-arrow-s', { 'temp' : 'Frigid' })}} + {{:helper.link('Frigid', 'circle-arrow-s', { 'temp' : 'Frigid' }, data.currentTemp == "frigid" ? 'selected' : null)}}
{{/if}}
\ No newline at end of file diff --git a/nano/templates/radio_basic.tmpl b/nano/templates/radio_basic.tmpl index 9aaad8cb489..73d37df8a70 100644 --- a/nano/templates/radio_basic.tmpl +++ b/nano/templates/radio_basic.tmpl @@ -2,15 +2,34 @@ Title: Basic Radio UI Used In File(s): /code/game/objects/item/devices/radio/radio.dm --> + + + + + + {{if data.useSyndMode}} {{:helper.syndicateMode()}} {{/if}}
-
+
Microphone
-
+
{{if data.mic_cut}} {{:helper.link('On', null, null, 'disabled')}} {{:helper.link('Off', null, null, 'disabled')}} @@ -22,10 +41,10 @@ Used In File(s): /code/game/objects/item/devices/radio/radio.dm
-
+
Speaker
-
+
{{if data.spk_cut}} {{:helper.link('On', null, null, 'disabled')}} {{:helper.link('Off', null, null, 'disabled')}} @@ -37,30 +56,34 @@ Used In File(s): /code/game/objects/item/devices/radio/radio.dm
{{if data.has_subspace}} -
- Subspace Transmission: -
-
- {{:helper.link('On', null, {'mode' : 1}, data.subspace ? 'selected' : null)}} - {{:helper.link('Off', null, {'mode' : 0}, data.subspace ? null : 'selected')}} +
+
+ Subspace Transmission: +
+
+ {{:helper.link('On', null, {'mode' : 1}, data.subspace ? 'selected' : null)}} + {{:helper.link('Off', null, {'mode' : 0}, data.subspace ? null : 'selected')}} +
{{/if}} {{if data.has_loudspeaker}} -
- Loudspeaker: -
-
- {{:helper.link('On', null, {'shutup' : 0}, data.loudspeaker ? 'selected' : null)}} - {{:helper.link('Off', null, {'shutup' : 1}, data.loudspeaker ? null : 'selected')}} +
+
+ Loudspeaker: +
+
+ {{:helper.link('On', null, {'shutup' : 0}, data.loudspeaker ? 'selected' : null)}} + {{:helper.link('Off', null, {'shutup' : 1}, data.loudspeaker ? null : 'selected')}} +
{{/if}}
-
+
Frequency: {{:data.freq}}
-
+
{{:helper.link('--', null, {'freq' : -10})}} {{:helper.link('-', null, {'freq' : -2})}} {{:helper.link('+', null, {'freq' : 2})}} @@ -72,12 +95,11 @@ Used In File(s): /code/game/objects/item/devices/radio/radio.dm

Channels

{{for data.chan_list}} -
- {{:value.display_name}} +
+ {{:value.display_name}}
-
+
{{if value.secure_channel}} - Speaker:  {{:helper.link('On', null, {'ch_name' : value.chan, 'listen' : value.sec_channel_listen}, value.sec_channel_listen ? null : 'selected')}} {{:helper.link('Off', null, {'ch_name' : value.chan, 'listen' : value.sec_channel_listen}, value.sec_channel_listen ? 'selected' : null)}} {{else}} diff --git a/paradise.dme b/paradise.dme index f05e4947579..4b45e3e9f84 100644 --- a/paradise.dme +++ b/paradise.dme @@ -249,7 +249,6 @@ #include "code\defines\procs\hud.dm" #include "code\defines\procs\radio.dm" #include "code\defines\procs\records.dm" -#include "code\defines\procs\sd_Alert.dm" #include "code\defines\procs\statistics.dm" #include "code\game\asteroid.dm" #include "code\game\atoms.dm" @@ -353,10 +352,6 @@ #include "code\game\gamemodes\mutiny\directives\tau_ceti_needs_women_directive.dm" #include "code\game\gamemodes\mutiny\directives\terminations_directive.dm" #include "code\game\gamemodes\mutiny\directives\vox_heist.dm" -#include "code\game\gamemodes\nations\flag_pinpointer.dm" -#include "code\game\gamemodes\nations\flagprocs.dm" -#include "code\game\gamemodes\nations\nationdatums.dm" -#include "code\game\gamemodes\nations\nations.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" #include "code\game\gamemodes\nuclear\nuclearbomb.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm" @@ -722,7 +717,6 @@ #include "code\game\objects\items\weapons\lighters.dm" #include "code\game\objects\items\weapons\manuals.dm" #include "code\game\objects\items\weapons\misc.dm" -#include "code\game\objects\items\weapons\module.dm" #include "code\game\objects\items\weapons\mop.dm" #include "code\game\objects\items\weapons\paint.dm" #include "code\game\objects\items\weapons\paiwire.dm" @@ -884,7 +878,6 @@ #include "code\game\vehicles\spacepods\parts.dm" #include "code\game\vehicles\spacepods\pod_fabricator.dm" #include "code\game\vehicles\spacepods\spacepod.dm" -#include "code\game\verbs\atom_verbs.dm" #include "code\game\verbs\ooc.dm" #include "code\game\verbs\suicide.dm" #include "code\game\verbs\who.dm"