diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 0cf3cd72a23..735d355d864 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -5124,7 +5124,7 @@ "bUB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/genetics_cloning) "bUC" = (/obj/machinery/light,/obj/effect/decal/warning_stripes/arrow{icon_state = "4"; dir = 8},/obj/effect/decal/warning_stripes/yellow/partial{icon_state = "3"; dir = 8},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bUD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; initialize_directions = 10},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/genetics_cloning) -"bUE" = (/obj/machinery/optable{name = "Robotics Operating Table"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) +"bUE" = (/obj/machinery/optable{name = "Robotics Operating Table"},/obj/item/storage/firstaid/machine,/obj/item/storage/firstaid/machine,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) "bUF" = (/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) "bUG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j2s"; name = "Med. CMO"; sortType = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bUH" = (/obj/structure/closet/wardrobe/robotics_black,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) @@ -7633,7 +7633,7 @@ "cQO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/genetics) "cQP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/atmos) "cQQ" = (/obj/machinery/pipedispenser/disposal,/turf/simulated/floor/plasteel,/area/atmos) -"cQR" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/external{aiControlDisabled = 0; frequency = 1379; hackProof = 0; icon_state = "door_locked"; id_tag = "atmospherics_south_inner"; locked = 1; name = "Atmospherics External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/engine/engineering) +"cQR" = (/turf/simulated/wall/r_wall,/area/maintenance/storage) "cQS" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/equipmentstorage) "cQT" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/atmos/distribution) "cQU" = (/obj/machinery/light_switch{pixel_x = 27},/obj/structure/reagent_dispensers/watertank,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101; on = 1; pressure_checks = 1},/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor/plating,/area/storage/secure) @@ -7736,7 +7736,7 @@ "cSN" = (/obj/structure/chair/stool,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/warning_stripes/south,/turf/simulated/floor/plasteel,/area/engine/engineering) "cSO" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/stack/sheet/mineral/plasma{pixel_x = -2; pixel_y = -2},/obj/item/stack/sheet/mineral/plasma,/obj/item/stack/sheet/mineral/plasma{pixel_x = 2; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cSP" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cSQ" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/transit_tube/station,/obj/structure/transit_tube_pod{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/engineering) +"cSQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/storage) "cSR" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/unary/portables_connector,/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/portsolar) "cSS" = (/obj/machinery/optable{name = "Robotics Operating Table"},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/assembly_line) "cST" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/machinery/power/smes{charge = 0},/turf/simulated/floor/plating,/area/maintenance/portsolar) @@ -8143,8 +8143,8 @@ "daE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "ramptop"; tag = "icon-stage_stairs"},/area/escapepodbay) "daF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering/glass{name = "Engine Room"; req_access_txt = "10"; req_one_access_txt = null},/turf/simulated/floor/plasteel,/area/engine/engineering) "daG" = (/turf/simulated/floor/plating,/area/engine/engineering) -"daH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/engine/engineering) -"daI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/atmos) +"daH" = (/turf/simulated/floor/plating,/area/maintenance/storage) +"daI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/storage) "daJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/effect/decal/warning_stripes/southeastcorner,/turf/simulated/floor/plasteel,/area/engine/engineering) "daK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 0; pixel_y = -32; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/engine/engineering) "daL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) @@ -8191,7 +8191,7 @@ "dbA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/engine/engineering) "dbB" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engine/engineering) "dbC" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; name = "Singularity Blast Doors"; opacity = 0},/obj/machinery/door/airlock/engineering/glass{name = "Engine Room"; req_access_txt = "10"; req_one_access_txt = null},/turf/simulated/floor/plating,/area/engine/engineering) -"dbD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/engine/engineering) +"dbD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/storage) "dbE" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engine/engineering) "dbF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) "dbG" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plating,/area/engine/engineering) @@ -8230,9 +8230,9 @@ "dcn" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/turf/simulated/wall/r_wall,/area/engine/engineering) "dco" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central/ne) "dcp" = (/obj/machinery/porta_turret{dir = 1},/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) -"dcq" = (/obj/machinery/door/airlock/external{aiControlDisabled = 0; frequency = 1379; hackProof = 0; icon_state = "door_locked"; id_tag = "atmospherics_south_outer"; locked = 1; name = "Atmospherics External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/engine/engineering) +"dcq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/fungus,/turf/simulated/wall/r_wall,/area/maintenance/storage) "dcr" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 10},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel,/area/maintenance/turbine) -"dcs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/fungus,/turf/simulated/wall/r_wall,/area/engine/engineering) +"dcs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 4; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/storage) "dct" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plasteel,/area/atmos) "dcu" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel,/area/maintenance/turbine) "dcv" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) @@ -8283,7 +8283,7 @@ "ddo" = (/obj/structure/reagent_dispensers/watertank,/obj/item/extinguisher,/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/machinery/light/small,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel,/area/maintenance/turbine) "ddp" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/computer/turbine_computer{id = "incineratorturbine"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel,/area/maintenance/turbine) "ddq" = (/obj/machinery/hologram/holopad,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel,/area/maintenance/turbine) -"ddr" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/obj/machinery/door/airlock/external{name = "Engineering Escape Pod"; req_access = null; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engineering) +"ddr" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "10"; req_one_access_txt = null},/turf/simulated/floor/plating,/area/maintenance/storage) "dds" = (/obj/machinery/portable_atmospherics/pump,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/atmos) "ddt" = (/obj/machinery/atmospherics/binary/pump{dir = 0; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "ddu" = (/obj/structure/chair/stool,/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/obj/item/wrench,/obj/machinery/light/small{dir = 8},/obj/effect/decal/warning_stripes/southwest,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -8317,7 +8317,7 @@ "ddW" = (/turf/space,/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 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless/catwalk,/area/solar/starboard) "ddX" = (/turf/space,/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/catwalk,/area/solar/starboard) "ddY" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 8},/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/shuttle/pod_4) -"ddZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering) +"ddZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/storage) "dea" = (/obj/machinery/space_heater,/turf/simulated/floor/plasteel,/area/atmos) "deb" = (/turf/space,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1450; master_tag = "sci_maint"; name = "exterior access button"; pixel_x = 8; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk0"; icon_state = "catwalk0"},/area/space) "dec" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/plasteel,/area/atmos) @@ -8343,26 +8343,35 @@ "dew" = (/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "dex" = (/obj/structure/chair/office/light{dir = 1},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) "dey" = (/obj/structure/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"dez" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/storage) "deA" = (/obj/structure/chair/stool,/turf/simulated/floor/plasteel,/area/engine/engineering) "deB" = (/obj/structure/particle_accelerator/power_box,/turf/simulated/floor/plating,/area/engine/engineering) "deC" = (/obj/item/screwdriver,/turf/simulated/floor/plasteel,/area/engine/engineering) +"deD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/atmos) +"deE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/storage) "deF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; name = "Singularity Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/engineering) +"deG" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/atmos) "deH" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "deI" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple,/turf/simulated/floor/plasteel,/area/atmos) "deJ" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "deK" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) +"deL" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24"},/turf/simulated/floor/plating,/area/maintenance/storage) +"deM" = (/obj/structure/table,/obj/item/wrench,/obj/item/t_scanner,/obj/item/storage/belt/utility,/obj/item/storage/belt/utility,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/atmos) +"deN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/storage) "deO" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 6},/obj/machinery/power/apc{dir = 8; name = "west bump Engineering"; pixel_x = -24; shock_proof = 1},/turf/simulated/floor/plasteel,/area/atmos) -"deP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) +"deP" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/storage) "deQ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 6; initialize_directions = 6; level = 2},/turf/simulated/floor/plasteel,/area/atmos) "deR" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "N2 to Pure"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "deS" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/asmaint) "deT" = (/obj/structure/chair/stool,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/asmaint) "deU" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 9; tag = "icon-intact-y (NORTHWEST)"},/turf/simulated/floor/plasteel,/area/atmos) "deV" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "co2_in"; name = "Carbon Dioxide Supply Control"; output_tag = "co2_out"; sensors = list("co2_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 4},/area/atmos) +"deW" = (/obj/machinery/light/small{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating,/area/maintenance/storage) "deX" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "co2_sensor"},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "deY" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "deZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) "dfa" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"dfb" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/storage) "dfc" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "dfd" = (/turf/simulated/wall/r_wall,/area/maintenance/engi_shuttle) "dfe" = (/obj/machinery/pipedispenser/disposal,/turf/simulated/floor/plating,/area/storage/secure) @@ -8370,19 +8379,28 @@ "dfg" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) "dfh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/maintenance/asmaint2) "dfi" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"dfj" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "atmospherics_south_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "atmospherics_south_sensor"; pixel_x = -8; pixel_y = -30},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "atmospherics_south"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_airpump = "atmospherics_south_pump"; tag_chamber_sensor = "atmospherics_south_sensor"; tag_exterior_door = "atmospherics_south_outer"; tag_interior_door = "atmospherics_south_inner"},/turf/simulated/floor/plating,/area/maintenance/storage) "dfk" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/engine/engineering) +"dfl" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/external{aiControlDisabled = 0; frequency = 1379; hackProof = 0; icon_state = "door_locked"; id_tag = "atmospherics_south_inner"; locked = 1; name = "Atmospherics External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/storage) +"dfm" = (/obj/machinery/door/airlock/external{aiControlDisabled = 0; frequency = 1379; hackProof = 0; icon_state = "door_locked"; id_tag = "atmospherics_south_outer"; locked = 1; name = "Atmospherics External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/storage) +"dfn" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/access_button/airlock_interior{master_tag = "atmospherics_south"; pixel_x = 22; pixel_y = 10},/turf/simulated/floor/plating,/area/maintenance/storage) "dfo" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) +"dfp" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/maintenance/storage) "dfq" = (/obj/structure/particle_accelerator/particle_emitter/left,/turf/simulated/floor/plating,/area/engine/engineering) "dfr" = (/obj/structure/particle_accelerator/particle_emitter/center,/turf/simulated/floor/plating,/area/engine/engineering) "dfs" = (/obj/structure/particle_accelerator/particle_emitter/right,/turf/simulated/floor/plating,/area/engine/engineering) "dft" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/engine/engineering) +"dfu" = (/obj/machinery/camera{c_tag = "Mini Satellite Access"; dir = 4; network = list("SS13","MiniSat")},/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/maintenance/storage) "dfv" = (/obj/machinery/light/small{dir = 4},/obj/structure/closet/walllocker/emerglocker/north,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/engine/engineering) "dfw" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "engineering_west_pump"},/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor/plating,/area/engine/engineering) -"dfx" = (/obj/structure/table,/obj/item/wrench,/obj/item/t_scanner,/obj/item/storage/belt/utility,/obj/item/storage/belt/utility,/turf/simulated/floor/plasteel,/area/atmos) +"dfx" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/maintenance/storage) "dfy" = (/obj/structure/chair/stool,/turf/simulated/floor/plasteel,/area/atmos) "dfz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/wall/r_wall,/area/engine/engineering) +"dfA" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/transit_tube{dir = 4; icon_state = "Block"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/storage) "dfB" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{level = 2},/turf/simulated/floor/plasteel,/area/atmos) -"dfE" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/door/airlock/external{name = "Engineering Escape Pod"; req_access = null; req_access_txt = "24"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plating,/area/atmos) +"dfC" = (/obj/item/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/maintenance/storage) +"dfD" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube,/turf/simulated/floor/plating,/area/maintenance/storage) +"dfE" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/transit_tube/station,/obj/structure/transit_tube_pod{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/storage) "dfF" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; level = 2},/turf/simulated/floor/plasteel,/area/atmos) "dfG" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; level = 2},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "dfH" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; level = 2},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "O2 to Pure"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) @@ -8394,7 +8412,10 @@ "dfN" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/turf/simulated/floor/plasteel{dir = 6; icon_state = "caution"},/area/atmos) "dfO" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1441; icon_state = "on"; id = "co2_in"; on = 1; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "dfP" = (/obj/structure/table,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"dfQ" = (/obj/machinery/light_switch{name = "light switch "; dir = 2; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/plasteel{dir = 10; icon_state = "blue"},/area/maintenance/storage) +"dfR" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "MiniSat Access"; req_access_txt = "75"},/turf/simulated/floor/plasteel,/area/maintenance/storage) "dfS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/maintenance/asmaint2) +"dfT" = (/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/maintenance/storage) "dfU" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/structure/window/reinforced/tinted,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "dfV" = (/turf/simulated/floor/plating,/area/storage/secure) "dfW" = (/obj/docking_port/stationary{dir = 2; dwidth = 2; height = 18; id = "skipjack_sw"; name = "southwest of SS13"; width = 19},/turf/space,/area/space) @@ -8402,14 +8423,22 @@ "dfY" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/constructionsite) "dfZ" = (/obj/machinery/door/airlock/external{id_tag = "s_docking_airlock"; name = "Shuttle Hatch"; req_access_txt = "0"; req_one_access_txt = "10;24"},/obj/docking_port/mobile{dir = 2; dwidth = 3; height = 5; id = "engineering"; name = "engineering shuttle"; rebuildable = 1; roundstart_move = "engineering_away"; width = 7},/obj/docking_port/stationary{dir = 2; dwidth = 3; height = 5; id = "engineering_home"; name = "engineering dock"; width = 7},/turf/simulated/floor/plating,/area/shuttle/constructionsite) "dga" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/shuttle/constructionsite) +"dgb" = (/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/maintenance/storage) +"dgc" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/storage) +"dgd" = (/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/maintenance/storage) +"dge" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/maintenance/storage) +"dgf" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor/plating,/area/maintenance/storage) "dgg" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plasteel,/area/atmos) "dgh" = (/obj/machinery/atmospherics/unary/portables_connector,/turf/simulated/floor/plasteel,/area/atmos) +"dgi" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/storage) "dgj" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "dgk" = (/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint) "dgl" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "engineering_east_pump"},/turf/simulated/floor/plating,/area/engine/engineering) "dgm" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint) "dgn" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/maintenance/asmaint) "dgo" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/maintenance/asmaint) +"dgp" = (/obj/machinery/door/airlock/external{name = "Escape Pod"},/turf/simulated/floor/plating,/area/maintenance/storage) +"dgq" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/storage) "dgr" = (/obj/machinery/camera{c_tag = "Atmospherics South-West"; dir = 4; network = list("SS13")},/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor/plasteel,/area/atmos) "dgs" = (/obj/structure/table,/obj/item/radio{pixel_x = -6; pixel_y = 4},/obj/item/radio{pixel_x = 6; pixel_y = 4},/obj/item/radio,/turf/simulated/floor/plasteel,/area/atmos) "dgt" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8; initialize_directions = 11; level = 2},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) @@ -8425,6 +8454,7 @@ "dgD" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/area/shuttle/constructionsite) "dgE" = (/obj/machinery/power/grounding_rod{anchored = 1},/turf/simulated/floor/plating/airless,/area/space) "dgF" = (/turf/simulated/shuttle/wall{icon_state = "swall1"; dir = 2},/area/shuttle/constructionsite) +"dgG" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/storage) "dgJ" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating/airless,/area/space) "dgM" = (/obj/item/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 5},/turf/simulated/floor/plasteel,/area/atmos) "dgN" = (/obj/machinery/atmospherics/trinary/filter{density = 0; dir = 4; filter_type = 2; name = "Gas filter (N2 tank)"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) @@ -8447,7 +8477,6 @@ "dhj" = (/obj/machinery/door/airlock/atmos{name = "Turbine Access"; req_access_txt = "12;24"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/turbine) "dhk" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/toy/minimeteor,/obj/item/poster/random_contraband,/turf/simulated/floor/plating,/area/maintenance/asmaint) "dho" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Singularity North-West"; dir = 2; network = list("Singularity","SS13"); pixel_x = 20; pixel_y = 0},/obj/machinery/power/grounding_rod{anchored = 1},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"dhs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering) "dhv" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Singularity North-East"; dir = 2; network = list("Singularity","SS13")},/obj/machinery/power/grounding_rod{anchored = 1},/turf/simulated/floor/plating/airless,/area/engine/engineering) "dhx" = (/obj/machinery/light,/obj/machinery/atmospherics/binary/volume_pump/on{name = "Space Loop In"},/turf/simulated/floor/plasteel,/area/atmos) "dhz" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/closet/firecloset,/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 3; name = "Atmospherics Requests Console"; pixel_x = -30},/turf/simulated/floor/plasteel,/area/atmos) @@ -8538,7 +8567,6 @@ "djU" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_out_meter"; name = "Mixed Air Tank Out"},/turf/simulated/wall/r_wall,/area/atmos) "djX" = (/obj/structure/disposalpipe/segment,/obj/structure/closet,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "djY" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall,/area/maintenance/asmaint) -"djZ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering) "dka" = (/obj/machinery/door/airlock/engineering{name = "Aft Starboard Solar Access"; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "dkb" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/starboardsolar) "dkc" = (/obj/machinery/power/emitter,/obj/machinery/camera{c_tag = "Engineering Secure Storage South"; dir = 4; network = list("SS13")},/turf/simulated/floor/plating,/area/storage/secure) @@ -8624,11 +8652,9 @@ "dmb" = (/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "dmc" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/obj/item/clipboard,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/asmaint) "dmd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_xeno_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) -"dme" = (/obj/machinery/light/small{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating,/area/engine/engineering) "dmh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/public/glass{autoclose = 0; frequency = 1449; heat_proof = 1; icon_state = "door_locked"; id_tag = "gas_turbine_exterior"; locked = 1; name = "Turbine Exterior Airlock"; req_access_txt = "32"},/turf/simulated/floor/engine/insulated,/area/maintenance/turbine) "dmi" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall/r_wall/coated,/area/maintenance/asmaint) "dmj" = (/obj/item/radio,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"dmk" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plating,/area/engine/engineering) "dml" = (/obj/structure/disposalpipe/junction{tag = "icon-pipe-j2 (EAST)"; icon_state = "pipe-j2"; dir = 4},/obj/machinery/atmospherics/binary/pump{name = "Waste Out"; on = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) "dmm" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint) "dmn" = (/obj/effect/decal/warning_stripes/west,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -8639,7 +8665,6 @@ "dms" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_xeno_pump"; tag_exterior_door = "solar_xeno_outer"; frequency = 1379; id_tag = "solar_xeno_airlock"; tag_interior_door = "solar_xeno_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_xeno_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_xeno_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "solar_xeno_pump"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "dmt" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor/plating,/area/maintenance/asmaint) "dmu" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/maintenance/asmaint2) -"dmv" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "atmospherics_south_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "atmospherics_south_sensor"; pixel_x = -8; pixel_y = -30},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "atmospherics_south"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_airpump = "atmospherics_south_pump"; tag_chamber_sensor = "atmospherics_south_sensor"; tag_exterior_door = "atmospherics_south_outer"; tag_interior_door = "atmospherics_south_inner"},/turf/simulated/floor/plating,/area/engine/engineering) "dmy" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1; frequency = 1443; id = "air_in"},/turf/simulated/floor/engine/insulated,/area/maintenance/turbine) "dmz" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; on = 0; pressure_checks = 2; pump_direction = 0},/obj/structure/sign/vacuum{pixel_y = -30},/turf/simulated/floor/engine/insulated,/area/maintenance/turbine) "dmA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/igniter{icon_state = "igniter0"; id = "gasturbine"; on = 0},/turf/simulated/floor/engine/insulated,/area/maintenance/turbine) @@ -8649,13 +8674,9 @@ "dmE" = (/obj/machinery/door/poddoor{id_tag = "auxiliaryturbinevent"; name = "Auxiliary Turbine Vent"},/turf/simulated/floor/engine/insulated,/area/maintenance/turbine) "dmF" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/space,/area/space) "dmG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_xeno_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) -"dmL" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/access_button/airlock_interior{master_tag = "atmospherics_south"; pixel_x = 22; pixel_y = 10},/turf/simulated/floor/plating,/area/engine/engineering) "dmM" = (/obj/effect/decal/warning_stripes/northeast,/obj/structure/table/glass,/obj/item/wirerod,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "dmN" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless,/area/space) "dmO" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/structure/cable,/obj/machinery/power/compressor{comp_id = "incineratorturbine"; dir = 1},/turf/simulated/floor/engine/insulated,/area/maintenance/turbine) -"dmP" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/engine/engineering) -"dmQ" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engine/engineering) -"dmV" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube,/turf/simulated/floor/plating,/area/engine/engineering) "dmW" = (/obj/structure/transit_tube,/turf/space,/area/space) "dmX" = (/obj/structure/transit_tube{icon_state = "E-W-Pass"},/obj/structure/lattice,/turf/space,/area/space) "dmZ" = (/obj/structure/transit_tube,/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) @@ -8664,9 +8685,6 @@ "dnd" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1},/turf/simulated/floor/plating/airless,/area/space) "dne" = (/obj/structure/cable,/obj/machinery/power/turbine,/turf/simulated/floor/engine/insulated,/area/maintenance/turbine) "dng" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1},/turf/simulated/floor/plating/airless,/area/maintenance/asmaint) -"dnj" = (/obj/machinery/camera{c_tag = "Mini Satellite Access"; dir = 4; network = list("SS13","MiniSat")},/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/engine/engineering) -"dnk" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/transit_tube{dir = 4; icon_state = "Block"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/engineering) -"dnl" = (/obj/item/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/engine/engineering) "dnn" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "dno" = (/obj/structure/transit_tube{dir = 8; icon_state = "Block"},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "dnp" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/simulated/floor/plating/airless,/area/space) @@ -8674,23 +8692,14 @@ "dns" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engine/engineering) "dnv" = (/obj/effect/decal/warning_stripes/north,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "dnx" = (/obj/structure/sign/fire,/turf/simulated/wall/r_wall/coated,/area/maintenance/turbine) -"dnA" = (/obj/machinery/light_switch{name = "light switch "; dir = 2; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/plasteel{dir = 10; icon_state = "blue"},/area/engine/engineering) -"dnB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "MiniSat Access"; req_access_txt = "75"},/turf/simulated/floor/plasteel,/area/engine/engineering) -"dnC" = (/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/engine/engineering) -"dnD" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/engine/engineering) -"dnE" = (/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/engine/engineering) "dnF" = (/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "dnG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) -"dnH" = (/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/engine/engineering) "dnI" = (/obj/machinery/door/poddoor{id_tag = "turbinevent"; name = "Turbine Vent"},/turf/simulated/floor/engine/insulated,/area/maintenance/turbine) "dnJ" = (/obj/machinery/door/airlock/external{frequency = 1450; icon_state = "door_locked"; id_tag = "sci_inner"; locked = 1; name = "External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"dnK" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/engine/engineering) "dnP" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"dnS" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor/plating,/area/engine/engineering) "dnT" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "dnV" = (/obj/effect/spawner/window/reinforced,/obj/structure/sign/securearea{pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "dnW" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) -"dnX" = (/obj/machinery/door/airlock/external{name = "Escape Pod"},/turf/simulated/floor/plating,/area/engine/engineering) "dnZ" = (/turf/simulated/wall,/area/turret_protected/aisat_interior) "doa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "dob" = (/obj/machinery/light/small,/obj/item/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = -28},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) @@ -8717,7 +8726,6 @@ "doG" = (/obj/structure/cable,/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard) "doH" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "doI" = (/obj/structure/chair{dir = 4},/obj/item/radio/intercom{broadcasting = 0; listening = 1; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/shuttle/floor,/area/shuttle/pod_4) -"doJ" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/engine/engineering) "doK" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) "doL" = (/obj/docking_port/mobile/pod{dir = 4; id = "pod4"; name = "escape pod 4"},/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Escape Pod Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/pod_4) "doM" = (/obj/structure/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/pod_4) @@ -9079,36 +9087,36 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalwalwalvalwaabcNFcSkcNMaaacNFcSkcNMaaacNFcSkcNMaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabcRzcRAcRAcRAcRAcWkcWlcWmcNBcWncNBcNBcMvcWocNBcSUcWzcWycVjcHhcUicWscWtcWucWucHkcWDcWCcWFaYtaZBcHkcWBcWHcWJcWIcWLcWKcWPcWMcWScMicUGcWTcWUcWNcWOcWVcWWcWRcWYcWXcXbcXacXdcXccQpcSncXecWZcWZcQZcPxcBPcGIcsLcsLcHlchfchfchfcyPcyPchfchfchfchfcHZcIacsLchfctrcIccIbcIbcIbcIbcIbcIbcIbcIbcMjcXvcXtcXzcXxcNocXAcNocXAcNocXBcWwaaaaaaaaaaaaaabaabaaaaaaaaaaaabGHcFcbGHaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNFcSkcNMaabcNFcSkcNMaaacNFcSkcNMaaaaaaaaaaaaaabaaaaaaaaaaaaaabaabaabaaaaaaaabaabcXucXucXucXucXucXucXucXCcXucXucSUcXwcXDcVjcHhcUicXycUicUicXEcRRcXGcXFcUwcIdcIecRRcXLcRXcTecXMcXOcXNcWPcXPcXJaZCcXRcXQcXVcXScXRcXWcXYcXXcYacSdcXTcXUcYccYbaabcTocYfcIfcXZcQZcPxcBQcIgdfMdfMcIhcIichfcIkcIjcImcIlcIocInchfcsLcAvcsLchfctrcIqciYbQXcIrcIsciYcIucItcepcMIcMQcMJcNacMIcMQcNbcNccMIcMQcNlcBRaabaabaabaabaabaabaabaabaabaabbGHcFcbGHbGHbGHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvaabcNFcSkcNMaaacNFcSkcNMaaacNFcSkcNMaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabcXucYtcYtcYucYAcYBcYBcYDcYCcYCcYEcYGcYFcVjcHhcVjcYHcVjcVjcVjcRRcYLcIvcIxcIwcIycYIcYJcYQcYRcYMcYMcYMcYXcYUcYZaZHcZacYSbqmcQPcYTcZbcYVcYWcZccSdcXTcZdcZgcZecZhcSncZicWZcWZcQZcPxcBQckKcExchfcyJcJqcyPcJscImcJucJtcJvcsLcJwcYjcAvcTQchfctrcIqciYbQXcpEbQXciYcJzcIrcepcZqcZscZrcxNcZtcZycZvcxNcZzcZBcZAcBRaabaabaaaaaaaaaaaaaaaaaaaaaaaabGHcFcbGGbGGbGHaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvaabcNFcSkcNMaaacNFcSkcNMaabcNFcSkcNMaabaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacXucYtcYtcYucZucZucZucZCcZwcZxcSUcJBcJAcJDcJCcJFcJEcJHcZFcZFcZLcZOcZNcVjcVjcVjcZPcZRcZQcZMcJIcNXcNVdacdabcSUcZScZSdafbqmcQPcZUdagcZWcZXcZYcSdcZZdahdajdaidadcQZcQZcQZcQZcQZcPxcBQckKdaecsLcyJcJqchfcKvcKucKwcJtcKAcIjcKCcKBcKDcTQchfctrcIqcGLbQXcKEcKFciYcKGbQXcepcMkcJKcJKcxNcMkcJKcJKcxNcMkcJKcJKcBRaaaaabaabaaaaaaaaaaaaaaacuQcuQbGHdaucuQbGGbGHbGHbGHdoEdoEaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamhaabcNFcTRcNMaaacNFcTRcNMaaacNFcTRcNMaabalvaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabcXudaodapcZucZucZudaxdardardardardardardarcKHcKJcKIcKKdawdawdawdaFdaydaJdaAdaBdawdaydaKdaRcKLcNXcObdacdabdaGdaHdaIdaTdaUdaLdaMdaNcZcdaOdaPdaVdaYdaWcOkcXcdbacSndbcdbbdbbcQZcPxcBPckKchfcBNdaXcJqchfcKNcKMcJtcIjcJtcKScJtcJucJtcsLchfctrcIqciYbQXciYciYciYbQXbQXcepdbfcKZcJKcxNdbfcKZcJKcxNdbfcKZcJKcBRaaaaaaaabaabaaaaaaaaaaaacuQdbgbGGcFccuQdbhcuQdbibGHaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaalvaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcXudbjcZucZucZucZucZudardbtdblcOqcOtcOrdarcKUdbqdbrcHhcVjcVjdbsdbBdbydbEdbCdbGdbFdbzcSUdbAcKLcNXcPgdacdbJcSUdbDcZSdbKdbLcSddaMdaNdbNcSddaPdaVcXTcXUcPicYbdbIcTodbScLVdbWcQZcPxcBPckKchfdbMdbMcJqchfcLYcsLcLZcIjcMccMbcMecMdcJGcJvcyPctrcIqciYbQXbQXcMhciYbQXaqFcepdbRcJKcJKcxNdbRcJKcJKcxNdbRcJKcJKcBRaaaaaaaaaaabaabaaaaaaaaacuQbGGbGGcFccuQbGGbGGbGGbZZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalwalwalvalwalwamhalvalvalvalvalwalvalvalwdbTaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacXudbUcZwcZucZucZudbVdardblcPkcMOcMTcMScMVcMUcMYcMWcMZcVjdcmdcldchcPlcPEcPDcPWcPFdcndcwdbrcHhcWecPXcZMcQccSUdcscZSdctdcLcSddaMdaNcZccSddcvdaVcXTdcOcQecZedcScSndcTdbbdbbcQZcPxcBQckKcTUcuccABcJqchfchfcNdcNecDncNfcNfcNgchfchfchfchfctrcIqciYbQXcNhcKFciYcepcepcepcBRcBRcBRcBRcBRcBRcBRcBRcBRcBRcBRcBRaaaaaaaaaaaaaabaabaaaaaabGHbGHbGHcFccuQdcJdcKbGGbZZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcXucXucXudcUdcMdcMdcMdardcNcQjdcPdcPdcQdcWdawcNidcXcNkcNjcNjcNWcQVcQFcOaddbcOccQGcQVcOdcOfcOecOhcOgcOicQHddrdbDcZSddmddscSddaMcSdddtcSddaPdaVcXTcXUddxcYbdbIcQZcQZcQZcQZcQZcPxcBQcOjcYlcuccTBcOScOPcOVcOPcOXcsLcsLcsLcsLczfchfcPacPecPbcPfcGLbQXcFvcepcepaaaaaaddFaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaabaaabGHcJQddBddKcuQddJddIbGGbZZaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddLcXucZucZucZudcMaabaabdarddGcQJdcPdcPcQUdarcRgcRwcRrcSvcStcSNcSxcSUcUBcQbddScVjcVccSUcVpcVqcVqcSvcSvcVucVrcSUddZcZSdeadehcSddaMcSdcZUdagdecdeidaYdejdekcXcdelcSndendemdemcQZcPxcBQcsLckKchfchfcPdchfchfcsLcQlcyJcyJcyJcsLcQucGvcQOcQXcQWcDocepcepcepcepaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaabaabbGHdbgcAScaccuQcuQcuQbGGbGHaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcXucZucZucZudcMaabaaadardescQJdcPdcPcVvdardeucQYcSUdeFcRbcRbcRfcSUcVwdeAdeBdeCcVycSUcRbcRbcRbdeFcSUcRhdeucSUdbDcZSdeOdePdeHdeIdeJdeKdeQdeRcXbdeUcXUdeVcYbdbIcTodeXcRideYcQZcPxcBPcBPckKcprdeScRjdeTchfcsLdfadeZdffcRkcRmcRlchfciYciYcRncepcepaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabGHbGHbGHbGHbGHdfhcaccuQdfidfcbGGbGHaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacXucXudcMdcUdfdaaaaaadardfecVzdcPdcPcVAdardfwcRodfzdfkcRpcRqcRpdfocVBdfqdfrdfscQHdfocRpcRpcRpdftdfzcRsdfvcSUdbDdfEdaMdfxdfydeQdfFdfGdfBdfIdfHdfKdfJdfNcZedcScSndfOdemdemcQZcPxcBPcsLcOjcSfcScdfgcsKchfdgmcTBcsLcYidfLcsLcYicBNchfcSgcFcbGHaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabGHbGGbGGbGGcJQdfSdfUcuQdfPbGGbGGbGHaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfXdfYdfYdfZdfYdfYdgadardfVcQjdcPdcPcVCdardaGcSicSUcSUdfodfodfodfocVGcVScVNcSvcVTdfodfodfodfocSUcSUcSydglcSUdbDcZSdgrdgsdfydggdghcSdcSddgtcXWdggcXUdgjcYbdbIcQZcQZcQZcQZcQZcPxcBPcTBcsLdgkdgCcsLdgmchfchfdgnchfdgocpscJGcYichfchfcuQcFcbGHaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaabGHbGHcuQdgAdgycJQdfScacbGGbGGbGGdgBbGHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgDdgudgvdgwdgvdgxdgFdardgzcVWcMMdcPcVXdarcSUcSzcSUdgJafOdgEdfodfodfodfocSAdfodfodfodfodgEafOdgJcSUcSBcSUcSUdbDcZSdgMdeHdgNdgPdgOdgRdgQdgPdgQdgPdgVdeQdgWdbIdmodmodmodmodmocPxdgSdgTdgTdgUdhjdgTdgTdgTdhkdgXdgYdgodgZchfdgochfdhacuQcFcbGHbZZbZZbZZbGHbZZbZZbZZbZZbGHbZZbZZbZZbZZbGHbGHbGHbGHbGHbGHbGHbGHbGHbGHcMsbGHcJQcuQcTSbGGcQwdfScaccuQcuQdbhcuQbGHaabdhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgDdgudgvdgwdgwdhdbJMdardhfcVYdcPdcPcVZdarcSCcSDdhoafOcSEcSFcSFcSFcSFcSFcSIcSFcSFcSFcSFcSFcSMafOdhvcTscTmcSUdhsdaIdhzdhBdhAdhCdhxdhEdhDdhFcSddhHdhGdhJdhIdbIdmoaaaaabaabaaadhMdhLcTVcTXcUCcVkcVHcWxdgTdhYcsLcsLdhPcpsdhQcYicTUcsLcEGdhZdiadiadiadiadiadiadiadiadiadiadiadiadiadiadiediadiadiadiaczLcuQbPAcAUbGGdiccMscuQcuQcuQdbhcuQdfScaccuQdidbGGbGGbGHaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgDdgudgvdhWdgvdhXdifdardfVcQjdcPdcPcWadarcTtdibdibaaacTxafOafOafOafOafOafOafOafOafOafOafOcTxaaadibdibcTtcSUdaGcZSdhIdikdijdipdioditdhIdipdhIcYbdhIcYbdhIdbIdmoaaaalwalwdiudhLcXmcYgcYydavdcrdcudcxdgTcsLcsLchfdgodiqchfcYicXrdfMdhRdizdiAdiAdiAdiAdiAdiAdiCdiBdiAdiAdiAdiAdiAdiAdiEdiDcTTdiFdiJdiIdiLdiLdiLdiLdiNdiMdiOdiLdiLdiLdiLdiQcjYcuQdfcbGGdiHbGHaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiSdfYdfYdfYdfYdfYdiTdardiKcWbdcPdcPcWcdarcTycTzdiPaabcTxafOdjqaaaaaaaaaaaadjqaaaaaadjqafOcTxaabdiRcTCcTAcSUdaGcSUaabdiUaabdiVdiWdiXdiYdiZdiYdjadiYdjadjbdjcdmoaaaalwaabdjddgSdcydczdcAdcFdcHdcIdcRdgTdjlcsLcsLcYidjmchfcYicYidjzbGHbGHbZZbZZbZZbZZbGHbZZbZZbZZbZZbGHbZZbZZbZZbZZbGHdjobGGcuQcTLbGGcuQcuQbZZbZZcxScuQdjAbGGdjAcuQdjCcacdjrbGHbGHbGHbGHbGHaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadardjscWbdcPdcPcWddarcTtdibdjvaaacTDcTEaaaaaaaaaaaaaaadjyaaaaaaaaacUlcTFaaadibdibcTtcSUdaGcSUcQZdjBcTodjBcQZdjBcTodjBcQZdjScTodjUcQZaabdmoaaaalwaabdjEdgSdcVdczddaddcdcHdddddedjKdirdjYdjMcYicpscsLdjNdgochfcBPaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabGHdjXcLhcuQdjPbGGcuQaaaaaaaaaaaacuQbGGbGGdbgdjQdjQdkadkbdjQaaaaabaabaabaabdjTaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadardkccQjdcPdcPcWadarcUncTmdibaaacTxafOaaaaaaaabaabaabaabaabaaaaaaafOcTxaaadibcSCcUocSUdjZcSUcQZdkidkhdkkcQZdkqdkpdkscQZdkwdkudkxcQZaabdmoaaaalwaaadjEdkjddfddgddhddiddjddkddldgTdkrdgochfdgodkGchfdktdgocBNcBPcBQcBQcBQdmoaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabGHdkFcuQcuQcQCbGGcuQcuQbZZbZZcuQcuQbGGdkvcLhdjQdkIdkHdkMdjQaaaaaaaabaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafOdardardardardardardarcSUcTtdibaaacTxafOdjqaabaabdkzdkAdkBaabdkCaaaafOcTxaaadibcTtcSUcSUdaGcSUcQZdkObbMdkOcQZdkTbbOdkTcQZdkVbdGdkVcQZaabdmoaaaalwaaadjddgSddnddoddpddqddvddyddzdgTdkPdkQdkZdkSdlacsLcYicYidlbdlddlccsLdlhdmoaaaaabaaabZZbZZbZZbGHbGHbGHbGHbGHbGHdlicJQcuQdljbGGbGGcuQbGGbGGbGGbGGcTSbGGdfPdjQdlodlkdlqdjQaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabafOaabafOafOaabaabaabalwalwcSUcSUcUpdibaaacTDcTEaaaaaaaabdledlfdlgaabaaaaaacUlcTFaaadibcUqcSUcSUdaGcSUcQZdkOdlvdkOcQZdkTdlwdkTcQZdkVdlxdkVcQZaabdmoaaaalwaaadjddgSdgSdgSdlldlmdlndlydlndlmdkPdlpcsLdlAdlrdfMddHcYidlscBPcBQcBQcBQddAaabaabaaabZZdlBdlCcuQbGGdlDdlJdbgcuQdlPbGGcuQdlzbGGbGGdlLbGGbGHbGHbGHbZZbZZbGHdjQdlSdlRdlUdjQaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaabaaaaaaaabaabalwcSUcSUcTtdibaaacTxafOaaadlEaabdlFdlGdlHaabaabdjqafOcTxaaadibcTtcSUcSUdaGcSUcQZcQZcQZcQZcQZcQZcQZcQZcQZcQZcQZcQZcQZaabdmoaaaayiaaadjdaaaaaaaaadlIdlmdlVdlXdlWdlmcsLdlMcsLcsLdlNdlOcXrdmcdlQcBPaaaaaaaaaaaaaaaaabaaabZZdlZdmbdlLbGGdgybGGbGGdlLdjobGGcuQcuQcuQcuQcuQbGGbGHaabaaaaaaaaaaabdlTdlTdmddlTdlTaabaabdhcaabaabdjTaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabcSUcSCcUodibaaacTxafOaaaaaaaabaabaabaabaabaaaaaaafOcTxaaadibcUncTmcSUdmecSUcSUcSUcSUddCdmodmodmodmodmodmodmodmodmodmodmoaabaabaabdjEaaaaaaaaadlYdlmdlndmhdlndlmdmadmidfMdfMdmldmrdmmcBPcBPcBPaaaaaaaaaaaaaaaaabaaabZZdlBdmncuQdbgbGGbGGdmpcuQdmqbGGbGGbGGbGGbGGbGGbGGbGHaabaaaaaaaaaaabaaadlTdmsdlTaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaabcSUcTtdibdmjaaacTDcTEaaaaaaaaaaabaaaaaaaaaaaaaaacUlcTFaaadibdibcTtcSUdmkcQRdmvdaGdcqdmoaabaabaabaabaabaabaabdmoaabaabaabaabaabaabdjEaabaabaabdlYdlmdmydmAdmzdmEaabdmacBPcBQdmtcBQcBPcBPaaaaabaaaaaaaaaaaaaaaaabaabbZZbZZbZZbGHbGHbGHbGGcuQbGHdmubGHbGHdbgbPAcLhbKlcMsbGHaabaaaaaaaaaaabaaadlTdmGdlTaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcSUcUDdbudiPaabcTxafOdjqaaaaaadjqaaaaaaaaaaaadjqafOcTxaaadiRdbQcUEcSUdmLcSUcSUcSUcSUcSUcSUaaaaaaaabaaaaaaaaadmoaaaaaadmBdmBdmBdmBdmCaaaaaaaabdlYdmDdlmdmOdlmdlmaaaaabaaaaaadmFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaabGHdmbdmMbGHdmNaabbGHbGHbZZbZZcMsbGHaaaaabaaaaaaaaaaabaaaaaaddDaaaaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSUcUFcUIcUHaaacTxafOafOdcfafOafOdcfafOafOdcfafOafOcTxaaacUJcUIcUKcSUdmPdmQdnjdnldnkcSQdmVdmWdmWdmXdmWdmWdmWddEdmWdmWdmZdnadnbdnodmCaaaaaaaabdnddmodlmdnedlmddMaabaabaaaaaadngaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaabpaaaaaabGHdnqdnnbGHdnpaabaaaaabaaaaaaaabaaaaaaaabaaaaaaaaaaabaaaaaaddNaaaaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnscSUcSUcULaaacUMcSFcSFcUOcSFcSFcUOcSFcSFcUOcSFcSFcUQaaacULcSUcSUcSUdmPdnBdnAdnEdnCdnHdfoaaaaaaaabaaaaaaaaadmodmBdmBdmBbfmbJNdnvdmCaaaaaaaabaabdmodnxdnIdnxdmoaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaabZZdnJbZZbZZaabdhcaaaaabaaaaaaaabaaaamWamWalwayiaabaabaabaabddNaabaabaabaabdhcamhamWamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcSUcYXcURcUHaabaabaabaabaaaaaaaaaaaaaaaaabaabaabaabcUJcUUcYXcSUcSUdnDcSUcSUcSUcSUdfocSUaabaabaabaabaabaabddObfubjbbhybkJdnGdnFdmCaaaaaaaaaaabdmoaaaaaaaaadmoaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaabZZdnPbZZaaaaaaaaaaaaaabaaaaaaaabaaaamWaaaaaaaabaaaaabaaaaaaddPaaaaaaaabaaaaabaaaaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaacSUcSUcURcVacVacVacVacVacVacVacVacVacVacVacVacVacUUcSUcSUcSUdnKdnScSUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddQdnTdnWdnVdobdoadofdoeaaaaaaaaaaabdmodmodmodmodmoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaabZZdogbZZaaaaaaaaaaaaaabaaaaaaaabaaaamWaaadohdohdohdohdohaabcTWaabdohdohdohdohdohaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUaaacSUcSUdnXcSUcSUcSUcSUaaaaaaaaaaaaaaaaaaaaaaaacPxdnZdnZdnZdnZdojdokdocdoddolaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaabZZdombZZaaaaaaaaaaaaaaaaaaaaaaabaaaamWaabddRddTddTddTddTddUcTWddVddWddWddWddWddXaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSUdaGdaGddYdoudoudowaaaaaaaaaaaaaaaaaaaaaaaadjdaaadnZdnZdoydoxdoAdnZdnZdnZdnZdnZaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabdebdoEdoEaaaaaaaaaaaaaaaaaaaaaaabaaaamWaabdoGdoGdoGdoGdoGaaacTWaaadoGdoGdoGdoGdoGaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSUdjZdaGdoLdoIdoMdozaaaaaaaaaaaaaaaaaaaaaaaadjdaaadnZdoNdoOdoCdoDdoQdoSdoRdoHdnZaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaaaamWaaaaabaaaaabaabaabaaacTWaaaaabaaaaabaaaaabaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSUdoJdaGdeddoudoudoVaaaaaaaaaaaaaaaaaaaaaaaadjdaaadnZdoWdoYdoXdoPdoZdpcdpadpgdnZaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaamWaaadohdohdohdohdohaabcTWaabdohdohdohdohdohaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnscSUcSUcSUcSUcSUcSUaaaaaaaaaaaaaaaaaaaabaabdjEaabdnZdphdpjdpidpndpkdpsdprdpbdnZaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamWaabddRddTddTddTddTddUcTWddVddWddWddWddWdeeaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvaabcNFcSkcNMaaacNFcSkcNMaabcNFcSkcNMaabaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacXucYtcYtcYucZucZucZucZCcZwcZxcSUcJBcJAcJDcJCcJFcJEcJHcZFcZFcZLcZOcZNcVjcVjcVjcZPcZRcZQcZMcJIcNXcNVdacdabcQRcQRcQRdafbqmcQPcZUdagcZWcZXcZYcSdcZZdahdajdaidadcQZcQZcQZcQZcQZcPxcBQckKdaecsLcyJcJqchfcKvcKucKwcJtcKAcIjcKCcKBcKDcTQchfctrcIqcGLbQXcKEcKFciYcKGbQXcepcMkcJKcJKcxNcMkcJKcJKcxNcMkcJKcJKcBRaaaaabaabaaaaaaaaaaaaaaacuQcuQbGHdaucuQbGGbGHbGHbGHdoEdoEaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamhaabcNFcTRcNMaaacNFcTRcNMaaacNFcTRcNMaabalvaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabcXudaodapcZucZucZudaxdardardardardardardarcKHcKJcKIcKKdawdawdawdaFdaydaJdaAdaBdawdaydaKdaRcKLcNXcObdacdabdaHcSQdaIdaTdaUdaLdaMdaNcZcdaOdaPdaVdaYdaWcOkcXcdbacSndbcdbbdbbcQZcPxcBPckKchfcBNdaXcJqchfcKNcKMcJtcIjcJtcKScJtcJucJtcsLchfctrcIqciYbQXciYciYciYbQXbQXcepdbfcKZcJKcxNdbfcKZcJKcxNdbfcKZcJKcBRaaaaaaaabaabaaaaaaaaaaaacuQdbgbGGcFccuQdbhcuQdbibGHaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaalvaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcXudbjcZucZucZucZucZudardbtdblcOqcOtcOrdarcKUdbqdbrcHhcVjcVjdbsdbBdbydbEdbCdbGdbFdbzcSUdbAcKLcNXcPgdacdbJcQRdbDcQRdbKdbLcSddaMdaNdbNcSddaPdaVcXTcXUcPicYbdbIcTodbScLVdbWcQZcPxcBPckKchfdbMdbMcJqchfcLYcsLcLZcIjcMccMbcMecMdcJGcJvcyPctrcIqciYbQXbQXcMhciYbQXaqFcepdbRcJKcJKcxNdbRcJKcJKcxNdbRcJKcJKcBRaaaaaaaaaaabaabaaaaaaaaacuQbGGbGGcFccuQbGGbGGbGGbZZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalwalwalvalwalwamhalvalvalvalvalwalvalvalwdbTaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacXudbUcZwcZucZucZudbVdardblcPkcMOcMTcMScMVcMUcMYcMWcMZcVjdcmdcldchcPlcPEcPDcPWcPFdcndcwdbrcHhcWecPXcZMcQccQRdcqcQRdctdcLcSddaMdaNcZccSddcvdaVcXTdcOcQecZedcScSndcTdbbdbbcQZcPxcBQckKcTUcuccABcJqchfchfcNdcNecDncNfcNfcNgchfchfchfchfctrcIqciYbQXcNhcKFciYcepcepcepcBRcBRcBRcBRcBRcBRcBRcBRcBRcBRcBRcBRaaaaaaaaaaaaaabaabaaaaaabGHbGHbGHcFccuQdcJdcKbGGbZZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcXucXucXudcUdcMdcMdcMdardcNcQjdcPdcPdcQdcWdawcNidcXcNkcNjcNjcNWcQVcQFcOaddbcOccQGcQVcOdcOfcOecOhcOgcOicQHddrdcscQRddmddscSddaMcSdddtcSddaPdaVcXTcXUddxcYbdbIcQZcQZcQZcQZcQZcPxcBQcOjcYlcuccTBcOScOPcOVcOPcOXcsLcsLcsLcsLczfchfcPacPecPbcPfcGLbQXcFvcepcepaaaaaaddFaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaabaaabGHcJQddBddKcuQddJddIbGGbZZaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddLcXucZucZucZudcMaabaabdarddGcQJdcPdcPcQUdarcRgcRwcRrcSvcStcSNcSxcSUcUBcQbddScVjcVccSUcVpcVqcVqcSvcSvcVucVrcQRddZcQRdeadehcSddaMcSdcZUdagdecdeidaYdejdekcXcdelcSndendemdemcQZcPxcBQcsLckKchfchfcPdchfchfcsLcQlcyJcyJcyJcsLcQucGvcQOcQXcQWcDocepcepcepcepaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaabaabbGHdbgcAScaccuQcuQcuQbGGbGHaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcXucZucZucZudcMaabaaadardescQJdcPdcPcVvdardeucQYcSUdeFcRbcRbcRfcSUcVwdeAdeBdeCcVycSUcRbcRbcRbdeFcSUcRhdeucQRdezcQRdeOdeDdeHdeIdeJdeKdeQdeRcXbdeUcXUdeVcYbdbIcTodeXcRideYcQZcPxcBPcBPckKcprdeScRjdeTchfcsLdfadeZdffcRkcRmcRlchfciYciYcRncepcepaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabGHbGHbGHbGHbGHdfhcaccuQdfidfcbGGbGHaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacXucXudcMdcUdfdaaaaaadardfecVzdcPdcPcVAdardfwcRodfzdfkcRpcRqcRpdfocVBdfqdfrdfscQHdfocRpcRpcRpdftdfzcRsdfvcQRdeEdeLdeGdeMdfydeQdfFdfGdfBdfIdfHdfKdfJdfNcZedcScSndfOdemdemcQZcPxcBPcsLcOjcSfcScdfgcsKchfdgmcTBcsLcYidfLcsLcYicBNchfcSgcFcbGHaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabGHbGGbGGbGGcJQdfSdfUcuQdfPbGGbGGbGHaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfXdfYdfYdfZdfYdfYdgadardfVcQjdcPdcPcVCdardaGcSicSUcSUdfodfodfodfocVGcVScVNcSvcVTdfodfodfodfocSUcSUcSydglcQRdbDcQRdgrdgsdfydggdghcSdcSddgtcXWdggcXUdgjcYbdbIcQZcQZcQZcQZcQZcPxcBPcTBcsLdgkdgCcsLdgmchfchfdgnchfdgocpscJGcYichfchfcuQcFcbGHaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaabGHbGHcuQdgAdgycJQdfScacbGGbGGbGGdgBbGHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgDdgudgvdgwdgvdgxdgFdardgzcVWcMMdcPcVXdarcSUcSzcSUdgJafOdgEdfodfodfodfocSAdfodfodfodfodgEafOdgJcSUcSBcSUcQRdbDcQRdgMdeHdgNdgPdgOdgRdgQdgPdgQdgPdgVdeQdgWdbIdmodmodmodmodmocPxdgSdgTdgTdgUdhjdgTdgTdgTdhkdgXdgYdgodgZchfdgochfdhacuQcFcbGHbZZbZZbZZbGHbZZbZZbZZbZZbGHbZZbZZbZZbZZbGHbGHbGHbGHbGHbGHbGHbGHbGHbGHcMsbGHcJQcuQcTSbGGcQwdfScaccuQcuQdbhcuQbGHaabdhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgDdgudgvdgwdgwdhdbJMdardhfcVYdcPdcPcVZdarcSCcSDdhoafOcSEcSFcSFcSFcSFcSFcSIcSFcSFcSFcSFcSFcSMafOdhvcTscTmcQRdeNdaIdhzdhBdhAdhCdhxdhEdhDdhFcSddhHdhGdhJdhIdbIdmoaaaaabaabaaadhMdhLcTVcTXcUCcVkcVHcWxdgTdhYcsLcsLdhPcpsdhQcYicTUcsLcEGdhZdiadiadiadiadiadiadiadiadiadiadiadiadiadiadiediadiadiadiaczLcuQbPAcAUbGGdiccMscuQcuQcuQdbhcuQdfScaccuQdidbGGbGGbGHaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgDdgudgvdhWdgvdhXdifdardfVcQjdcPdcPcWadarcTtdibdibaaacTxafOafOafOafOafOafOafOafOafOafOafOcTxaaadibdibcTtcQRdaHcQRdhIdikdijdipdioditdhIdipdhIcYbdhIcYbdhIdbIdmoaaaalwalwdiudhLcXmcYgcYydavdcrdcudcxdgTcsLcsLchfdgodiqchfcYicXrdfMdhRdizdiAdiAdiAdiAdiAdiAdiCdiBdiAdiAdiAdiAdiAdiAdiEdiDcTTdiFdiJdiIdiLdiLdiLdiLdiNdiMdiOdiLdiLdiLdiLdiQcjYcuQdfcbGGdiHbGHaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiSdfYdfYdfYdfYdfYdiTdardiKcWbdcPdcPcWcdarcTycTzdiPaabcTxafOdjqaaaaaaaaaaaadjqaaaaaadjqafOcTxaabdiRcTCcTAcQRdaHcQRaabdiUaabdiVdiWdiXdiYdiZdiYdjadiYdjadjbdjcdmoaaaalwaabdjddgSdcydczdcAdcFdcHdcIdcRdgTdjlcsLcsLcYidjmchfcYicYidjzbGHbGHbZZbZZbZZbZZbGHbZZbZZbZZbZZbGHbZZbZZbZZbZZbGHdjobGGcuQcTLbGGcuQcuQbZZbZZcxScuQdjAbGGdjAcuQdjCcacdjrbGHbGHbGHbGHbGHaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadardjscWbdcPdcPcWddarcTtdibdjvaaacTDcTEaaaaaaaaaaaaaaadjyaaaaaaaaacUlcTFaaadibdibcTtcQRdaHcQRcQZdjBcTodjBcQZdjBcTodjBcQZdjScTodjUcQZaabdmoaaaalwaabdjEdgSdcVdczddaddcdcHdddddedjKdirdjYdjMcYicpscsLdjNdgochfcBPaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabGHdjXcLhcuQdjPbGGcuQaaaaaaaaaaaacuQbGGbGGdbgdjQdjQdkadkbdjQaaaaabaabaabaabdjTaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadardkccQjdcPdcPcWadarcUncTmdibaaacTxafOaaaaaaaabaabaabaabaabaaaaaaafOcTxaaadibcSCcUocQRdePcQRcQZdkidkhdkkcQZdkqdkpdkscQZdkwdkudkxcQZaabdmoaaaalwaaadjEdkjddfddgddhddiddjddkddldgTdkrdgochfdgodkGchfdktdgocBNcBPcBQcBQcBQdmoaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabGHdkFcuQcuQcQCbGGcuQcuQbZZbZZcuQcuQbGGdkvcLhdjQdkIdkHdkMdjQaaaaaaaabaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafOdardardardardardardarcSUcTtdibaaacTxafOdjqaabaabdkzdkAdkBaabdkCaaaafOcTxaaadibcTtcSUcQRdaHcQRcQZdkObbMdkOcQZdkTbbOdkTcQZdkVbdGdkVcQZaabdmoaaaalwaaadjddgSddnddoddpddqddvddyddzdgTdkPdkQdkZdkSdlacsLcYicYidlbdlddlccsLdlhdmoaaaaabaaabZZbZZbZZbGHbGHbGHbGHbGHbGHdlicJQcuQdljbGGbGGcuQbGGbGGbGGbGGcTSbGGdfPdjQdlodlkdlqdjQaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabafOaabafOafOaabaabaabalwalwcSUcSUcUpdibaaacTDcTEaaaaaaaabdledlfdlgaabaaaaaacUlcTFaaadibcUqcSUcQRdaHcQRcQZdkOdlvdkOcQZdkTdlwdkTcQZdkVdlxdkVcQZaabdmoaaaalwaaadjddgSdgSdgSdlldlmdlndlydlndlmdkPdlpcsLdlAdlrdfMddHcYidlscBPcBQcBQcBQddAaabaabaaabZZdlBdlCcuQbGGdlDdlJdbgcuQdlPbGGcuQdlzbGGbGGdlLbGGbGHbGHbGHbZZbZZbGHdjQdlSdlRdlUdjQaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaabaaaaaaaabaabalwcSUcSUcTtdibaaacTxafOaaadlEaabdlFdlGdlHaabaabdjqafOcTxaaadibcTtcSUcQRdaHcQRcQZcQZcQZcQZcQZcQZcQZcQZcQZcQZcQZcQZcQZaabdmoaaaayiaaadjdaaaaaaaaadlIdlmdlVdlXdlWdlmcsLdlMcsLcsLdlNdlOcXrdmcdlQcBPaaaaaaaaaaaaaaaaabaaabZZdlZdmbdlLbGGdgybGGbGGdlLdjobGGcuQcuQcuQcuQcuQbGGbGHaabaaaaaaaaaaabdlTdlTdmddlTdlTaabaabdhcaabaabdjTaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabcSUcSCcUodibaaacTxafOaaaaaaaabaabaabaabaabaaaaaaafOcTxaaadibcUncTmcQRdeWcQRcQRcQRcQRddCdmodmodmodmodmodmodmodmodmodmodmoaabaabaabdjEaaaaaaaaadlYdlmdlndmhdlndlmdmadmidfMdfMdmldmrdmmcBPcBPcBPaaaaaaaaaaaaaaaaabaaabZZdlBdmncuQdbgbGGbGGdmpcuQdmqbGGbGGbGGbGGbGGbGGbGGbGHaabaaaaaaaaaaabaaadlTdmsdlTaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaabcSUcTtdibdmjaaacTDcTEaaaaaaaaaaabaaaaaaaaaaaaaaacUlcTFaaadibdibcTtcQRdfbdfldfjdaHdfmdmoaabaabaabaabaabaabaabdmoaabaabaabaabaabaabdjEaabaabaabdlYdlmdmydmAdmzdmEaabdmacBPcBQdmtcBQcBPcBPaaaaabaaaaaaaaaaaaaaaaabaabbZZbZZbZZbGHbGHbGHbGGcuQbGHdmubGHbGHdbgbPAcLhbKlcMsbGHaabaaaaaaaaaaabaaadlTdmGdlTaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcSUcUDdbudiPaabcTxafOdjqaaaaaadjqaaaaaaaaaaaadjqafOcTxaaadiRdbQcUEcQRdfncQRcQRcQRcQRcQRcQRaaaaaaaabaaaaaaaaadmoaaaaaadmBdmBdmBdmBdmCaaaaaaaabdlYdmDdlmdmOdlmdlmaaaaabaaaaaadmFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaabGHdmbdmMbGHdmNaabbGHbGHbZZbZZcMsbGHaaaaabaaaaaaaaaaabaaaaaaddDaaaaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSUcUFcUIcUHaaacTxafOafOdcfafOafOdcfafOafOdcfafOafOcTxaaacUJcUIcUKcQRdfpdfxdfudfCdfAdfEdfDdmWdmWdmXdmWdmWdmWddEdmWdmWdmZdnadnbdnodmCaaaaaaaabdnddmodlmdnedlmddMaabaabaaaaaadngaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaabpaaaaaabGHdnqdnnbGHdnpaabaaaaabaaaaaaaabaaaaaaaabaaaaaaaaaaabaaaaaaddNaaaaaaaabaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnscSUcSUcULaaacUMcSFcSFcUOcSFcSFcUOcSFcSFcUOcSFcSFcUQaaacULcSUcSUcQRdfpdfRdfQdgbdfTdgddgcaaaaaaaabaaaaaaaaadmodmBdmBdmBbfmbJNdnvdmCaaaaaaaabaabdmodnxdnIdnxdmoaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaabZZdnJbZZbZZaabdhcaaaaabaaaaaaaabaaaamWamWalwayiaabaabaabaabddNaabaabaabaabdhcamhamWamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcSUcYXcURcUHaabaabaabaabaaaaaaaaaaaaaaaaabaabaabaabcUJcUUcYXcSUcQRdgecQRcQRcQRcQRdgccQRaabaabaabaabaabaabddObfubjbbhybkJdnGdnFdmCaaaaaaaaaaabdmoaaaaaaaaadmoaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaabZZdnPbZZaaaaaaaaaaaaaabaaaaaaaabaaaamWaaaaaaaabaaaaabaaaaaaddPaaaaaaaabaaaaabaaaaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaacSUcSUcURcVacVacVacVacVacVacVacVacVacVacVacVacVacUUcSUcSUcSUdgidgfcQRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddQdnTdnWdnVdobdoadofdoeaaaaaaaaaaabdmodmodmodmodmoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaabZZdogbZZaaaaaaaaaaaaaabaaaaaaaabaaaamWaaadohdohdohdohdohaabcTWaabdohdohdohdohdohaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUcSUaaacQRcQRdgpcQRcQRcQRcQRaaaaaaaaaaaaaaaaaaaaaaaacPxdnZdnZdnZdnZdojdokdocdoddolaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaabZZdombZZaaaaaaaaaaaaaaaaaaaaaaabaaaamWaabddRddTddTddTddTddUcTWddVddWddWddWddWddXaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQRdaHdaHddYdoudoudowaaaaaaaaaaaaaaaaaaaaaaaadjdaaadnZdnZdoydoxdoAdnZdnZdnZdnZdnZaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabdebdoEdoEaaaaaaaaaaaaaaaaaaaaaaabaaaamWaabdoGdoGdoGdoGdoGaaacTWaaadoGdoGdoGdoGdoGaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQRdePdaHdoLdoIdoMdozaaaaaaaaaaaaaaaaaaaaaaaadjdaaadnZdoNdoOdoCdoDdoQdoSdoRdoHdnZaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaaaamWaaaaabaaaaabaabaabaaacTWaaaaabaaaaabaaaaabaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQRdgqdaHdeddoudoudoVaaaaaaaaaaaaaaaaaaaaaaaadjdaaadnZdoWdoYdoXdoPdoZdpcdpadpgdnZaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaamWaaadohdohdohdohdohaabcTWaabdohdohdohdohdohaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgGcQRcQRcQRcQRcQRcQRaaaaaaaaaaaaaaaaaaaabaabdjEaabdnZdphdpjdpidpndpkdpsdprdpbdnZaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamWaabddRddTddTddTddTddUcTWddVddWddWddWddWdeeaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabdpddpedpddpfdpudpwdpvdpydpxdpfdpfdpfdpfaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamWaabdoGdoGdoGdoGdoGaaacTWaabdoGdoGdoGdoGdoGaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpddpddpldpmdpddpfdpfdpzdpodpfdppdpqdpqdppdppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayiaaaaabaaaaabaaaaabaaadefaaaaabaaaaabaabaabaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpddpCdpEdpDdpFdpfdpIdpHdpJdpfdpKdpAdpAdpLdppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamWaaadohdohdohdohdohaabddNaabdohdohdohdohdohaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9156,4 +9164,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 9b145bd1eb3..785d58520a0 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -261,4 +261,4 @@ return . if("toggleadvcontrol" in href_list) advcontrol = !advcontrol - return MT_UPDATE + return TRUE diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index c47893fc9dd..613d0f0794e 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -413,7 +413,7 @@ /obj/machinery/atmospherics/unary/vent_pump/multitool_topic(var/mob/user, var/list/href_list, var/obj/O) if("toggleadvcontrol" in href_list) advcontrol = !advcontrol - return MT_UPDATE + return TRUE if("set_id" in href_list) var/newid = copytext(reject_bad_text(input(usr, "Specify the new ID tag for this machine", src, src.id_tag) as null|text), 1, MAX_MESSAGE_LEN) @@ -426,7 +426,7 @@ id_tag = newid broadcast_status() - return MT_UPDATE + return TRUE return ..() diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index e22d00c3f80..8416a784019 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -351,7 +351,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/multitool_topic(var/mob/user, var/list/href_list, var/obj/O) if("toggleadvcontrol" in href_list) advcontrol = !advcontrol - return MT_UPDATE + return TRUE if("set_id" in href_list) var/newid = copytext(reject_bad_text(input(usr, "Specify the new ID tag for this machine", src, src:id_tag) as null|text),1,MAX_MESSAGE_LEN) @@ -365,7 +365,7 @@ id_tag = newid broadcast_status() - return MT_UPDATE + return TRUE return ..() diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 0a4ac519d9e..3b31e34b2f4 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -47,9 +47,9 @@ //End positions #define COMPONENT_EXNAME_CHANGED 1 #define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (atom/movable/entering, /atom) +#define COMSIG_ATOM_EXITED "atom_exited" //from base of atom/Exited(): (atom/movable/exiting, atom/newloc) #define COMSIG_ATOM_EXIT "atom_exit" //from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc) #define COMPONENT_ATOM_BLOCK_EXIT 1 -#define COMSIG_ATOM_EXITED "atom_exited" //from base of atom/Exited(): (atom/movable/exiting, atom/newloc) #define COMSIG_ATOM_EX_ACT "atom_ex_act" //from base of atom/ex_act(): (severity, target) #define COMSIG_ATOM_EMP_ACT "atom_emp_act" //from base of atom/emp_act(): (severity) #define COMSIG_ATOM_FIRE_ACT "atom_fire_act" //from base of atom/fire_act(): (exposed_temperature, exposed_volume) @@ -106,9 +106,9 @@ #define COMSIG_MOVABLE_MOVED "movable_moved" //from base of atom/movable/Moved(): (/atom, dir) #define COMSIG_MOVABLE_CROSS "movable_cross" //from base of atom/movable/Cross(): (/atom/movable) #define COMSIG_MOVABLE_CROSSED "movable_crossed" //from base of atom/movable/Crossed(): (/atom/movable) +#define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed" //from base of atom/movable/Uncrossed(): (/atom/movable) #define COMSIG_MOVABLE_UNCROSS "movable_uncross" //from base of atom/movable/Uncross(): (/atom/movable) #define COMPONENT_MOVABLE_BLOCK_UNCROSS 1 -#define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed" //from base of atom/movable/Uncrossed(): (/atom/movable) #define COMSIG_MOVABLE_BUMP "movable_bump" //from base of atom/movable/Bump(): (/atom) #define COMSIG_MOVABLE_IMPACT "movable_impact" //from base of atom/movable/throw_impact(): (/atom/hit_atom, /datum/thrownthing/throwingdatum) #define COMSIG_MOVABLE_IMPACT_ZONE "item_impact_zone" //from base of mob/living/hitby(): (mob/living/target, hit_zone) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 2862010d316..c2e56d8338c 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -11,6 +11,7 @@ #define isconstruct(A) (istype(A, /mob/living/simple_animal/hostile/construct)) //Objects +#define isitem(A) (istype(A, /obj/item)) #define ismecha(A) (istype(A, /obj/mecha)) diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 809567a0a75..7a691c44df2 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -32,11 +32,6 @@ #define HYDRO_SPEED_MULTIPLIER 1 -// multitool_topic() shit -#define MT_ERROR -1 -#define MT_UPDATE 1 -#define MT_REINIT 2 - //Modular computer/NTNet defines //Modular computer part defines diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index f8c11dd6a69..c7380d9f402 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -455,7 +455,7 @@ proc/checkhtml(var/t) // Pencode -/proc/pencode_to_html(text, mob/user, obj/item/pen/P = null, format = 1, sign = 1, fields = 1, deffont = PEN_FONT, signfont = SIGNFONT, crayonfont = CRAYON_FONT) +/proc/pencode_to_html(text, mob/user, obj/item/pen/P = null, format = 1, sign = 1, fields = 1, deffont = PEN_FONT, signfont = SIGNFONT, crayonfont = CRAYON_FONT, no_font = FALSE) text = replacetext(text, "\[b\]", "") text = replacetext(text, "\[/b\]", "") text = replacetext(text, "\[i\]", "") @@ -509,10 +509,12 @@ proc/checkhtml(var/t) text = replacetext(text, "\[cell\]", "") text = replacetext(text, "\[logo\]", "") text = replacetext(text, "\[time\]", "[station_time_timestamp()]") // TO DO - if(P) - text = "[text]" - else - text = "[text]" + if(!no_font) + if(P) + text = "[text]" + else + text = "[text]" + text = copytext(text, 1, MAX_PAPER_MESSAGE_LEN) return text diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 9e8b9b9c3a6..e36d5c027f5 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -7,6 +7,8 @@ // Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown. /obj/item/proc/attack_self(mob/user) + if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SELF, user) & COMPONENT_NO_INTERACT) + return return /obj/item/proc/pre_attackby(atom/A, mob/living/user, params) //do stuff before attackby! @@ -28,9 +30,12 @@ return I.attack(src, user) /obj/item/proc/attack(mob/living/M, mob/living/user, def_zone) + SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, M, user) + SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, M, user) if(flags & (NOBLUDGEON)) return 0 - + if(check_martial_counter(M, user)) + return 0 if(can_operate(M)) //Checks if mob is lying down on table for surgery if(istype(src,/obj/item/robot_parts))//popup override for direct attach if(!attempt_initiate_surgery(src, M, user,1)) @@ -74,6 +79,8 @@ //the equivalent of the standard version of attack() but for object targets. /obj/item/proc/attack_obj(obj/O, mob/living/user) + if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_OBJ, O, user) & COMPONENT_NO_ATTACK_OBJ) + return if(flags & (NOBLUDGEON)) return user.changeNext_move(CLICK_CD_MELEE) diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm new file mode 100644 index 00000000000..e9b6bb6e42a --- /dev/null +++ b/code/datums/components/squeak.dm @@ -0,0 +1,88 @@ +// Squeak component ported over from tg + +/datum/component/squeak + var/static/list/default_squeak_sounds = list('sound/items/toysqueak1.ogg'=1, 'sound/items/toysqueak2.ogg'=1, 'sound/items/toysqueak3.ogg'=1) + var/list/override_squeak_sounds + var/squeak_chance = 100 + var/volume = 30 + + // This is so shoes don't squeak every step + var/steps = 0 + var/step_delay = 1 + + // This is to stop squeak spam from inhand usage + var/last_use = 0 + var/use_delay = 20 + +/datum/component/squeak/Initialize(custom_sounds, volume_override, chance_override, step_delay_override, use_delay_override) + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + RegisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY), .proc/play_squeak) + if(ismovableatom(parent)) + RegisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT), .proc/play_squeak) + RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/play_squeak_crossed) + RegisterSignal(parent, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react) + if(isitem(parent)) + RegisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT), .proc/play_squeak) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/use_squeak) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/on_drop) + if(istype(parent, /obj/item/clothing/shoes)) + RegisterSignal(parent, COMSIG_SHOES_STEP_ACTION, .proc/step_squeak) + + override_squeak_sounds = custom_sounds + if(chance_override) + squeak_chance = chance_override + if(volume_override) + volume = volume_override + if(isnum(step_delay_override)) + step_delay = step_delay_override + if(isnum(use_delay_override)) + use_delay = use_delay_override + +/datum/component/squeak/proc/play_squeak() + if(prob(squeak_chance)) + if(!override_squeak_sounds) + playsound(parent, pickweight(default_squeak_sounds), volume, 1, -1) + else + playsound(parent, pickweight(override_squeak_sounds), volume, 1, -1) + +/datum/component/squeak/proc/step_squeak() + if(steps > step_delay) + play_squeak() + steps = 0 + else + steps++ + +/datum/component/squeak/proc/on_equip(datum/source, mob/equipper, slot) + RegisterSignal(equipper, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react, TRUE) + +/datum/component/squeak/proc/on_drop(datum/source, mob/user) + UnregisterSignal(user, COMSIG_MOVABLE_DISPOSING) + +/datum/component/squeak/proc/play_squeak_crossed(atom/movable/AM) + if(isitem(AM)) + var/obj/item/I = AM + if(I.flags & ABSTRACT) + return + else if(istype(AM, /obj/item/projectile)) + var/obj/item/projectile/P = AM + if(P.original != parent) + return + var/atom/current_parent = parent + if(isturf(current_parent.loc)) + play_squeak() + +/datum/component/squeak/proc/use_squeak() + if(last_use + use_delay < world.time) + last_use = world.time + play_squeak() + +/datum/component/squeak/proc/disposing_react(datum/source, obj/structure/disposalholder/holder, obj/machinery/disposal/source) + //We don't need to worry about unregistering this signal as it will happen for us automaticaly when the holder is qdeleted + RegisterSignal(holder, COMSIG_ATOM_DIR_CHANGE, .proc/holder_dir_change) + +/datum/component/squeak/proc/holder_dir_change(datum/source, old_dir, new_dir) + //If the dir changes it means we're going through a bend in the pipes, let's pretend we bumped the wall + if(old_dir != new_dir) + play_squeak() \ No newline at end of file diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 1ddf4ca4d28..2761a8063ee 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -1063,7 +1063,9 @@ H.mind.vampire.bloodtotal = 9999 H.mind.vampire.check_vampire_upgrade(0) H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shapeshift/bats) - to_chat(H, "You have gained the ability to shapeshift into bat form. While capable of basic self defense, you cannot use your other abilities in that form.") + to_chat(H, "You have gained the ability to shapeshift into bat form. This is a weak form with no abilities, only useful for stealth.") + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shapeshift/hellhound) + to_chat(H, "You have gained the ability to shapeshift into lesser hellhound form. This is a combat form with different abilities, tough but not invincible. It can regenerate itself over time by resting.") H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/raise_vampires) to_chat(H, "You have gained the ability to Raise Vampires. This extremely powerful AOE ability affects all humans near you. Vampires/thralls are healed. Corpses are raised as vampires. Others are stunned, then brain damaged, then killed.") H.dna.SetSEState(JUMPBLOCK, 1) diff --git a/code/datums/spells/shapeshift.dm b/code/datums/spells/shapeshift.dm index 1b0a7587940..5dd388779ce 100644 --- a/code/datums/spells/shapeshift.dm +++ b/code/datums/spells/shapeshift.dm @@ -91,4 +91,24 @@ shapeshift_type = /mob/living/simple_animal/hostile/scarybat/batswarm list/current_shapes = list(/mob/living/simple_animal/hostile/scarybat/batswarm) list/current_casters = list() - list/possible_shapes = list(/mob/living/simple_animal/hostile/scarybat/batswarm) \ No newline at end of file + list/possible_shapes = list(/mob/living/simple_animal/hostile/scarybat/batswarm) + +/obj/effect/proc_holder/spell/targeted/shapeshift/hellhound + name = "Lesser Hellhound Form" + desc = "Take on the shape of a Hellhound." + invocation = "none" + invocation_type = "none" + action_background_icon_state = "bg_demon" + action_icon_state = "glare" + + shapeshift_type = /mob/living/simple_animal/hostile/hellhound + list/current_shapes = list(/mob/living/simple_animal/hostile/hellhound) + list/current_casters = list() + list/possible_shapes = list(/mob/living/simple_animal/hostile/hellhound) + +/obj/effect/proc_holder/spell/targeted/shapeshift/hellhound/greater + name = "Greater Hellhound Form" + shapeshift_type = /mob/living/simple_animal/hostile/hellhound/greater + list/current_shapes = list(/mob/living/simple_animal/hostile/hellhound/greater) + list/current_casters = list() + list/possible_shapes = list(/mob/living/simple_animal/hostile/hellhound/greater) \ No newline at end of file diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 4d8bd9432f4..89108071b09 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -737,6 +737,15 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine cost = 10 containername = "advanced first aid kits crate" +/datum/supply_packs/medical/firstaidmachine + name = "Machine First Aid Kits Crate" + contains = list(/obj/item/storage/firstaid/machine, + /obj/item/storage/firstaid/machine, + /obj/item/storage/firstaid/machine, + /obj/item/storage/firstaid/machine) + cost = 10 + containername = "machine first aid kits crate" + /datum/supply_packs/medical/firstaibrute name = "Brute Treatment Kits Crate" contains = list(/obj/item/storage/firstaid/brute, diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 464deb87822..772a8068764 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -807,6 +807,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) refundable = TRUE cant_discount = TRUE +/datum/uplink_item/stealthy_weapons/cqc + name = "CQC Manual" + desc = "A manual that teaches a single user tactical Close-Quarters Combat before self-destructing. Does not restrict weapon usage, but cannot be used alongside Gloves of the North Star." + reference = "CQC" + item = /obj/item/CQC_manual + cost = 9 + /datum/uplink_item/stealthy_weapons/throwingweapons name = "Box of Throwing Weapons" desc = "A box of shurikens and reinforced bolas from ancient Earth martial arts. They are highly effective \ diff --git a/code/defines/vox_sounds.dm b/code/defines/vox_sounds.dm index 98442569e5b..794a259ea4e 100644 --- a/code/defines/vox_sounds.dm +++ b/code/defines/vox_sounds.dm @@ -9,30 +9,47 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "accelerator" = 'sound/vox_fem/accelerator.ogg', "accepted" = 'sound/vox_fem/accepted.ogg', "access" = 'sound/vox_fem/access.ogg', +"accessed" = 'sound/vox_fem/accessed.ogg', +"accessing" = 'sound/vox_fem/accessing.ogg', "acknowledge" = 'sound/vox_fem/acknowledge.ogg', "acknowledged" = 'sound/vox_fem/acknowledged.ogg', "acquired" = 'sound/vox_fem/acquired.ogg', "acquisition" = 'sound/vox_fem/acquisition.ogg', "across" = 'sound/vox_fem/across.ogg', +"act" = 'sound/vox_fem/act.ogg', +"acted" = 'sound/vox_fem/acted.ogg', +"acting" = 'sound/vox_fem/acting.ogg', "activate" = 'sound/vox_fem/activate.ogg', "activated" = 'sound/vox_fem/activated.ogg', "active" = 'sound/vox_fem/active.ogg', "activity" = 'sound/vox_fem/activity.ogg', +"actor" = 'sound/vox_fem/actor.ogg', +"actual" = 'sound/vox_fem/actual.ogg', +"actually" = 'sound/vox_fem/actually.ogg', "adios" = 'sound/vox_fem/adios.ogg', "administration" = 'sound/vox_fem/administration.ogg', "advanced" = 'sound/vox_fem/advanced.ogg', "aft" = 'sound/vox_fem/aft.ogg', "after" = 'sound/vox_fem/after.ogg', +"again" = 'sound/vox_fem/again.ogg', "agent" = 'sound/vox_fem/agent.ogg', "ai" = 'sound/vox_fem/ai.ogg', +"air" = 'sound/vox_fem/air.ogg', "airlock" = 'sound/vox_fem/airlock.ogg', "alarm" = 'sound/vox_fem/alarm.ogg', +"alarmed" = 'sound/vox_fem/alarmed.ogg', +"alarms" = 'sound/vox_fem/alarms.ogg', "alcohol" = 'sound/vox_fem/alcohol.ogg', "alert" = 'sound/vox_fem/alert.ogg', +"alerted" = 'sound/vox_fem/alerted.ogg', +"alerting" = 'sound/vox_fem/alerting.ogg', "alien" = 'sound/vox_fem/alien.ogg', "aligned" = 'sound/vox_fem/aligned.ogg', +"alive" = 'sound/vox_fem/alive.ogg', "all" = 'sound/vox_fem/all.ogg', "alpha" = 'sound/vox_fem/alpha.ogg', +"alright" = 'sound/vox_fem/alright.ogg', +"always" = 'sound/vox_fem/always.ogg', "am" = 'sound/vox_fem/am.ogg', "amigo" = 'sound/vox_fem/amigo.ogg', "ammunition" = 'sound/vox_fem/ammunition.ogg', @@ -41,9 +58,12 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "andy" = 'sound/vox_fem/andy.ogg', "announcement" = 'sound/vox_fem/announcement.ogg', "anomalous" = 'sound/vox_fem/anomalous.ogg', +"anomaly" = 'sound/vox_fem/anomaly.ogg', +"another" = 'sound/vox_fem/another.ogg', "antenna" = 'sound/vox_fem/antenna.ogg', "antimov" = 'sound/vox_fem/antimov.ogg', "any" = 'sound/vox_fem/any.ogg', +"apc" = 'sound/vox_fem/apc.ogg', "apprehend" = 'sound/vox_fem/apprehend.ogg', "approach" = 'sound/vox_fem/approach.ogg', "are" = 'sound/vox_fem/are.ogg', @@ -56,10 +76,17 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "arrest" = 'sound/vox_fem/arrest.ogg', "arrival" = 'sound/vox_fem/arrival.ogg', "arrivals" = 'sound/vox_fem/arrivals.ogg', +"arrived" = 'sound/vox_fem/arrived.ogg', +"art" = 'sound/vox_fem/art.ogg', +"artifact" = 'sound/vox_fem/artifact.ogg', +"artificial" = 'sound/vox_fem/artificial.ogg', "asimov" = 'sound/vox_fem/asimov.ogg', "ass" = 'sound/vox_fem/ass.ogg', "asshole" = 'sound/vox_fem/asshole.ogg', "assholes" = 'sound/vox_fem/assholes.ogg', +"assistance" = 'sound/vox_fem/assistance.ogg', +"assistant" = 'sound/vox_fem/assistant.ogg', +"assistants" = 'sound/vox_fem/assistants.ogg', "at" = 'sound/vox_fem/at.ogg', "atmospherics" = 'sound/vox_fem/atmospherics.ogg', "atomic" = 'sound/vox_fem/atomic.ogg', @@ -67,8 +94,12 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "authorize" = 'sound/vox_fem/authorize.ogg', "authorized" = 'sound/vox_fem/authorized.ogg', "automatic" = 'sound/vox_fem/automatic.ogg', +"avenge" = 'sound/vox_fem/avenge.ogg', +"avenged" = 'sound/vox_fem/avenged.ogg', +"avenging" = 'sound/vox_fem/avenging.ogg', "away" = 'sound/vox_fem/away.ogg', "b" = 'sound/vox_fem/b.ogg', +"baby" = 'sound/vox_fem/baby.ogg', "back" = 'sound/vox_fem/back.ogg', "backman" = 'sound/vox_fem/backman.ogg', "bad" = 'sound/vox_fem/bad.ogg', @@ -77,13 +108,27 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "bar" = 'sound/vox_fem/bar.ogg', "barracks" = 'sound/vox_fem/barracks.ogg', "base" = 'sound/vox_fem/base.ogg', +"battle" = 'sound/vox_fem/battle.ogg', +"battled" = 'sound/vox_fem/battled.ogg', +"battles" = 'sound/vox_fem/battles.ogg', +"battling" = 'sound/vox_fem/battling.ogg', "bay" = 'sound/vox_fem/bay.ogg', "be" = 'sound/vox_fem/be.ogg', +"because" = 'sound/vox_fem/because.ogg', "becoming" = 'sound/vox_fem/becoming.ogg', "been" = 'sound/vox_fem/been.ogg', "before" = 'sound/vox_fem/before.ogg', +"being" = 'sound/vox_fem/being.ogg', +"believe" = 'sound/vox_fem/believe.ogg', +"believed" = 'sound/vox_fem/believed.ogg', +"believer" = 'sound/vox_fem/believer.ogg', +"believing" = 'sound/vox_fem/believing.ogg', +"best" = 'sound/vox_fem/best.ogg', +"bested" = 'sound/vox_fem/bested.ogg', +"besting" = 'sound/vox_fem/besting.ogg', "between" = 'sound/vox_fem/between.ogg', "beyond" = 'sound/vox_fem/beyond.ogg', +"big" = 'sound/vox_fem/big.ogg', "biohazard" = 'sound/vox_fem/biohazard.ogg', "biological" = 'sound/vox_fem/biological.ogg', "biomass" = 'sound/vox_fem/biomass.ogg', @@ -93,14 +138,30 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "bizwarn" = 'sound/vox_fem/bizwarn.ogg', "black" = 'sound/vox_fem/black.ogg', "blast" = 'sound/vox_fem/blast.ogg', +"blend" = 'sound/vox_fem/blend.ogg', +"blender" = 'sound/vox_fem/blender.ogg', +"blending" = 'sound/vox_fem/blending.ogg', +"blew" = 'sound/vox_fem/blew.ogg', "blob" = 'sound/vox_fem/blob.ogg', "blocked" = 'sound/vox_fem/blocked.ogg', "bloop" = 'sound/vox_fem/bloop.ogg', +"blow" = 'sound/vox_fem/blow.ogg', +"blowing" = 'sound/vox_fem/blowing.ogg', +"blown" = 'sound/vox_fem/blown.ogg', "blue" = 'sound/vox_fem/blue.ogg', +"blueshield" = 'sound/vox_fem/blueshield.ogg', +"bluespace" = 'sound/vox_fem/bluespace.ogg', +"board" = 'sound/vox_fem/board.ogg', +"bodies" = 'sound/vox_fem/bodies.ogg', +"body" = 'sound/vox_fem/body.ogg', "bomb" = 'sound/vox_fem/bomb.ogg', "bombs" = 'sound/vox_fem/bombs.ogg', "borer" = 'sound/vox_fem/borer.ogg', "borers" = 'sound/vox_fem/borers.ogg', +"boss" = 'sound/vox_fem/boss.ogg', +"bossed" = 'sound/vox_fem/bossed.ogg', +"bossing" = 'sound/vox_fem/bossing.ogg', +"bossy" = 'sound/vox_fem/bossy.ogg', "botanist" = 'sound/vox_fem/botanist.ogg', "botanists" = 'sound/vox_fem/botanists.ogg', "bottom" = 'sound/vox_fem/bottom.ogg', @@ -114,16 +175,22 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "bridge" = 'sound/vox_fem/bridge.ogg', "briefing" = 'sound/vox_fem/briefing.ogg', "brig" = 'sound/vox_fem/brig.ogg', +"build" = 'sound/vox_fem/build.ogg', +"builder" = 'sound/vox_fem/builder.ogg', +"building" = 'sound/vox_fem/building.ogg', +"built" = 'sound/vox_fem/built.ogg', "bust" = 'sound/vox_fem/bust.ogg', "but" = 'sound/vox_fem/but.ogg', "button" = 'sound/vox_fem/button.ogg', "buzwarn" = 'sound/vox_fem/buzwarn.ogg', +"by" = 'sound/vox_fem/by.ogg', "bypass" = 'sound/vox_fem/bypass.ogg', "c" = 'sound/vox_fem/c.ogg', "cable" = 'sound/vox_fem/cable.ogg', "cage" = 'sound/vox_fem/cage.ogg', "call" = 'sound/vox_fem/call.ogg', "called" = 'sound/vox_fem/called.ogg', +"came" = 'sound/vox_fem/came.ogg', "camp" = 'sound/vox_fem/camp.ogg', "can" = 'sound/vox_fem/can.ogg', "canal" = 'sound/vox_fem/canal.ogg', @@ -147,6 +214,7 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "changelings" = 'sound/vox_fem/changelings.ogg', "changer" = 'sound/vox_fem/changer.ogg', "chapel" = 'sound/vox_fem/chapel.ogg', +"chaplain" = 'sound/vox_fem/chaplain.ogg', "charlie" = 'sound/vox_fem/charlie.ogg', "check" = 'sound/vox_fem/check.ogg', "checkpoint" = 'sound/vox_fem/checkpoint.ogg', @@ -154,7 +222,10 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "chefs" = 'sound/vox_fem/chefs.ogg', "chemical" = 'sound/vox_fem/chemical.ogg', "chemist" = 'sound/vox_fem/chemist.ogg', +"chemistry" = 'sound/vox_fem/chemistry.ogg', "chemists" = 'sound/vox_fem/chemists.ogg', +"chief" = 'sound/vox_fem/chief.ogg', +"civilian" = 'sound/vox_fem/civilian.ogg', "cleanup" = 'sound/vox_fem/cleanup.ogg', "clear" = 'sound/vox_fem/clear.ogg', "clearance" = 'sound/vox_fem/clearance.ogg', @@ -168,6 +239,7 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "collider" = 'sound/vox_fem/collider.ogg', "comdom" = 'sound/vox_fem/comdom.ogg', "come" = 'sound/vox_fem/come.ogg', +"coming" = 'sound/vox_fem/coming.ogg', "command" = 'sound/vox_fem/command.ogg', "communication" = 'sound/vox_fem/communication.ogg', "complex" = 'sound/vox_fem/complex.ogg', @@ -182,12 +254,26 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "coolant" = 'sound/vox_fem/coolant.ogg', "coomer" = 'sound/vox_fem/coomer.ogg', "core" = 'sound/vox_fem/core.ogg', +"coroner" = 'sound/vox_fem/coroner.ogg', "correct" = 'sound/vox_fem/correct.ogg', "corridor" = 'sound/vox_fem/corridor.ogg', +"could" = 'sound/vox_fem/could.ogg', "court" = 'sound/vox_fem/court.ogg', "coward" = 'sound/vox_fem/coward.ogg', "cowards" = 'sound/vox_fem/cowards.ogg', +"crate" = 'sound/vox_fem/crate.ogg', +"crated" = 'sound/vox_fem/crated.ogg', +"crates" = 'sound/vox_fem/crates.ogg', +"crating" = 'sound/vox_fem/crating.ogg', +"cremate" = 'sound/vox_fem/cremate.ogg', +"cremated" = 'sound/vox_fem/cremated.ogg', +"cremating" = 'sound/vox_fem/cremating.ogg', +"cremation" = 'sound/vox_fem/cremation.ogg', +"crematorium" = 'sound/vox_fem/crematorium.ogg', "crew" = 'sound/vox_fem/crew.ogg', +"criminal" = 'sound/vox_fem/criminal.ogg', +"criminals" = 'sound/vox_fem/criminals.ogg', +"critical" = 'sound/vox_fem/critical.ogg', "cross" = 'sound/vox_fem/cross.ogg', "cryogenic" = 'sound/vox_fem/cryogenic.ogg', "cunt" = 'sound/vox_fem/cunt.ogg', @@ -200,17 +286,24 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "damage" = 'sound/vox_fem/damage.ogg', "damaged" = 'sound/vox_fem/damaged.ogg', "danger" = 'sound/vox_fem/danger.ogg', +"dangerous" = 'sound/vox_fem/dangerous.ogg', "day" = 'sound/vox_fem/day.ogg', "deactivated" = 'sound/vox_fem/deactivated.ogg', "dead" = 'sound/vox_fem/dead.ogg', "death" = 'sound/vox_fem/death.ogg', +"decision" = 'sound/vox_fem/decision.ogg', "declared" = 'sound/vox_fem/declared.ogg', "decompression" = 'sound/vox_fem/decompression.ogg', "decontamination" = 'sound/vox_fem/decontamination.ogg', "deeoo" = 'sound/vox_fem/deeoo.ogg', "defense" = 'sound/vox_fem/defense.ogg', "degrees" = 'sound/vox_fem/degrees.ogg', +"delay" = 'sound/vox_fem/delay.ogg', +"delayed" = 'sound/vox_fem/delayed.ogg', +"delaying" = 'sound/vox_fem/delaying.ogg', +"delays" = 'sound/vox_fem/delays.ogg', "delta" = 'sound/vox_fem/delta.ogg', +"demon" = 'sound/vox_fem/demon.ogg', "denied" = 'sound/vox_fem/denied.ogg', "department" = 'sound/vox_fem/department.ogg', "departments" = 'sound/vox_fem/departments.ogg', @@ -226,14 +319,20 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "device" = 'sound/vox_fem/device.ogg', "did" = 'sound/vox_fem/did.ogg', "die" = 'sound/vox_fem/die.ogg', +"died" = 'sound/vox_fem/died.ogg', +"dies" = 'sound/vox_fem/dies.ogg', "dimensional" = 'sound/vox_fem/dimensional.ogg', "diona" = 'sound/vox_fem/diona.ogg', "dirt" = 'sound/vox_fem/dirt.ogg', +"disease" = 'sound/vox_fem/disease.ogg', +"diseased" = 'sound/vox_fem/diseased.ogg', +"diseases" = 'sound/vox_fem/diseases.ogg', "disengaged" = 'sound/vox_fem/disengaged.ogg', "dish" = 'sound/vox_fem/dish.ogg', "disposal" = 'sound/vox_fem/disposal.ogg', "distance" = 'sound/vox_fem/distance.ogg', "distortion" = 'sound/vox_fem/distortion.ogg', +"dna" = 'sound/vox_fem/dna.ogg', "do" = 'sound/vox_fem/do.ogg', "dock" = 'sound/vox_fem/dock.ogg', "docked" = 'sound/vox_fem/docked.ogg', @@ -246,9 +345,13 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "dorms" = 'sound/vox_fem/dorms.ogg', "down" = 'sound/vox_fem/down.ogg', "drask" = 'sound/vox_fem/drask.ogg', +"drive" = 'sound/vox_fem/drive.ogg', +"drived" = 'sound/vox_fem/drived.ogg', +"driving" = 'sound/vox_fem/driving.ogg', "drunk" = 'sound/vox_fem/drunk.ogg', "dual" = 'sound/vox_fem/dual.ogg', "duct" = 'sound/vox_fem/duct.ogg', +"dying" = 'sound/vox_fem/dying.ogg', "e" = 'sound/vox_fem/e.ogg', "east" = 'sound/vox_fem/east.ogg', "echo" = 'sound/vox_fem/echo.ogg', @@ -281,6 +384,9 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "evacuate" = 'sound/vox_fem/evacuate.ogg', "evacuation" = 'sound/vox_fem/evacuation.ogg', "every" = 'sound/vox_fem/every.ogg', +"everybody" = 'sound/vox_fem/everybody.ogg', +"everyone" = 'sound/vox_fem/everyone.ogg', +"everything" = 'sound/vox_fem/everything.ogg', "everywhere" = 'sound/vox_fem/everywhere.ogg', "exchange" = 'sound/vox_fem/exchange.ogg', "execution" = 'sound/vox_fem/execution.ogg', @@ -303,19 +409,39 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "failure" = 'sound/vox_fem/failure.ogg', "farthest" = 'sound/vox_fem/farthest.ogg', "fast" = 'sound/vox_fem/fast.ogg', +"fatal" = 'sound/vox_fem/fatal.ogg', +"fatalities" = 'sound/vox_fem/fatalities.ogg', +"fatality" = 'sound/vox_fem/fatality.ogg', +"fatally" = 'sound/vox_fem/fatally.ogg', +"fate" = 'sound/vox_fem/fate.ogg', "feet" = 'sound/vox_fem/feet.ogg', "field" = 'sound/vox_fem/field.ogg', "fifteen" = 'sound/vox_fem/fifteen.ogg', "fifth" = 'sound/vox_fem/fifth.ogg', "fifty" = 'sound/vox_fem/fifty.ogg', +"fig" = 'sound/vox_fem/fig.ogg', +"figure" = 'sound/vox_fem/figure.ogg', +"figured" = 'sound/vox_fem/figured.ogg', +"figuring" = 'sound/vox_fem/figuring.ogg', "final" = 'sound/vox_fem/final.ogg', +"finally" = 'sound/vox_fem/finally.ogg', +"find" = 'sound/vox_fem/find.ogg', +"finding" = 'sound/vox_fem/finding.ogg', "fine" = 'sound/vox_fem/fine.ogg', "fire" = 'sound/vox_fem/fire.ogg', "first" = 'sound/vox_fem/first.ogg', "five" = 'sound/vox_fem/five.ogg', +"flood" = 'sound/vox_fem/flood.ogg', +"flooded" = 'sound/vox_fem/flooded.ogg', "flooding" = 'sound/vox_fem/flooding.ogg', +"floods" = 'sound/vox_fem/floods.ogg', "floor" = 'sound/vox_fem/floor.ogg', +"floored" = 'sound/vox_fem/floored.ogg', +"flooring" = 'sound/vox_fem/flooring.ogg', +"food" = 'sound/vox_fem/food.ogg', +"foods" = 'sound/vox_fem/foods.ogg', "fool" = 'sound/vox_fem/fool.ogg', +"foot" = 'sound/vox_fem/foot.ogg', "for" = 'sound/vox_fem/for.ogg', "forbidden" = 'sound/vox_fem/forbidden.ogg', "force" = 'sound/vox_fem/force.ogg', @@ -332,29 +458,46 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "from" = 'sound/vox_fem/from.ogg', "front" = 'sound/vox_fem/front.ogg', "fuck" = 'sound/vox_fem/fuck.ogg', +"fucked" = 'sound/vox_fem/fucked.ogg', "fucking" = 'sound/vox_fem/fucking.ogg', "fucks" = 'sound/vox_fem/fucks.ogg', "fuel" = 'sound/vox_fem/fuel.ogg', "g" = 'sound/vox_fem/g.ogg', "gas" = 'sound/vox_fem/gas.ogg', "gateway" = 'sound/vox_fem/gateway.ogg', +"gave" = 'sound/vox_fem/gave.ogg', +"generate" = 'sound/vox_fem/generate.ogg', +"generated" = 'sound/vox_fem/generated.ogg', +"generator" = 'sound/vox_fem/generator.ogg', "get" = 'sound/vox_fem/get.ogg', +"give" = 'sound/vox_fem/give.ogg', +"given" = 'sound/vox_fem/given.ogg', +"giving" = 'sound/vox_fem/giving.ogg', "glory" = 'sound/vox_fem/glory.ogg', "go" = 'sound/vox_fem/go.ogg', +"god" = 'sound/vox_fem/god.ogg', +"goddess" = 'sound/vox_fem/goddess.ogg', "going" = 'sound/vox_fem/going.ogg', +"gone" = 'sound/vox_fem/gone.ogg', "good" = 'sound/vox_fem/good.ogg', "goodbye" = 'sound/vox_fem/goodbye.ogg', "gordon" = 'sound/vox_fem/gordon.ogg', "got" = 'sound/vox_fem/got.ogg', "government" = 'sound/vox_fem/government.ogg', "granted" = 'sound/vox_fem/granted.ogg', +"gravity" = 'sound/vox_fem/gravity.ogg', "gray" = 'sound/vox_fem/gray.ogg', "great" = 'sound/vox_fem/great.ogg', "green" = 'sound/vox_fem/green.ogg', "grenade" = 'sound/vox_fem/grenade.ogg', +"ground" = 'sound/vox_fem/ground.ogg', +"grounded" = 'sound/vox_fem/grounded.ogg', +"grounding" = 'sound/vox_fem/grounding.ogg', "guard" = 'sound/vox_fem/guard.ogg', "gulf" = 'sound/vox_fem/gulf.ogg', "gun" = 'sound/vox_fem/gun.ogg', +"gunned" = 'sound/vox_fem/gunned.ogg', +"guns" = 'sound/vox_fem/guns.ogg', "guthrie" = 'sound/vox_fem/guthrie.ogg', "h" = 'sound/vox_fem/h.ogg', "hacker" = 'sound/vox_fem/hacker.ogg', @@ -362,16 +505,26 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "hacking" = 'sound/vox_fem/hacking.ogg', "hail" = 'sound/vox_fem/hail.ogg', "hallway" = 'sound/vox_fem/hallway.ogg', +"hand" = 'sound/vox_fem/hand.ogg', +"handle" = 'sound/vox_fem/handle.ogg', +"handled" = 'sound/vox_fem/handled.ogg', "handling" = 'sound/vox_fem/handling.ogg', "hangar" = 'sound/vox_fem/hangar.ogg', "happening" = 'sound/vox_fem/happening.ogg', +"happy" = 'sound/vox_fem/happy.ogg', "harm" = 'sound/vox_fem/harm.ogg', "has" = 'sound/vox_fem/has.ogg', "have" = 'sound/vox_fem/have.ogg', "hazard" = 'sound/vox_fem/hazard.ogg', +"he" = 'sound/vox_fem/he.ogg', "head" = 'sound/vox_fem/head.ogg', "health" = 'sound/vox_fem/health.ogg', +"hear" = 'sound/vox_fem/hear.ogg', +"heard" = 'sound/vox_fem/heard.ogg', +"hearing" = 'sound/vox_fem/hearing.ogg', +"heart" = 'sound/vox_fem/heart.ogg', "heat" = 'sound/vox_fem/heat.ogg', +"held" = 'sound/vox_fem/held.ogg', "helicopter" = 'sound/vox_fem/helicopter.ogg', "helium" = 'sound/vox_fem/helium.ogg', "hello" = 'sound/vox_fem/hello.ogg', @@ -381,16 +534,24 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "high" = 'sound/vox_fem/high.ogg', "highest" = 'sound/vox_fem/highest.ogg', "hit" = 'sound/vox_fem/hit.ogg', +"hold" = 'sound/vox_fem/hold.ogg', +"holding" = 'sound/vox_fem/holding.ogg', "hole" = 'sound/vox_fem/hole.ogg', "holoparasite" = 'sound/vox_fem/holoparasite.ogg', "honk" = 'sound/vox_fem/honk.ogg', "hop" = 'sound/vox_fem/hop.ogg', +"hope" = 'sound/vox_fem/hope.ogg', +"hoped" = 'sound/vox_fem/hoped.ogg', "hos" = 'sound/vox_fem/hos.ogg', "hostile" = 'sound/vox_fem/hostile.ogg', "hot" = 'sound/vox_fem/hot.ogg', "hotel" = 'sound/vox_fem/hotel.ogg', "hour" = 'sound/vox_fem/hour.ogg', "hours" = 'sound/vox_fem/hours.ogg', +"how" = 'sound/vox_fem/how.ogg', +"hug" = 'sound/vox_fem/hug.ogg', +"hugged" = 'sound/vox_fem/hugged.ogg', +"hugging" = 'sound/vox_fem/hugging.ogg', "hull" = 'sound/vox_fem/hull.ogg', "human" = 'sound/vox_fem/human.ogg', "humans" = 'sound/vox_fem/humans.ogg', @@ -401,19 +562,35 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "i" = 'sound/vox_fem/i.ogg', "iaa" = 'sound/vox_fem/iaa.ogg', "ian" = 'sound/vox_fem/ian.ogg', +"idea" = 'sound/vox_fem/idea.ogg', +"identified" = 'sound/vox_fem/identified.ogg', +"identify" = 'sound/vox_fem/identify.ogg', +"identity" = 'sound/vox_fem/identity.ogg', "idiot" = 'sound/vox_fem/idiot.ogg', "illegal" = 'sound/vox_fem/illegal.ogg', "immediate" = 'sound/vox_fem/immediate.ogg', "immediately" = 'sound/vox_fem/immediately.ogg', "imminent" = 'sound/vox_fem/imminent.ogg', +"implant" = 'sound/vox_fem/implant.ogg', +"implanted" = 'sound/vox_fem/implanted.ogg', +"implanting" = 'sound/vox_fem/implanting.ogg', +"implants" = 'sound/vox_fem/implants.ogg', "in" = 'sound/vox_fem/in.ogg', +"inch" = 'sound/vox_fem/inch.ogg', "inches" = 'sound/vox_fem/inches.ogg', "india" = 'sound/vox_fem/india.ogg', +"infect" = 'sound/vox_fem/infect.ogg', +"infected" = 'sound/vox_fem/infected.ogg', +"infection" = 'sound/vox_fem/infection.ogg', +"infections" = 'sound/vox_fem/infections.ogg', "ing" = 'sound/vox_fem/ing.ogg', +"injured" = 'sound/vox_fem/injured.ogg', "inoperative" = 'sound/vox_fem/inoperative.ogg', "inside" = 'sound/vox_fem/inside.ogg', "inspection" = 'sound/vox_fem/inspection.ogg', "inspector" = 'sound/vox_fem/inspector.ogg', +"intelligence" = 'sound/vox_fem/intelligence.ogg', +"intelligent" = 'sound/vox_fem/intelligent.ogg', "interchange" = 'sound/vox_fem/interchange.ogg', "interested" = 'sound/vox_fem/interested.ogg', "intruder" = 'sound/vox_fem/intruder.ogg', @@ -423,8 +600,11 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "is" = 'sound/vox_fem/is.ogg', "it" = 'sound/vox_fem/it.ogg', "j" = 'sound/vox_fem/j.ogg', +"job" = 'sound/vox_fem/job.ogg', +"jobs" = 'sound/vox_fem/jobs.ogg', "johnson" = 'sound/vox_fem/johnson.ogg', "juliet" = 'sound/vox_fem/juliet.ogg', +"just" = 'sound/vox_fem/just.ogg', "k" = 'sound/vox_fem/k.ogg', "key" = 'sound/vox_fem/key.ogg', "kida" = 'sound/vox_fem/kida.ogg', @@ -439,6 +619,7 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "lab" = 'sound/vox_fem/lab.ogg', "labor" = 'sound/vox_fem/labor.ogg', "lambda" = 'sound/vox_fem/lambda.ogg', +"larva" = 'sound/vox_fem/larva.ogg', "laser" = 'sound/vox_fem/laser.ogg', "last" = 'sound/vox_fem/last.ogg', "launch" = 'sound/vox_fem/launch.ogg', @@ -447,6 +628,7 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "lawyer" = 'sound/vox_fem/lawyer.ogg', "leak" = 'sound/vox_fem/leak.ogg', "leave" = 'sound/vox_fem/leave.ogg', +"leaving" = 'sound/vox_fem/leaving.ogg', "left" = 'sound/vox_fem/left.ogg', "legal" = 'sound/vox_fem/legal.ogg', "level" = 'sound/vox_fem/level.ogg', @@ -456,10 +638,18 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "lieutenant" = 'sound/vox_fem/lieutenant.ogg', "life" = 'sound/vox_fem/life.ogg', "light" = 'sound/vox_fem/light.ogg', +"like" = 'sound/vox_fem/like.ogg', +"liked" = 'sound/vox_fem/liked.ogg', +"liking" = 'sound/vox_fem/liking.ogg', "lima" = 'sound/vox_fem/lima.ogg', +"ling" = 'sound/vox_fem/ling.ogg', "liquid" = 'sound/vox_fem/liquid.ogg', +"live" = 'sound/vox_fem/live.ogg', +"lived" = 'sound/vox_fem/lived.ogg', +"living" = 'sound/vox_fem/living.ogg', "lizard" = 'sound/vox_fem/lizard.ogg', "loading" = 'sound/vox_fem/loading.ogg', +"lobby" = 'sound/vox_fem/lobby.ogg', "locate" = 'sound/vox_fem/locate.ogg', "located" = 'sound/vox_fem/located.ogg', "location" = 'sound/vox_fem/location.ogg', @@ -469,30 +659,49 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "lockout" = 'sound/vox_fem/lockout.ogg', "loose" = 'sound/vox_fem/loose.ogg', "love" = 'sound/vox_fem/love.ogg', +"loved" = 'sound/vox_fem/loved.ogg', +"loving" = 'sound/vox_fem/loving.ogg', "lower" = 'sound/vox_fem/lower.ogg', "lowest" = 'sound/vox_fem/lowest.ogg', "m" = 'sound/vox_fem/m.ogg', +"made" = 'sound/vox_fem/made.ogg', +"magic" = 'sound/vox_fem/magic.ogg', +"magician" = 'sound/vox_fem/magician.ogg', +"magicians" = 'sound/vox_fem/magicians.ogg', +"magistrate" = 'sound/vox_fem/magistrate.ogg', "magnetic" = 'sound/vox_fem/magnetic.ogg', "main" = 'sound/vox_fem/main.ogg', "maintenance" = 'sound/vox_fem/maintenance.ogg', +"make" = 'sound/vox_fem/make.ogg', +"maker" = 'sound/vox_fem/maker.ogg', +"making" = 'sound/vox_fem/making.ogg', "malf" = 'sound/vox_fem/malf.ogg', "malfunction" = 'sound/vox_fem/malfunction.ogg', "malfunctioning" = 'sound/vox_fem/malfunctioning.ogg', "man" = 'sound/vox_fem/man.ogg', +"many" = 'sound/vox_fem/many.ogg', "mass" = 'sound/vox_fem/mass.ogg', "materials" = 'sound/vox_fem/materials.ogg', "maximum" = 'sound/vox_fem/maximum.ogg', "may" = 'sound/vox_fem/may.ogg', +"maybe" = 'sound/vox_fem/maybe.ogg', "me" = 'sound/vox_fem/me.ogg', +"mean" = 'sound/vox_fem/mean.ogg', +"meaning" = 'sound/vox_fem/meaning.ogg', +"meant" = 'sound/vox_fem/meant.ogg', "medbay" = 'sound/vox_fem/medbay.ogg', "medical" = 'sound/vox_fem/medical.ogg', +"member" = 'sound/vox_fem/member.ogg', +"members" = 'sound/vox_fem/members.ogg', "men" = 'sound/vox_fem/men.ogg', "mercy" = 'sound/vox_fem/mercy.ogg', "mesa" = 'sound/vox_fem/mesa.ogg', "message" = 'sound/vox_fem/message.ogg', "meter" = 'sound/vox_fem/meter.ogg', +"mice" = 'sound/vox_fem/mice.ogg', "micro" = 'sound/vox_fem/micro.ogg', "middle" = 'sound/vox_fem/middle.ogg', +"might" = 'sound/vox_fem/might.ogg', "mike" = 'sound/vox_fem/mike.ogg', "miles" = 'sound/vox_fem/miles.ogg', "military" = 'sound/vox_fem/military.ogg', @@ -513,15 +722,25 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "money" = 'sound/vox_fem/money.ogg', "monkey" = 'sound/vox_fem/monkey.ogg', "monkeys" = 'sound/vox_fem/monkeys.ogg', +"morgue" = 'sound/vox_fem/morgue.ogg', "motor" = 'sound/vox_fem/motor.ogg', "motorpool" = 'sound/vox_fem/motorpool.ogg', +"mouse" = 'sound/vox_fem/mouse.ogg', "move" = 'sound/vox_fem/move.ogg', "must" = 'sound/vox_fem/must.ogg', "my" = 'sound/vox_fem/my.ogg', "n" = 'sound/vox_fem/n.ogg', "n2o" = 'sound/vox_fem/n2o.ogg', +"nanny" = 'sound/vox_fem/nanny.ogg', "nanotrasen" = 'sound/vox_fem/nanotrasen.ogg', +"naughty" = 'sound/vox_fem/naughty.ogg', +"near" = 'sound/vox_fem/near.ogg', "nearest" = 'sound/vox_fem/nearest.ogg', +"nearing" = 'sound/vox_fem/nearing.ogg', +"need" = 'sound/vox_fem/need.ogg', +"needed" = 'sound/vox_fem/needed.ogg', +"needing" = 'sound/vox_fem/needing.ogg', +"needy" = 'sound/vox_fem/needy.ogg', "negative" = 'sound/vox_fem/negative.ogg', "nice" = 'sound/vox_fem/nice.ogg', "nine" = 'sound/vox_fem/nine.ogg', @@ -533,20 +752,31 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "nominal" = 'sound/vox_fem/nominal.ogg', "north" = 'sound/vox_fem/north.ogg', "not" = 'sound/vox_fem/not.ogg', +"notified" = 'sound/vox_fem/notified.ogg', +"notify" = 'sound/vox_fem/notify.ogg', "november" = 'sound/vox_fem/november.ogg', "now" = 'sound/vox_fem/now.ogg', "nuke" = 'sound/vox_fem/nuke.ogg', "number" = 'sound/vox_fem/number.ogg', +"nurse" = 'sound/vox_fem/nurse.ogg', "o" = 'sound/vox_fem/o.ogg', "objective" = 'sound/vox_fem/objective.ogg', "observation" = 'sound/vox_fem/observation.ogg', "obtain" = 'sound/vox_fem/obtain.ogg', "of" = 'sound/vox_fem/of.ogg', +"offer" = 'sound/vox_fem/offer.ogg', +"offered" = 'sound/vox_fem/offered.ogg', +"offering" = 'sound/vox_fem/offering.ogg', +"offers" = 'sound/vox_fem/offers.ogg', "office" = 'sound/vox_fem/office.ogg', "officer" = 'sound/vox_fem/officer.ogg', +"officers" = 'sound/vox_fem/officers.ogg', +"offline" = 'sound/vox_fem/offline.ogg', "ok" = 'sound/vox_fem/ok.ogg', +"okay" = 'sound/vox_fem/okay.ogg', "on" = 'sound/vox_fem/on.ogg', "one" = 'sound/vox_fem/one.ogg', +"only" = 'sound/vox_fem/only.ogg', "op" = 'sound/vox_fem/op.ogg', "open" = 'sound/vox_fem/open.ogg', "operating" = 'sound/vox_fem/operating.ogg', @@ -559,16 +789,26 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "order" = 'sound/vox_fem/order.ogg', "organic" = 'sound/vox_fem/organic.ogg', "oscar" = 'sound/vox_fem/oscar.ogg', +"other" = 'sound/vox_fem/other.ogg', +"others" = 'sound/vox_fem/others.ogg', +"ouch" = 'sound/vox_fem/ouch.ogg', "out" = 'sound/vox_fem/out.ogg', "outside" = 'sound/vox_fem/outside.ogg', "over" = 'sound/vox_fem/over.ogg', "overload" = 'sound/vox_fem/overload.ogg', "override" = 'sound/vox_fem/override.ogg', "p" = 'sound/vox_fem/p.ogg', +"pacifist" = 'sound/vox_fem/pacifist.ogg', "pacify" = 'sound/vox_fem/pacify.ogg', "pain" = 'sound/vox_fem/pain.ogg', "pal" = 'sound/vox_fem/pal.ogg', "panel" = 'sound/vox_fem/panel.ogg', +"paramedic" = 'sound/vox_fem/paramedic.ogg', +"pass" = 'sound/vox_fem/pass.ogg', +"passed" = 'sound/vox_fem/passed.ogg', +"passes" = 'sound/vox_fem/passes.ogg', +"passing" = 'sound/vox_fem/passing.ogg', +"passive" = 'sound/vox_fem/passive.ogg', "percent" = 'sound/vox_fem/percent.ogg', "perimeter" = 'sound/vox_fem/perimeter.ogg', "permitted" = 'sound/vox_fem/permitted.ogg', @@ -576,8 +816,12 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "pipe" = 'sound/vox_fem/pipe.ogg', "plant" = 'sound/vox_fem/plant.ogg', "plasma" = 'sound/vox_fem/plasma.ogg', +"plasmaman" = 'sound/vox_fem/plasmaman.ogg', +"plasmamen" = 'sound/vox_fem/plasmamen.ogg', +"plastic" = 'sound/vox_fem/plastic.ogg', "platform" = 'sound/vox_fem/platform.ogg', "please" = 'sound/vox_fem/please.ogg', +"pleasure" = 'sound/vox_fem/pleasure.ogg', "pod" = 'sound/vox_fem/pod.ogg', "pods" = 'sound/vox_fem/pods.ogg', "point" = 'sound/vox_fem/point.ogg', @@ -595,6 +839,9 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "propulsion" = 'sound/vox_fem/propulsion.ogg', "prosecute" = 'sound/vox_fem/prosecute.ogg', "protective" = 'sound/vox_fem/protective.ogg', +"pull" = 'sound/vox_fem/pull.ogg', +"pulled" = 'sound/vox_fem/pulled.ogg', +"pulling" = 'sound/vox_fem/pulling.ogg', "pun" = 'sound/vox_fem/pun.ogg', "push" = 'sound/vox_fem/push.ogg', "q" = 'sound/vox_fem/q.ogg', @@ -606,6 +853,7 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "question" = 'sound/vox_fem/question.ogg', "questioning" = 'sound/vox_fem/questioning.ogg', "quick" = 'sound/vox_fem/quick.ogg', +"quickly" = 'sound/vox_fem/quickly.ogg', "quit" = 'sound/vox_fem/quit.ogg', "r" = 'sound/vox_fem/r.ogg', "radiation" = 'sound/vox_fem/radiation.ogg', @@ -619,10 +867,17 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "reach" = 'sound/vox_fem/reach.ogg', "reached" = 'sound/vox_fem/reached.ogg', "reactor" = 'sound/vox_fem/reactor.ogg', +"real" = 'sound/vox_fem/real.ogg', +"reality" = 'sound/vox_fem/reality.ogg', +"reboot" = 'sound/vox_fem/reboot.ogg', +"rebooted" = 'sound/vox_fem/rebooted.ogg', +"rebooting" = 'sound/vox_fem/rebooting.ogg', "recommend" = 'sound/vox_fem/recommend.ogg', "red" = 'sound/vox_fem/red.ogg', "relay" = 'sound/vox_fem/relay.ogg', +"release" = 'sound/vox_fem/release.ogg', "released" = 'sound/vox_fem/released.ogg', +"releasing" = 'sound/vox_fem/releasing.ogg', "remaining" = 'sound/vox_fem/remaining.ogg', "removal" = 'sound/vox_fem/removal.ogg', "renault" = 'sound/vox_fem/renault.ogg', @@ -638,7 +893,11 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "resevoir" = 'sound/vox_fem/resevoir.ogg', "resistance" = 'sound/vox_fem/resistance.ogg', "respond" = 'sound/vox_fem/respond.ogg', +"responded" = 'sound/vox_fem/responded.ogg', +"response" = 'sound/vox_fem/response.ogg', "rest" = 'sound/vox_fem/rest.ogg', +"revenant" = 'sound/vox_fem/revenant.ogg', +"revenge" = 'sound/vox_fem/revenge.ogg', "right" = 'sound/vox_fem/right.ogg', "roboticist" = 'sound/vox_fem/roboticist.ogg', "robotics" = 'sound/vox_fem/robotics.ogg', @@ -651,13 +910,23 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "run" = 'sound/vox_fem/run.ogg', "runtime" = 'sound/vox_fem/runtime.ogg', "s" = 'sound/vox_fem/s.ogg', +"sad" = 'sound/vox_fem/sad.ogg', +"saddened" = 'sound/vox_fem/saddened.ogg', +"saddening" = 'sound/vox_fem/saddening.ogg', "safe" = 'sound/vox_fem/safe.ogg', "safety" = 'sound/vox_fem/safety.ogg', +"said" = 'sound/vox_fem/said.ogg', "sarah" = 'sound/vox_fem/sarah.ogg', "sargeant" = 'sound/vox_fem/sargeant.ogg', +"sat" = 'sound/vox_fem/sat.ogg', "satellite" = 'sound/vox_fem/satellite.ogg', "save" = 'sound/vox_fem/save.ogg', +"saved" = 'sound/vox_fem/saved.ogg', +"say" = 'sound/vox_fem/say.ogg', +"saying" = 'sound/vox_fem/saying.ogg', "science" = 'sound/vox_fem/science.ogg', +"scientist" = 'sound/vox_fem/scientist.ogg', +"scientists" = 'sound/vox_fem/scientists.ogg', "scream" = 'sound/vox_fem/scream.ogg', "screen" = 'sound/vox_fem/screen.ogg', "scrubbers" = 'sound/vox_fem/scrubbers.ogg', @@ -671,16 +940,33 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "security" = 'sound/vox_fem/security.ogg', "select" = 'sound/vox_fem/select.ogg', "selected" = 'sound/vox_fem/selected.ogg', +"sell" = 'sound/vox_fem/sell.ogg', +"selling" = 'sound/vox_fem/selling.ogg', +"sense" = 'sound/vox_fem/sense.ogg', +"sensed" = 'sound/vox_fem/sensed.ogg', +"sensing" = 'sound/vox_fem/sensing.ogg', +"sensitive" = 'sound/vox_fem/sensitive.ogg', +"sensitivity" = 'sound/vox_fem/sensitivity.ogg', "sensors" = 'sound/vox_fem/sensors.ogg', "sequencer" = 'sound/vox_fem/sequencer.ogg', +"server" = 'sound/vox_fem/server.ogg', +"servers" = 'sound/vox_fem/servers.ogg', "service" = 'sound/vox_fem/service.ogg', +"serviced" = 'sound/vox_fem/serviced.ogg', +"servicing" = 'sound/vox_fem/servicing.ogg', "seven" = 'sound/vox_fem/seven.ogg', "seventeen" = 'sound/vox_fem/seventeen.ogg', "seventy" = 'sound/vox_fem/seventy.ogg', "severe" = 'sound/vox_fem/severe.ogg', "sewage" = 'sound/vox_fem/sewage.ogg', "sewer" = 'sound/vox_fem/sewer.ogg', +"shadow" = 'sound/vox_fem/shadow.ogg', +"shadowling" = 'sound/vox_fem/shadowling.ogg', +"shadowlings" = 'sound/vox_fem/shadowlings.ogg', +"she" = 'sound/vox_fem/she.ogg', "shield" = 'sound/vox_fem/shield.ogg', +"shielded" = 'sound/vox_fem/shielded.ogg', +"shielding" = 'sound/vox_fem/shielding.ogg', "shipment" = 'sound/vox_fem/shipment.ogg', "shirt" = 'sound/vox_fem/shirt.ogg', "shirts" = 'sound/vox_fem/shirts.ogg', @@ -691,7 +977,11 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "shitting" = 'sound/vox_fem/shitting.ogg', "shock" = 'sound/vox_fem/shock.ogg', "shoot" = 'sound/vox_fem/shoot.ogg', +"should" = 'sound/vox_fem/should.ogg', "shower" = 'sound/vox_fem/shower.ogg', +"shrug" = 'sound/vox_fem/shrug.ogg', +"shrugged" = 'sound/vox_fem/shrugged.ogg', +"shrugging" = 'sound/vox_fem/shrugging.ogg', "shut" = 'sound/vox_fem/shut.ogg', "shuttle" = 'sound/vox_fem/shuttle.ogg', "side" = 'sound/vox_fem/side.ogg', @@ -699,6 +989,8 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "sight" = 'sound/vox_fem/sight.ogg', "silo" = 'sound/vox_fem/silo.ogg', "singularity" = 'sound/vox_fem/singularity.ogg', +"sit" = 'sound/vox_fem/sit.ogg', +"sitting" = 'sound/vox_fem/sitting.ogg', "six" = 'sound/vox_fem/six.ogg', "sixteen" = 'sound/vox_fem/sixteen.ogg', "sixty" = 'sound/vox_fem/sixty.ogg', @@ -709,18 +1001,25 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "slime" = 'sound/vox_fem/slime.ogg', "slow" = 'sound/vox_fem/slow.ogg', "smoke" = 'sound/vox_fem/smoke.ogg', +"so" = 'sound/vox_fem/so.ogg', "solar" = 'sound/vox_fem/solar.ogg', "solars" = 'sound/vox_fem/solars.ogg', +"sold" = 'sound/vox_fem/sold.ogg', "soldier" = 'sound/vox_fem/soldier.ogg', "some" = 'sound/vox_fem/some.ogg', "someone" = 'sound/vox_fem/someone.ogg', "something" = 'sound/vox_fem/something.ogg', "son" = 'sound/vox_fem/son.ogg', +"soon" = 'sound/vox_fem/soon.ogg', "sorry" = 'sound/vox_fem/sorry.ogg', "south" = 'sound/vox_fem/south.ogg', "space" = 'sound/vox_fem/space.ogg', +"speak" = 'sound/vox_fem/speak.ogg', +"speaking" = 'sound/vox_fem/speaking.ogg', "spider" = 'sound/vox_fem/spider.ogg', "spiders" = 'sound/vox_fem/spiders.ogg', +"spoke" = 'sound/vox_fem/spoke.ogg', +"spoken" = 'sound/vox_fem/spoken.ogg', "squad" = 'sound/vox_fem/squad.ogg', "square" = 'sound/vox_fem/square.ogg', "ss13" = 'sound/vox_fem/ss13.ogg', @@ -728,22 +1027,33 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "starboard" = 'sound/vox_fem/starboard.ogg', "station" = 'sound/vox_fem/station.ogg', "stations" = 'sound/vox_fem/stations.ogg', +"statue" = 'sound/vox_fem/statue.ogg', "status" = 'sound/vox_fem/status.ogg', "sterile" = 'sound/vox_fem/sterile.ogg', "sterilization" = 'sound/vox_fem/sterilization.ogg', "still" = 'sound/vox_fem/still.ogg', "storage" = 'sound/vox_fem/storage.ogg', +"strong" = 'sound/vox_fem/strong.ogg', "stuck" = 'sound/vox_fem/stuck.ogg', +"stuff" = 'sound/vox_fem/stuff.ogg', +"stuffed" = 'sound/vox_fem/stuffed.ogg', +"stuffing" = 'sound/vox_fem/stuffing.ogg', "stupid" = 'sound/vox_fem/stupid.ogg', "sub" = 'sound/vox_fem/sub.ogg', +"subject" = 'sound/vox_fem/subject.ogg', +"subjected" = 'sound/vox_fem/subjected.ogg', +"subjecting" = 'sound/vox_fem/subjecting.ogg', "subsurface" = 'sound/vox_fem/subsurface.ogg', "sudden" = 'sound/vox_fem/sudden.ogg', "suffer" = 'sound/vox_fem/suffer.ogg', "suffering" = 'sound/vox_fem/suffering.ogg', "suit" = 'sound/vox_fem/suit.ogg', +"suited" = 'sound/vox_fem/suited.ogg', +"suiting" = 'sound/vox_fem/suiting.ogg', "superconducting" = 'sound/vox_fem/superconducting.ogg', "supercooled" = 'sound/vox_fem/supercooled.ogg', "supply" = 'sound/vox_fem/supply.ogg', +"sure" = 'sound/vox_fem/sure.ogg', "surface" = 'sound/vox_fem/surface.ogg', "surrender" = 'sound/vox_fem/surrender.ogg', "surround" = 'sound/vox_fem/surround.ogg', @@ -759,17 +1069,26 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "tactical" = 'sound/vox_fem/tactical.ogg', "tajaran" = 'sound/vox_fem/tajaran.ogg', "take" = 'sound/vox_fem/take.ogg', +"taken" = 'sound/vox_fem/taken.ogg', "talk" = 'sound/vox_fem/talk.ogg', "tango" = 'sound/vox_fem/tango.ogg', "tank" = 'sound/vox_fem/tank.ogg', "target" = 'sound/vox_fem/target.ogg', +"taze" = 'sound/vox_fem/taze.ogg', +"tazed" = 'sound/vox_fem/tazed.ogg', +"tazer" = 'sound/vox_fem/tazer.ogg', +"tazing" = 'sound/vox_fem/tazing.ogg', "team" = 'sound/vox_fem/team.ogg', +"tech" = 'sound/vox_fem/tech.ogg', +"technician" = 'sound/vox_fem/technician.ogg', +"technicians" = 'sound/vox_fem/technicians.ogg', "technology" = 'sound/vox_fem/technology.ogg', "telecomms" = 'sound/vox_fem/telecomms.ogg', "teleport" = 'sound/vox_fem/teleport.ogg', "teleported" = 'sound/vox_fem/teleported.ogg', "teleporter" = 'sound/vox_fem/teleporter.ogg', "teleporting" = 'sound/vox_fem/teleporting.ogg', +"tell" = 'sound/vox_fem/tell.ogg', "temperature" = 'sound/vox_fem/temperature.ogg', "temporal" = 'sound/vox_fem/temporal.ogg', "ten" = 'sound/vox_fem/ten.ogg', @@ -778,15 +1097,23 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "termination" = 'sound/vox_fem/termination.ogg', "tesla" = 'sound/vox_fem/tesla.ogg', "test" = 'sound/vox_fem/test.ogg', +"thank" = 'sound/vox_fem/thank.ogg', +"thanked" = 'sound/vox_fem/thanked.ogg', +"thanks" = 'sound/vox_fem/thanks.ogg', "that" = 'sound/vox_fem/that.ogg', "the" = 'sound/vox_fem/the.ogg', +"them" = 'sound/vox_fem/them.ogg', "then" = 'sound/vox_fem/then.ogg', "there" = 'sound/vox_fem/there.ogg', +"they" = 'sound/vox_fem/they.ogg', +"think" = 'sound/vox_fem/think.ogg', +"thinking" = 'sound/vox_fem/thinking.ogg', "third" = 'sound/vox_fem/third.ogg', "thirteen" = 'sound/vox_fem/thirteen.ogg', "thirty" = 'sound/vox_fem/thirty.ogg', "this" = 'sound/vox_fem/this.ogg', "those" = 'sound/vox_fem/those.ogg', +"thought" = 'sound/vox_fem/thought.ogg', "thousand" = 'sound/vox_fem/thousand.ogg', "threat" = 'sound/vox_fem/threat.ogg', "three" = 'sound/vox_fem/three.ogg', @@ -794,9 +1121,11 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "tide" = 'sound/vox_fem/tide.ogg', "time" = 'sound/vox_fem/time.ogg', "to" = 'sound/vox_fem/to.ogg', +"took" = 'sound/vox_fem/took.ogg', "tool" = 'sound/vox_fem/tool.ogg', "top" = 'sound/vox_fem/top.ogg', "topside" = 'sound/vox_fem/topside.ogg', +"tosser" = 'sound/vox_fem/tosser.ogg', "touch" = 'sound/vox_fem/touch.ogg', "towards" = 'sound/vox_fem/towards.ogg', "toxins" = 'sound/vox_fem/toxins.ogg', @@ -817,8 +1146,16 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "unathi" = 'sound/vox_fem/unathi.ogg', "unauthorized" = 'sound/vox_fem/unauthorized.ogg', "under" = 'sound/vox_fem/under.ogg', +"unidentified" = 'sound/vox_fem/unidentified.ogg', "uniform" = 'sound/vox_fem/uniform.ogg', +"unit" = 'sound/vox_fem/unit.ogg', +"unite" = 'sound/vox_fem/unite.ogg', +"united" = 'sound/vox_fem/united.ogg', +"uniting" = 'sound/vox_fem/uniting.ogg', +"unknown" = 'sound/vox_fem/unknown.ogg', +"unknowns" = 'sound/vox_fem/unknowns.ogg', "unlocked" = 'sound/vox_fem/unlocked.ogg', +"unsure" = 'sound/vox_fem/unsure.ogg', "until" = 'sound/vox_fem/until.ogg', "up" = 'sound/vox_fem/up.ogg', "update" = 'sound/vox_fem/update.ogg', @@ -841,34 +1178,54 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "vapor" = 'sound/vox_fem/vapor.ogg', "vault" = 'sound/vox_fem/vault.ogg', "vent" = 'sound/vox_fem/vent.ogg', +"vented" = 'sound/vox_fem/vented.ogg', "ventilation" = 'sound/vox_fem/ventilation.ogg', +"venting" = 'sound/vox_fem/venting.ogg', "vents" = 'sound/vox_fem/vents.ogg', "victor" = 'sound/vox_fem/victor.ogg', "violated" = 'sound/vox_fem/violated.ogg', "violation" = 'sound/vox_fem/violation.ogg', +"virologist" = 'sound/vox_fem/virologist.ogg', "virology" = 'sound/vox_fem/virology.ogg', +"virus" = 'sound/vox_fem/virus.ogg', +"viruses" = 'sound/vox_fem/viruses.ogg', "voltage" = 'sound/vox_fem/voltage.ogg', "vox" = 'sound/vox_fem/vox.ogg', "vox_login" = 'sound/vox_fem/vox_login.ogg', +"voxy" = 'sound/vox_fem/voxy.ogg', "vulpkanin" = 'sound/vox_fem/vulpkanin.ogg', "w" = 'sound/vox_fem/w.ogg', +"wait" = 'sound/vox_fem/wait.ogg', +"waited" = 'sound/vox_fem/waited.ogg', +"waiter" = 'sound/vox_fem/waiter.ogg', +"waiting" = 'sound/vox_fem/waiting.ogg', "walk" = 'sound/vox_fem/walk.ogg', "wall" = 'sound/vox_fem/wall.ogg', "wanker" = 'sound/vox_fem/wanker.ogg', "wankers" = 'sound/vox_fem/wankers.ogg', "want" = 'sound/vox_fem/want.ogg', "wanted" = 'sound/vox_fem/wanted.ogg', +"wanting" = 'sound/vox_fem/wanting.ogg', +"wants" = 'sound/vox_fem/wants.ogg', "warm" = 'sound/vox_fem/warm.ogg', "warn" = 'sound/vox_fem/warn.ogg', "warning" = 'sound/vox_fem/warning.ogg', +"was" = 'sound/vox_fem/was.ogg', "waste" = 'sound/vox_fem/waste.ogg', "water" = 'sound/vox_fem/water.ogg', +"way" = 'sound/vox_fem/way.ogg', "we" = 'sound/vox_fem/we.ogg', "weapon" = 'sound/vox_fem/weapon.ogg', +"wear" = 'sound/vox_fem/wear.ogg', "weed" = 'sound/vox_fem/weed.ogg', "welcome" = 'sound/vox_fem/welcome.ogg', "weld" = 'sound/vox_fem/weld.ogg', +"welded" = 'sound/vox_fem/welded.ogg', +"welder" = 'sound/vox_fem/welder.ogg', +"welding" = 'sound/vox_fem/welding.ogg', "west" = 'sound/vox_fem/west.ogg', +"what" = 'sound/vox_fem/what.ogg', +"where" = 'sound/vox_fem/where.ogg', "whiskey" = 'sound/vox_fem/whiskey.ogg', "white" = 'sound/vox_fem/white.ogg', "wiggle" = 'sound/vox_fem/wiggle.ogg', @@ -876,6 +1233,9 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "will" = 'sound/vox_fem/will.ogg', "window" = 'sound/vox_fem/window.ogg', "windows" = 'sound/vox_fem/windows.ogg', +"wish" = 'sound/vox_fem/wish.ogg', +"wished" = 'sound/vox_fem/wished.ogg', +"wishing" = 'sound/vox_fem/wishing.ogg', "with" = 'sound/vox_fem/with.ogg', "without" = 'sound/vox_fem/without.ogg', "wizard" = 'sound/vox_fem/wizard.ogg', @@ -883,6 +1243,11 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "wood" = 'sound/vox_fem/wood.ogg', "woody" = 'sound/vox_fem/woody.ogg', "woop" = 'sound/vox_fem/woop.ogg', +"work" = 'sound/vox_fem/work.ogg', +"worked" = 'sound/vox_fem/worked.ogg', +"working" = 'sound/vox_fem/working.ogg', +"works" = 'sound/vox_fem/works.ogg', +"wow" = 'sound/vox_fem/wow.ogg', "x" = 'sound/vox_fem/x.ogg', "xeno" = 'sound/vox_fem/xeno.ogg', "xenobiology" = 'sound/vox_fem/xenobiology.ogg', @@ -901,5 +1266,5 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg', "z" = 'sound/vox_fem/z.ogg', "zero" = 'sound/vox_fem/zero.ogg', "zone" = 'sound/vox_fem/zone.ogg', -"zulu" = 'sound/vox_fem/zulu.ogg', +"zulu" = 'sound/vox_fem/zulu.ogg' ) \ No newline at end of file diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 5ca34ceb57e..4398229391b 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -150,9 +150,11 @@ //Hook for running code when a dir change occurs /atom/proc/setDir(newdir) + SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir) dir = newdir /atom/proc/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) + SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user) if(does_attack_animation) user.changeNext_move(CLICK_CD_MELEE) add_attack_logs(user, src, "Punched with hulk powers") @@ -305,8 +307,8 @@ /atom/proc/ex_act() return -/atom/proc/blob_act() - return +/atom/proc/blob_act(obj/structure/blob/B) + SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, B) /atom/proc/fire_act() return @@ -734,3 +736,14 @@ var/list/blood_splatter_icons = list() if(!L) return null return L.AllowDrop() ? L : get_turf(L) + +/atom/Entered(atom/movable/AM, atom/oldLoc) + SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, AM, oldLoc) + +/atom/Exit(atom/movable/AM, atom/newLoc) + . = ..() + if(SEND_SIGNAL(src, COMSIG_ATOM_EXIT, AM, newLoc) & COMPONENT_ATOM_BLOCK_EXIT) + return FALSE + +/atom/Exited(atom/movable/AM, atom/newLoc) + SEND_SIGNAL(src, COMSIG_ATOM_EXITED, AM, newLoc) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 36d3ce81ea2..a5d2366c46c 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -126,10 +126,11 @@ // Previously known as HasEntered() // This is automatically called when something enters your square /atom/movable/Crossed(atom/movable/AM) - return + SEND_SIGNAL(src, COMSIG_MOVABLE_CROSSED, AM) /atom/movable/Bump(atom/A, yes) //the "yes" arg is to differentiate our Bump proc from byond's, without it every Bump() call would become a double Bump(). if(A && yes) + SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, A) if(throwing) throwing.hit_atom(A) . = 1 @@ -213,6 +214,7 @@ //called when src is thrown into hit_atom /atom/movable/proc/throw_impact(atom/hit_atom, throwingdatum) set waitfor = 0 + SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) if(!QDELETED(hit_atom)) return hit_atom.hitby(src) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 6d0084b9000..493c0da90c9 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -19,7 +19,7 @@ src.update_icon() ..(loc) for(var/atom/A in loc) - A.blob_act() + A.blob_act(src) return @@ -126,7 +126,7 @@ qdel(B) for(var/atom/A in T)//Hit everything in the turf - A.blob_act() + A.blob_act(src) return 1 /obj/structure/blob/ex_act(severity) @@ -141,7 +141,7 @@ /obj/structure/blob/Crossed(var/mob/living/L) ..() - L.blob_act() + L.blob_act(src) /obj/structure/blob/tesla_act(power) ..() diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm index 1bae809c720..6f6ea6ca67a 100644 --- a/code/game/jobs/job/central.dm +++ b/code/game/jobs/job/central.dm @@ -85,7 +85,6 @@ ) cybernetic_implants = list( /obj/item/organ/internal/cyberimp/eyes/xray, - /obj/item/organ/internal/cyberimp/brain/anti_drop, /obj/item/organ/internal/cyberimp/brain/anti_stun, /obj/item/organ/internal/cyberimp/chest/nutriment/plus, /obj/item/organ/internal/cyberimp/arm/combat/centcom diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 2e41ec49c0a..61547f270bf 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -57,14 +57,14 @@ output &= ~bitflag_value else//can't not be off output |= bitflag_value - return MT_UPDATE + return TRUE if("toggle_bolts" in href_list) bolts = !bolts if(bolts) visible_message("You hear a quite click as the [src] bolts to the floor", "You hear a quite click") else visible_message("You hear a quite click as the [src]'s floor bolts raise", "You hear a quite click") - return MT_UPDATE + return TRUE /obj/machinery/air_sensor/attackby(var/obj/item/W as obj, var/mob/user as mob) if(istype(W, /obj/item/multitool)) @@ -301,19 +301,19 @@ sensor_list|=G.id_tag if(!sensor_list.len) to_chat(user, "No sensors on this frequency.") - return MT_ERROR + return FALSE // Have the user pick one of them and name its label var/sensor = input(user, "Select a sensor:", "Sensor Data") as null|anything in sensor_list if(!sensor) - return MT_ERROR + return FALSE var/label = reject_bad_name( input(user, "Choose a sensor label:", "Sensor Label") as text|null, allow_numbers=1) if(!label) - return MT_ERROR + return FALSE // Add the sensor's information to general_air_controler sensors[sensor] = label - return MT_UPDATE + return TRUE if("edit_sensor" in href_list) var/list/sensor_list = list() @@ -322,14 +322,14 @@ sensor_list|=G.id_tag if(!sensor_list.len) to_chat(user, "No sensors on this frequency.") - return MT_ERROR + return FALSE var/label = sensors[href_list["edit_sensor"]] var/sensor = input(user, "Select a sensor:", "Sensor Data", href_list["edit_sensor"]) as null|anything in sensor_list if(!sensor) - return MT_ERROR + return FALSE sensors.Remove(href_list["edit_sensor"]) sensors[sensor] = label - return MT_UPDATE + return TRUE /obj/machinery/computer/general_air_control/unlinkFrom(mob/user, obj/O) ..() diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index d3d23e96bba..dba1d942e2d 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -4,17 +4,17 @@ icon = 'icons/obj/meter.dmi' icon_state = "meterX" var/obj/machinery/atmospherics/pipe/target = null - anchored = 1 + anchored = TRUE armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100) power_channel = ENVIRON - var/frequency = 0 + var/frequency = ATMOS_DISTRO_FREQ var/id var/id_tag use_power = IDLE_POWER_USE idle_power_usage = 2 active_power_usage = 5 req_one_access_txt = "24;10" - Mtoollink = 1 + Mtoollink = TRUE settagwhitelist = list("id_tag") /obj/machinery/meter/New() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index b0ab09be91b..553016400ad 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -222,11 +222,11 @@ Class Procs: var/newid = copytext(reject_bad_text(input(usr, "Specify the new ID tag for this machine", src, src:id_tag) as null|text),1,MAX_MESSAGE_LEN) if(newid) src:id_tag = newid - return MT_UPDATE|MT_REINIT + return TRUE if("set_freq" in href_list) if(!("frequency" in vars)) warning("set_freq: [type] has no frequency var.") - return 0 + return FALSE var/newfreq=src:frequency if(href_list["set_freq"]!="-1") newfreq=text2num(href_list["set_freq"]) @@ -235,90 +235,81 @@ Class Procs: if(newfreq) if(findtext(num2text(newfreq), ".")) newfreq *= 10 // shift the decimal one place - if(newfreq < 10000) - src:frequency = newfreq - return MT_UPDATE|MT_REINIT - return 0 + src:frequency = sanitize_frequency(newfreq, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) + return TRUE + return FALSE /obj/machinery/proc/handle_multitool_topic(var/href, var/list/href_list, var/mob/user) if(!allowed(user))//no, not even HREF exploits - return 0 + return FALSE var/obj/item/multitool/P = get_multitool(usr) if(P && istype(P)) - var/update_mt_menu=0 - var/re_init=0 + var/update_mt_menu = FALSE if("set_tag" in href_list) if(!(href_list["set_tag"] in settagwhitelist))//I see you're trying Href exploits, I see you're failing, I SEE ADMIN WARNING. (seriously though, this is a powerfull HREF, I originally found this loophole, I'm not leaving it in on my PR) message_admins("set_tag HREF (var attempted to edit: [href_list["set_tag"]]) exploit attempted by [key_name_admin(user)] on [src] (JMP)") - return 1 + return FALSE if(!(href_list["set_tag"] in vars)) to_chat(usr, "Something went wrong: Unable to find [href_list["set_tag"]] in vars!") - return 1 + return FALSE var/current_tag = vars[href_list["set_tag"]] var/newid = copytext(reject_bad_text(input(usr, "Specify the new value", src, current_tag) as null|text),1,MAX_MESSAGE_LEN) if(newid) vars[href_list["set_tag"]] = newid - re_init=1 + update_mt_menu = TRUE if("unlink" in href_list) var/idx = text2num(href_list["unlink"]) if(!idx) - return 1 + return FALSE var/obj/O = getLink(idx) if(!O) - return 1 + return FALSE if(!canLink(O)) to_chat(usr, "You can't link with that device.") - return 1 + return FALSE if(unlinkFrom(usr, O)) to_chat(usr, "A green light flashes on \the [P], confirming the link was removed.") else to_chat(usr, "A red light flashes on \the [P]. It appears something went wrong when unlinking the two devices.") - update_mt_menu=1 + update_mt_menu = TRUE if("link" in href_list) var/obj/O = P.buffer if(!O) - return 1 + return FALSE if(!canLink(O,href_list)) to_chat(usr, "You can't link with that device.") - return 1 + return FALSE if(isLinkedWith(O)) to_chat(usr, "A red light flashes on \the [P]. The two devices are already linked.") - return 1 + return FALSE if(linkWith(usr, O, href_list)) to_chat(usr, "A green light flashes on \the [P], confirming the link was added.") else to_chat(usr, "A red light flashes on \the [P]. It appears something went wrong when linking the two devices.") - update_mt_menu=1 + update_mt_menu = TRUE if("buffer" in href_list) P.buffer = src to_chat(usr, "A green light flashes, and the device appears in the multitool buffer.") - update_mt_menu=1 + update_mt_menu = TRUE if("flush" in href_list) to_chat(usr, "A green light flashes, and the device disappears from the multitool buffer.") P.buffer = null - update_mt_menu=1 + update_mt_menu = TRUE var/ret = multitool_topic(usr,href_list,P.buffer) - if(ret == MT_ERROR) - return 1 - if(ret & MT_UPDATE) - update_mt_menu=1 - if(ret & MT_REINIT) - re_init=1 + if(ret) + update_mt_menu = TRUE - if(re_init) - Initialize() if(update_mt_menu) - //usr.set_machine(src) update_multitool_menu(usr) - return 1 + return TRUE /obj/machinery/Topic(href, href_list, var/nowindow = 0, var/datum/topic_state/state = default_state) if(..(href, href_list, nowindow, state)) diff --git a/code/game/machinery/telecomms/ntsl2.dm b/code/game/machinery/telecomms/ntsl2.dm index ee9fabd272a..fa76f98ec39 100644 --- a/code/game/machinery/telecomms/ntsl2.dm +++ b/code/game/machinery/telecomms/ntsl2.dm @@ -1,3 +1,7 @@ +#define JOB_STYLE_1 "Name (Job)" +#define JOB_STYLE_2 "Name - Job" +#define JOB_STYLE_3 "\[Job\] Name" +#define JOB_STYLE_4 "(Job) Name" GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) // Custom Implementations for NTTC /* NTTC Configuration Datum @@ -5,16 +9,125 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) * as well as allowing users to save and load configurations. */ /datum/nttc_configuration + // ALL OF THE JOB CRAP + // Dict of all jobs and their colors + var/all_jobs = list( + // AI + "AI" = "#FF00FF", + "Android" = "#FF00FF", + "Cyborg" = "#FF00FF", + "Personal AI" = "#FF00FF", + "Robot" = "#FF00FF", + // Civilian + Varients + "Assistant" = "#408010", + "Businessman" = "#408010", + "Civilian" = "#408010", + "Tourist" = "#408010", + "Trader" = "#408010", + // Command (Solo command, not department heads) + "Blueshield" = "#204090", + "Captain" = "#204090", + "Head of Personnel" = "#204090", + "Nanotrasen Representative" = "#204090", + // Engineeering + "Atmospheric Technician" = "#A66300", + "Chief Engineer" = "#A66300", + "Electrician" = "#A66300", + "Engine Technician" = "#A66300", + "Life Support Specialist" = "#A66300", + "Maintenance Technician" = "#A66300", + "Mechanic" = "#A66300", + "Station Engineer" = "#A66300", + // ERT + "Emergency Response Team Engineer" = "#5C5C7C", + "Emergency Response Team Leader" = "#5C5C7C", + "Emergency Response Team Medic" = "#5C5C7C", + "Emergency Response Team Member" = "#5C5C7C", + "Emergency Response Team Officer" = "#5C5C7C", + // Medical + "Chemist" = "#009190", + "Chief Medical Officer" = "#009190", + "Coroner" = "#009190", + "Medical Doctor" = "#009190", + "Microbiologist" = "#009190", + "Nurse" = "#009190", + "Paramedic" = "#009190", + "Pharmacologist" = "#009190", + "Pharmacist" = "#009190", + "Psychiatrist" = "#009190", + "Psychologist" = "#009190", + "Surgeon" = "#009190", + "Therapist" = "#009190", + "Virologist" = "#009190", + // Science + "Anomalist" = "#993399", + "Biomechanical Engineer" = "#993399", + "Chemical Researcher" = "#993399", + "Geneticist" = "#993399", + "Mechatronic Engineer" = "#993399", + "Plasma Researcher" = "#993399", + "Research Director" = "#993399", + "Roboticist" = "#993399", + "Scientist" = "#993399", + "Xenoarcheologist" = "#993399", + "Xenobiologist" = "#993399", + // Security + "Brig Physician" = "#A30000", + "Detective" = "#A30000", + "Forensic Technician" = "#A30000", + "Head of Security" = "#A30000", + "Human Resources Agent" = "#A30000", + "Internal Affairs Agent" = "#A30000", + "Magistrate" = "#A30000", + "Security Officer" = "#A30000", + "Security Pod Pilot" = "#A30000", + "Warden" = "#A30000", + // Supply + "Quartermaster" = "#7F6539", + "Cargo Technician" = "#7F6539", + "Shaft Miner" = "#7F6539", + "Spelunker" = "#7F6539", + // Service + "Barber" = "#80A000", + "Bartender" = "#80A000", + "Beautician" = "#80A000", + "Botanical Researcher" = "#80A000", + "Botanist" = "#80A000", + "Butcher" = "#80A000", + "Chaplain" = "#80A000", + "Chef" = "#80A000", + "Clown" = "#80A000", + "Cook" = "#80A000", + "Culinary Artist" = "#80A000", + "Custodial Technician" = "#80A000", + "Hair Stylist" = "#80A000", + "Hydroponicist" = "#80A000", + "Janitor" = "#80A000", + "Journalist" = "#80A000", + "Librarian" = "#80A000", + "Mime" = "#80A000", + ) + // Just command members + var/heads = list("Captain", "Head of Personnel", "Nanotrasen Representative", "Blueshield", "Chief Engineer", "Chief Medical Officer", "Research Director", "Head of Security") + // Just ERT + var/ert_jobs = list("Emergency Response Team Officer", "Emergency Response Team Engineer", "Emergency Response Team Medic", "Emergency Response Team Leader", "Emergency Response Team Member") + // Defined so code compiles and incase someone has a non-standard job + var/job_color = "#000000" + // NOW FOR ACTUAL TOGGLES /* Simple Toggles */ var/toggle_activated = TRUE var/toggle_jobs = FALSE + var/toggle_job_color = FALSE + var/toggle_name_color = FALSE var/toggle_timecode = FALSE + var/toggle_command_bold = FALSE // Hack section var/toggle_gibberish = FALSE var/toggle_honk = FALSE /* Strings */ var/setting_language = null + var/job_indicator_type = null /* Tables */ var/list/regex = list() @@ -38,7 +151,11 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) var/list/to_serialize = list( "toggle_activated", "toggle_jobs", + "toggle_job_color", + "toggle_name_color", + "job_indicator_type", "toggle_timecode", + "toggle_command_bold", "toggle_gibberish", "toggle_honk", "setting_language", @@ -50,7 +167,11 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) var/list/serialize_sanitize = list( "toggle_activated" = "bool", "toggle_jobs" = "bool", + "toggle_job_color" = "bool", + "toggle_name_color" = "bool", + "job_indicator_type" = "string", "toggle_timecode" = "bool", + "toggle_command_bold" = "bool", "toggle_gibberish" = "bool", "toggle_honk" = "bool", "setting_language" = "string", @@ -58,6 +179,10 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) "firewall" = "array" ) + // These are the job card styles + var/list/job_card_styles = list( + JOB_STYLE_1, JOB_STYLE_2, JOB_STYLE_3, JOB_STYLE_4 + ) // Used to determine what languages are allowable for conversion. Generated during runtime. var/list/valid_languages = list("--DISABLE--") @@ -65,13 +190,17 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) /* Simple Toggles */ toggle_activated = initial(toggle_activated) toggle_jobs = initial(toggle_jobs) + toggle_job_color = initial(toggle_job_color) + toggle_name_color = initial(toggle_name_color) toggle_timecode = initial(toggle_timecode) + toggle_command_bold = initial(toggle_command_bold) // Hack section toggle_gibberish = initial(toggle_gibberish) toggle_honk = initial(toggle_honk) /* Strings */ setting_language = initial(setting_language) + job_indicator_type = initial(job_indicator_type) /* Tables */ regex = list() @@ -142,10 +271,42 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) if(firewall.Find(signal.data["name"])) signal.data["reject"] = 1 - // These two stack properly. - // Simple job indicator switch. + // All job and coloring shit + if(toggle_job_color || toggle_name_color) + var/job = signal.data["job"] + job_color = all_jobs[job] + + if(toggle_name_color) + var/new_name = "" + signal.data["name"] + "" + signal.data["name"] = new_name + signal.data["realname"] = new_name // this is required because the broadcaster uses this directly if the speaker doesn't have a voice changer on + if(toggle_jobs) - var/new_name = signal.data["name"] + " ([signal.data["job"]]) " + var/new_name = "" + var/job = signal.data["job"] + if(job in ert_jobs) + job = "ERT" + if(toggle_job_color) + switch(job_indicator_type) + if(JOB_STYLE_1) + new_name = signal.data["name"] + " ([job]) " + if(JOB_STYLE_2) + new_name = signal.data["name"] + " - [job] " + if(JOB_STYLE_3) + new_name = "\[[job]\] " + signal.data["name"] + " " + if(JOB_STYLE_4) + new_name = "([job]) " + signal.data["name"] + " " + else + switch(job_indicator_type) + if(JOB_STYLE_1) + new_name = signal.data["name"] + " ([job]) " + if(JOB_STYLE_2) + new_name = signal.data["name"] + " - [job] " + if(JOB_STYLE_3) + new_name = "\[[job]\] " + signal.data["name"] + " " + if(JOB_STYLE_4) + new_name = "([job]) " + signal.data["name"] + " " + signal.data["name"] = new_name signal.data["realname"] = new_name // this is required because the broadcaster uses this directly if the speaker doesn't have a voice changer on @@ -155,6 +316,12 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) signal.data["name"] = new_name signal.data["realname"] = new_name // this is required because the broadcaster uses this directly if the speaker doesn't have a voice changer on + // Makes heads of staff bold + if(toggle_command_bold) + var/job = signal.data["job"] + if((job in ert_jobs) || (job in heads)) + signal.data["message"] = "" + signal.data["message"] + "" + // Hacks! // Censor dat shit like nobody's business if(toggle_gibberish) @@ -169,7 +336,6 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) new_message += pick("HoNK!", "HONK", "HOOOoONK", "HONKHONK!", "HoNnnkKK!!!", "HOOOOOOOOOOONK!!!!11!", "henk!") + " " signal.data["message"] = new_message - // Language Conversion if(setting_language && valid_languages[setting_language]) if(setting_language == "--DISABLE--") @@ -183,7 +349,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) var/new_message = original for(var/reg in regex) var/replacePattern = pencode_to_html(regex[reg]) - var/regex/start = regex(reg, "gi") + var/regex/start = regex("[reg]", "gi") new_message = start.Replace(new_message, replacePattern) signal.data["message"] = new_message @@ -202,6 +368,15 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) vars[var_to_toggle] = !vars[var_to_toggle] log_action(user, "toggled NTTC variable [var_to_toggle] [vars[var_to_toggle] ? "on" : "off"]") + // Job Format + if(href_list["setting_job_card_style"]) + var/card_style = input(user, "Pick a job card format.", "Job Card Format") as null|anything in job_card_styles + if(!card_style) + return + job_indicator_type = card_style + to_chat(user, "Jobs will now have the style of [card_style].") + log_action(user, "has set NTTC job card format to [card_style]", TRUE) + // Strings if(href_list["setting_language"]) var/new_language = input(user, "Pick a language to convert messages to.", "Language Conversion") as null|anything in valid_languages @@ -252,7 +427,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) var/list/array = vars[href_list["array"]] array.Add(new_value) to_chat(user, "Added row [new_value].") - log_action(user, "updated [href_list["array"]] - new value [new_value]") + log_action(user, "updated [href_list["array"]] - new value [new_value]", TRUE) if(href_list["delete_item"]) if(href_list["array"] && href_list["array"] in arrays) @@ -316,3 +491,4 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) dat += "window.updateConfig = function(config) { window.config = JSON.parse(config); window.reload_tab() };" dat += "" return dat + diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 4d901261bbd..048396e4eed 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -151,6 +151,7 @@ /obj/item/implanter/storage = 1, /obj/item/toy/cards/deck/syndicate = 2, /obj/item/storage/secure/briefcase/syndie = 2, + /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 2, "" = 70 ) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 9af8b04580a..f8798d77c5d 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -310,6 +310,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d return ..() /obj/item/proc/hit_reaction(mob/living/carbon/human/owner, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + SEND_SIGNAL(src, COMSIG_ITEM_HIT_REACT, args) if(prob(final_block_chance)) owner.visible_message("[owner] blocks [attack_text] with [src]!") return 1 @@ -324,6 +325,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d A.Remove(user) if(flags & DROPDEL) qdel(src) + SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user) // called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) @@ -351,6 +353,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d // for items that can be placed in multiple slots // note this isn't called during the initial dressing of a player /obj/item/proc/equipped(var/mob/user, var/slot) + SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot) for(var/X in actions) var/datum/action/A = X if(item_action_slot_check(slot, user)) //some items only give their actions buttons when in a specific slot. @@ -498,6 +501,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d /obj/item/throw_impact(atom/A) if(A && !QDELETED(A)) + SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, A) var/itempush = 1 if(w_class < WEIGHT_CLASS_BULKY) itempush = 0 // too light to push anything @@ -548,6 +552,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d return I == src /obj/item/Crossed(atom/movable/AM) + . = ..() if(prob(trip_chance) && ishuman(AM)) var/mob/living/carbon/human/H = AM on_trip(H) @@ -558,3 +563,10 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d /obj/item/attack_hulk(mob/living/carbon/human/user) return FALSE + +/obj/item/proc/check_martial_counter(mob/living/carbon/human/target, mob/living/carbon/human/user) //handles block for CQC + if(target.check_block()) + target.visible_message("[target.name] blocks [src] and twists [user]'s arm behind [user.p_their()] back!", + "You block the attack!") + user.Stun(2) + return TRUE \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index fb5e41ec663..31945743ad2 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -10,6 +10,7 @@ var/translate_binary = FALSE var/translate_hive = FALSE var/syndie = FALSE + var/change_voice = FALSE var/list/channels = list() @@ -20,7 +21,7 @@ channels = list("Syndicate" = 1) origin_tech = "syndicate=1;engineering=3;bluespace=2" syndie = TRUE //Signifies that it de-crypts Syndicate transmissions - var/change_voice = TRUE + change_voice = TRUE var/fake_name = "Agent ALERT_A_CODER" var/static/list/fakename_list diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index 165a61baa75..1143954faef 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -18,35 +18,21 @@ hitsound = null throwforce = 3 w_class = WEIGHT_CLASS_TINY + var/list/honk_sounds = list('sound/items/bikehorn.ogg' = 1) throw_speed = 3 throw_range = 15 attack_verb = list("HONKED") - var/spam_flag = 0 - var/honk_sound = 'sound/items/bikehorn.ogg' - var/cooldowntime = 20 - -/obj/item/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user) - if(!spam_flag) - playsound(loc, honk_sound, 50, 1, -1) //plays instead of tap.ogg! - return ..() - -/obj/item/bikehorn/attack_self(mob/user) - if(!spam_flag) - spam_flag = 1 - playsound(src.loc, honk_sound, 50, 1) - src.add_fingerprint(user) - spawn(cooldowntime) - spam_flag = 0 - return +/obj/item/bikehorn/Initialize() + . = ..() + AddComponent(/datum/component/squeak, honk_sounds, 50) /obj/item/bikehorn/airhorn name = "air horn" desc = "Damn son, where'd you find this?" icon_state = "air_horn" - honk_sound = 'sound/items/AirHorn2.ogg' - cooldowntime = 50 origin_tech = "materials=4;engineering=4" + honk_sounds = list('sound/items/airhorn2.ogg' = 1) /obj/item/bikehorn/golden name = "golden bike horn" @@ -63,11 +49,10 @@ ..() /obj/item/bikehorn/golden/proc/flip_mobs(mob/living/carbon/M, mob/user) - if(!spam_flag) - var/turf/T = get_turf(src) - for(M in ohearers(7, T)) - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(!H.can_hear()) - continue - M.emote("flip") + var/turf/T = get_turf(src) + for(M in ohearers(7, T)) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(!H.can_hear()) + continue + M.emote("flip") diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 3bed8e15333..f484d8c001b 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -158,6 +158,28 @@ /obj/item/storage/firstaid/adv/empty empty = 1 +/obj/item/storage/firstaid/machine + name = "machine repair kit" + desc = "A kit that contains supplies to repair IPCs on the go." + icon_state = "machinefirstaid" + item_state = "firstaid-machine" + med_bot_skin = "machine" + +/obj/item/storage/firstaid/machine/New() + ..() + if(empty) + return + new /obj/item/weldingtool(src) + new /obj/item/stack/cable_coil(src) + new /obj/item/stack/cable_coil(src) + new /obj/item/stack/cable_coil(src) + new /obj/item/reagent_containers/food/drinks/oilcan/full(src) + new /obj/item/robotanalyzer(src) + +/obj/item/storage/firstaid/machine/empty + empty = 1 + + /obj/item/storage/firstaid/tactical name = "first-aid kit" icon_state = "bezerk" diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 231645ed758..f16ca21682f 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -166,6 +166,8 @@ if(ishuman(L)) var/mob/living/carbon/human/H = L + if(check_martial_counter(L, user)) + return if(H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK)) //No message; check_shields() handles that playsound(L, 'sound/weapons/Genhit.ogg', 50, 1) return diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index e657e9f8538..b48774eb046 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -507,10 +507,8 @@ icon = 'icons/obj/watercloset.dmi' icon_state = "rubberducky" item_state = "rubberducky" + honk_sounds = list('sound/items/squeaktoy.ogg' = 1) attack_verb = list("quacked", "squeaked") - honk_sound = 'sound/items/squeaktoy.ogg' //credit to DANMITCH3LL of freesound for this - - /obj/structure/sink name = "sink" diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index d7ed44c3c9a..7eb81c589e1 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -136,6 +136,7 @@ /turf/Entered(atom/movable/M, atom/OL, ignoreRest = 0) + ..() if(ismob(M)) var/mob/O = M if(!O.lastarea) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1bf3ec01750..855c092f3ae 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -411,6 +411,7 @@ BLIND // can't see anything ..() /obj/item/clothing/shoes/proc/step_action(var/mob/living/carbon/human/H) //squeek squeek + SEND_SIGNAL(src, COMSIG_SHOES_STEP_ACTION) if(shoe_sound) var/turf/T = get_turf(H) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index dea27a5b946..a5e66af02ac 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -69,6 +69,7 @@ armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/t_scanner, /obj/item/rcd) siemens_coefficient = 0 + actions_types = list(/datum/action/item_action/toggle_helmet) hide_tail_by_species = list("Vox" , "Vulpkanin" , "Unathi" , "Tajaran") species_restricted = list("exclude","Diona","Wryn") @@ -156,6 +157,10 @@ H.unEquip(boots) boots.forceMove(src) +/obj/item/clothing/suit/space/hardsuit/ui_action_click() + ..() + toggle_helmet() + /obj/item/clothing/suit/space/hardsuit/verb/toggle_helmet() set name = "Toggle Helmet" set category = "Object" @@ -222,6 +227,10 @@ user.drop_item() W.loc = src src.helmet = W + var/obj/item/clothing/head/helmet/space/hardsuit/syndi/S = W + S.forceMove(src) + helmet = S + S.link_suit() return else if(istype(W,/obj/item/clothing/shoes/magboots) && can_modify(user)) @@ -312,6 +321,7 @@ item_color = "syndi" armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50) on = 1 + var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null actions_types = list(/datum/action/item_action/toggle_helmet_mode) flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDETAIL @@ -319,6 +329,11 @@ /obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon() icon_state = "hardsuit[on]-[item_color]" +/obj/item/clothing/head/helmet/space/hardsuit/syndi/proc/link_suit() + . = ..() + if(istype(loc,/obj/item/clothing/suit/space/hardsuit/syndi)) + linkedsuit = loc + /obj/item/clothing/head/helmet/space/hardsuit/syndi/attack_self(mob/user) on = !on if(on) @@ -342,12 +357,38 @@ update_icon() playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) + toggle_hardsuit_mode(user) user.update_inv_head() for(var/X in actions) var/datum/action/A = X A.UpdateButtonIcon() +/obj/item/clothing/head/helmet/space/hardsuit/syndi/proc/toggle_hardsuit_mode(mob/user) //Helmet Toggles Suit Mode + if(linkedsuit) + if(on) + linkedsuit.name = initial(linkedsuit.name) + linkedsuit.desc = initial(linkedsuit.desc) + linkedsuit.slowdown = 1 + linkedsuit.flags |= STOPSPRESSUREDMAGE | THICKMATERIAL + linkedsuit.flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL + linkedsuit.cold_protection |= UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + else + linkedsuit.name += " (combat)" + linkedsuit.desc = linkedsuit.alt_desc + linkedsuit.slowdown = 0 + linkedsuit.flags = THICKMATERIAL + linkedsuit.cold_protection &= ~(UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS) + linkedsuit.flags_inv &= ~(HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL) + + linkedsuit.update_icon() + user.update_inv_wear_suit() + user.update_inv_w_uniform() + + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + /obj/item/clothing/head/helmet/space/hardsuit/syndi/freedom name = "eagle helmet" desc = "An advanced, space-proof helmet. It appears to be modeled after an old-world eagle." @@ -360,6 +401,7 @@ /obj/item/clothing/suit/space/hardsuit/syndi name = "blood-red hardsuit" desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in travel mode. Property of Gorlex Marauders." + alt_desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in combat mode. Property of Gorlex Marauders." icon_state = "hardsuit1-syndi" item_state = "syndie_hardsuit" item_color = "syndi" @@ -372,34 +414,6 @@ /obj/item/clothing/suit/space/hardsuit/syndi/update_icon() icon_state = "hardsuit[on]-[item_color]" -/obj/item/clothing/suit/space/hardsuit/syndi/attack_self(mob/user) - on = !on - if(on) - to_chat(user, "You switch your hardsuit to travel mode. It will allow you to stand in zero pressure environments, at the cost of speed.") - name = "blood-red hardsuit" - desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in travel mode. Property of Gorlex Marauders." - slowdown = 1 - flags = STOPSPRESSUREDMAGE | THICKMATERIAL - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS - else - to_chat(user, "You switch your hardsuit to combat mode. You will take damage in zero pressure environments, but you are more suited for a fight.") - name = "blood-red hardsuit (combat)" - desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in combat mode. Property of Gorlex Marauders." - slowdown = 0 - flags = THICKMATERIAL - flags_inv = null - cold_protection = null - - update_icon() - playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) - user.update_inv_wear_suit() - user.update_inv_w_uniform() - - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - //Elite Syndie suit /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite name = "elite syndicate hardsuit helmet" diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm index 8828f7a4c2e..b320237996e 100644 --- a/code/modules/clothing/under/chameleon.dm +++ b/code/modules/clothing/under/chameleon.dm @@ -12,11 +12,12 @@ New() ..() - for(var/U in subtypesof(/obj/item/clothing/under/color)) + var/blocked = list(/obj/item/clothing/under/color/random, /obj/item/clothing/under/rank/centcom) // Stops random coloured jumpsuit and undefined centcomm suit appearing in the list. + for(var/U in subtypesof(/obj/item/clothing/under/color) - blocked) var/obj/item/clothing/under/V = new U src.clothing_choices += V - for(var/U in subtypesof(/obj/item/clothing/under/rank)) + for(var/U in subtypesof(/obj/item/clothing/under/rank) - blocked) var/obj/item/clothing/under/V = new U src.clothing_choices += V return diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 76bef3e056b..62ced953ae2 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -69,15 +69,17 @@ item_state = "clown" item_color = "clown" flags_size = ONESIZEFITSALL - var/honk_sound = 'sound/items/bikehorn.ogg' + +/obj/item/clothing/under/rank/clown/Initialize() + . = ..() + AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg' = 1), 50) /obj/item/clothing/under/rank/clown/hit_reaction() - playsound(loc, honk_sound, 50, 1, -1) if(ishuman(loc)) var/mob/living/carbon/human/H = loc if(H.mind && H.mind.assigned_role == "Clown") score_clownabuse++ - return 0 + return ..() /obj/item/clothing/under/rank/head_of_personnel desc = "It's a jumpsuit worn by someone who works in the position of \"Head of Personnel\"." diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index ada24f85259..127656ece55 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -1490,9 +1490,9 @@ icon = 'icons/obj/custom_items.dmi' lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi' righthand_file = 'icons/mob/inhands/fluff_righthand.dmi' + honk_sounds = list('sound/items/teri_horn.ogg' = 1) icon_state = "teri_horn" item_state = "teri_horn" - honk_sound = 'sound/items/teri_horn.ogg' /obj/item/clothing/accessory/medal/fluff/elo //V-Force_Bomber: E.L.O. name = "distinguished medal of loyalty and excellence" diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index c481df1ca42..b72ddea8be1 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -392,4 +392,7 @@ desc = "Contains oil intended for use on cyborgs, robots, and other synthetics." icon = 'icons/goonstation/objects/oil.dmi' icon_state = "oilcan" - volume = 100 \ No newline at end of file + volume = 100 + +/obj/item/reagent_containers/food/drinks/oilcan/full + list_reagents = list("oil" = 100) diff --git a/code/modules/martial_arts/cqc.dm b/code/modules/martial_arts/cqc.dm new file mode 100644 index 00000000000..54f9ac97cd9 --- /dev/null +++ b/code/modules/martial_arts/cqc.dm @@ -0,0 +1,204 @@ +#define SLAM_COMBO "HG" +#define KICK_COMBO "HH" +#define RESTRAIN_COMBO "GG" +#define PRESSURE_COMBO "DG" +#define CONSECUTIVE_COMBO "DDH" + +/datum/martial_art/cqc + name = "CQC" + help_verb = /mob/living/carbon/human/proc/CQC_help + block_chance = 75 + +/datum/martial_art/cqc/can_use(mob/living/carbon/human/H) + if(istype(H.gloves, /obj/item/clothing/gloves/fingerless/rapid)) + return FALSE + return ..() + +/datum/martial_art/cqc/proc/drop_restraining() + restraining = FALSE + +/datum/martial_art/cqc/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!can_use(A)) + return FALSE + if(findtext(streak, SLAM_COMBO)) + streak = "" + Slam(A, D) + return TRUE + if(findtext(streak, KICK_COMBO)) + streak = "" + Kick(A, D) + return TRUE + if(findtext(streak, RESTRAIN_COMBO)) + streak = "" + Restrain(A, D) + return TRUE + if(findtext(streak, PRESSURE_COMBO)) + streak = "" + Pressure(A, D) + return TRUE + if(findtext(streak, CONSECUTIVE_COMBO)) + streak = "" + Consecutive(A, D) + return FALSE + +/datum/martial_art/cqc/proc/Slam(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!can_use(A)) + return FALSE + if(!D.stat || !D.weakened) + D.visible_message("[A] slams [D] into the ground!", \ + "[A] slams you into the ground!") + playsound(get_turf(A), 'sound/weapons/slam.ogg', 50, 1, -1) + D.apply_damage(10, BRUTE) + D.Weaken(6) + add_attack_logs(A, D, "Melee attacked with martial-art [src] : Slam", ATKLOG_ALL) + else //if target can't be slammed, do a regular grab attack then clear the streak + streak = "" + grab_act(A, D) + streak = "" + return TRUE + +/datum/martial_art/cqc/proc/Kick(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!can_use(A)) + return FALSE + if(!D.stat || !D.weakened) + D.visible_message("[A] kicks [D] back!", \ + "[A] kicks you back!") + playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1) + var/atom/throw_target = get_edge_target_turf(D, A.dir) + D.throw_at(throw_target, 1, 14, A) + D.apply_damage(10, BRUTE) + add_attack_logs(A, D, "Melee attacked with martial-art [src] : Kick", ATKLOG_ALL) + if(D.weakened && !D.stat) + D.visible_message("[A] kicks [D]'s head, knocking [D.p_them()] out!", \ + "[A] kicks your head, knocking you out!") + playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1) + D.SetSleeping(15) + D.adjustBrainLoss(15, 150) + add_attack_logs(A, D, "Knocked out with martial-art [src] : Kick", ATKLOG_ALL) + else //if target can't be kicked, do a regular harm attack then clear the streak + streak = "" + harm_act(A, D) + streak = "" + return TRUE + +/datum/martial_art/cqc/proc/Pressure(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!can_use(A)) + return FALSE + D.visible_message("[A] forces their arm on [D]'s neck!") + D.adjustStaminaLoss(60) + playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1) + add_attack_logs(A, D, "Melee attacked with martial-art [src] : Pressure", ATKLOG_ALL) + return TRUE + +/datum/martial_art/cqc/proc/Restrain(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(restraining) + return + if(!can_use(A)) + return FALSE + if(!D.stat) + D.visible_message("[A] locks [D] into a restraining position!", \ + "[A] locks you into a restraining position!") + D.adjustStaminaLoss(20) + D.Stun(5) + restraining = TRUE + addtimer(CALLBACK(src, .proc/drop_restraining), 50, TIMER_UNIQUE) + add_attack_logs(A, D, "Melee attacked with martial-art [src] : Restrain", ATKLOG_ALL) + return TRUE + +/datum/martial_art/cqc/proc/Consecutive(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!can_use(A)) + return FALSE + if(!D.stat) + D.visible_message("[A] strikes [D]'s abdomen, neck and back consecutively", \ + "[A] strikes your abdomen, neck and back consecutively!") + playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1) + var/obj/item/I = D.get_active_hand() + if(I && D.drop_item()) + A.put_in_hands(I) + D.adjustStaminaLoss(50) + D.apply_damage(25, BRUTE) + add_attack_logs(A, D, "Melee attacked with martial-art [src] : Consecutive", ATKLOG_ALL) + else //if target can't be hit, do a regular harm attack then clear the streak + streak = "" + harm_act(A, D) + streak = "" + return TRUE + +/datum/martial_art/cqc/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!can_use(A)) + return FALSE + add_to_streak("G", D) + if(check_streak(A, D)) + return TRUE + var/obj/item/grab/G = D.grabbedby(A, 1) + if(G) + G.state = GRAB_AGGRESSIVE //Instant aggressive grab + return TRUE + +/datum/martial_art/cqc/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!can_use(A)) + return FALSE + add_to_streak("H", D) + if(check_streak(A, D)) + return TRUE + A.do_attack_animation(D) + var/picked_hit_type = pick("CQC'd", "neck chopped", "gut punched") + var/bonus_damage = 13 + if(D.weakened || D.resting || D.lying) + bonus_damage += 5 + picked_hit_type = "stomps on" + D.apply_damage(bonus_damage, BRUTE) + if(picked_hit_type == "kicks" || picked_hit_type == "stomps on") + playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1) + else + playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1) + D.visible_message("[A] [picked_hit_type] [D]!", \ + "[A] [picked_hit_type] you!") + add_attack_logs(A, D, "Melee attacked with martial-art [src]", ATKLOG_ALL) + if(A.resting && !D.stat && !D.weakened) + D.visible_message("[A] leg sweeps [D]!", \ + "[A] leg sweeps you!") + playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1) + D.apply_damage(10, BRUTE) + D.Weaken(3) + add_attack_logs(A, D, "Melee attacked with martial-art [src] : Leg sweep", ATKLOG_ALL) + return TRUE + +/datum/martial_art/cqc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!can_use(A)) + return FALSE + add_to_streak("D", D) + if(check_streak(A, D)) + return TRUE + if(!restraining) + D.visible_message("[A] strikes [D]'s jaw with their hand!", \ + "[A] strikes your jaw, disorienting you!") + playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1) + D.Jitter(2) + D.apply_damage(5, BRUTE) + add_attack_logs(A, D, "Melee attacked with martial-art [src] : Disarm", ATKLOG_ALL) + if(restraining) + D.visible_message("[A] puts [D] into a chokehold!", \ + "[A] puts you into a chokehold!") + D.SetSleeping(20) + restraining = FALSE + add_attack_logs(A, D, "Knocked out with martial-art [src] : Choke hold", ATKLOG_ALL) + else + restraining = FALSE + return FALSE + return TRUE + +/mob/living/carbon/human/proc/CQC_help() + set name = "Remember The Basics" + set desc = "You try to remember some of the basics of CQC." + set category = "CQC" + to_chat(usr, "You try to remember some of the basics of CQC.") + + to_chat(usr, "Slam: Harm Grab. Slam opponent into the ground, knocking them down.") + to_chat(usr, "CQC Kick: Harm Harm. Knocks opponent away. Knocks out stunned or knocked down opponents.") + to_chat(usr, "Restrain: Grab Switch Hand Grab. Locks opponent into a restraining position, stunning them.") + to_chat(usr, "Choke Hold: Restrain Disarm. Knocks out an opponent you have restrained.") + to_chat(usr, "Pressure: Disarm Grab. Decent stamina damage.") + to_chat(usr, "Consecutive CQC: Disarm Disarm Harm. Mainly offensive move, huge damage and decent stamina damage.") + + to_chat(usr, "In addition, by having your throw mode on when being attacked, you enter an active defense mode where you have a chance to block and sometimes even counter melee attacks done to you.") \ No newline at end of file diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index 26e6a2e873c..aed823b372b 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -6,6 +6,8 @@ var/temporary = 0 var/datum/martial_art/base = null // The permanent style var/deflection_chance = 0 //Chance to deflect projectiles + var/block_chance = 0 //Chance to block melee attacks using items while on throw mode. + var/restraining = 0 //used in cqc's disarm_act to check if the disarmed is being restrained and so whether they should be put in a chokehold or not var/help_verb = null var/no_guns = FALSE //set to TRUE to prevent users of this style from using guns (sleeping carp, highlander). They can still pick them up, but not fire them. var/no_guns_message = "" //message to tell the style user if they try and use a gun while no_guns = TRUE (DISHONORABRU!) @@ -22,6 +24,9 @@ /datum/martial_art/proc/help_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) return 0 +/datum/martial_art/proc/can_use(mob/living/carbon/human/H) + return TRUE + /datum/martial_art/proc/add_to_streak(var/element,var/mob/living/carbon/human/D) if(D != current_target) current_target = D @@ -184,6 +189,24 @@ new /obj/effect/decal/cleanable/ash(get_turf(src)) qdel(src) +/obj/item/CQC_manual + name = "old manual" + desc = "A small, black manual. There are drawn instructions of tactical hand-to-hand combat." + icon = 'icons/obj/library.dmi' + icon_state = "cqcmanual" + +/obj/item/CQC_manual/attack_self(mob/living/carbon/human/user) + if(!istype(user) || !user) + return + to_chat(user, "You remember the basics of CQC.") + + var/datum/martial_art/cqc/CQC = new(null) + CQC.teach(user) + user.drop_item() + visible_message("[src] beeps ominously, and a moment later it bursts up in flames.") + new /obj/effect/decal/cleanable/ash(get_turf(src)) + qdel(src) + /obj/item/twohanded/bostaff name = "bo staff" desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts. Can be wielded to both kill and incapacitate." diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm new file mode 100644 index 00000000000..922f3181c27 --- /dev/null +++ b/code/modules/mob/dead/dead.dm @@ -0,0 +1,23 @@ +/mob/dead/forceMove(atom/destination) + // Overriden from code/game/atoms_movable.dm#141 to prevent things like mice squeaking when ghosts walk on them. + // Same as parent, except that it does not include Uncrossed or Crossed calls. + var/turf/old_loc = loc + loc = destination + + if(old_loc) + old_loc.Exited(src, destination) + + if(destination) + destination.Entered(src) + + if(isturf(destination) && opacity) + var/turf/new_loc = destination + new_loc.reconsider_lights() + + if(isturf(old_loc) && opacity) + old_loc.reconsider_lights() + + for(var/datum/light_source/L in light_sources) + L.source_atom.update_light() + + return 1 diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 98274ea7e1f..ae5fe905735 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -156,6 +156,10 @@ emp_act return 1 return 0 +/mob/living/carbon/human/proc/check_block() + if(martial_art && prob(martial_art.block_chance) && martial_art.can_use(src) && in_throw_mode && !incapacitated(FALSE, TRUE)) + return TRUE + /mob/living/carbon/human/emp_act(severity) for(var/obj/O in src) if(!O) continue diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 37b67d40f29..a728c2bbfd8 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -198,7 +198,7 @@ var/obj/item/organ/internal/ears/ears = H.get_int_organ(/obj/item/organ/internal/ears) if(ears) qdel(ears) - + ears = new mutantears(H) /datum/species/proc/breathe(mob/living/carbon/human/H) @@ -318,6 +318,9 @@ user.do_cpr(target) /datum/species/proc/grab(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) + if(target.check_block()) //cqc + target.visible_message("[target] blocks [user]'s grab attempt!") + return FALSE if(attacker_style && attacker_style.grab_act(user, target)) return TRUE else @@ -344,6 +347,9 @@ add_attack_logs(user, target, "vampirebit") return //end vampire codes + if(target.check_block()) //cqc + target.visible_message("[target] blocks [user]'s attack!") + return FALSE if(attacker_style && attacker_style.harm_act(user, target)) return TRUE else @@ -382,6 +388,9 @@ target.forcesay(GLOB.hit_appends) /datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) + if(target.check_block()) //cqc + target.visible_message("[target] blocks [user]'s disarm attempt!") + return FALSE if(attacker_style && attacker_style.disarm_act(user, target)) return TRUE else diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 070a7d60e84..1c7cb902be3 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -65,6 +65,9 @@ /mob/living/simple_animal/bot/medbot/fish skin = "fish" +/mob/living/simple_animal/bot/medbot/machine + skin = "machine" + /mob/living/simple_animal/bot/medbot/mysterious name = "\improper Mysterious Medibot" desc = "International Medibot of mystery." @@ -578,6 +581,8 @@ T.syndicate_aligned = syndicate_aligned //This is a special case since Syndicate medibots and the mysterious medibot look the same; we also dont' want crew building Syndicate medibots if the mysterious medibot blows up. if("fish") new /obj/item/storage/firstaid/aquatic_kit(Tsec) + if("machine") + new /obj/item/storage/firstaid/machine/empty(Tsec) else new /obj/item/storage/firstaid(Tsec) diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 3ed45508b87..5ebaf47afb2 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -33,6 +33,9 @@ can_collar = 1 gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY +/mob/living/simple_animal/mouse/Initialize() + . = ..() + /mob/living/simple_animal/mouse/handle_automated_speech() ..() if(prob(speak_chance)) @@ -81,39 +84,16 @@ get_scooped(M) ..() -//make mice fit under tables etc? this was hacky, and not working -/* -/mob/living/simple_animal/mouse/Move(var/dir) - - var/turf/target_turf = get_step(src,dir) - //CanReachThrough(src.loc, target_turf, src) - var/can_fit_under = 0 - if(target_turf.ZCanPass(get_turf(src),1)) - can_fit_under = 1 - - ..(dir) - if(can_fit_under) - src.loc = target_turf - for(var/d in cardinal) - var/turf/O = get_step(T,d) - //Simple pass check. - if(O.ZCanPass(T, 1) && !(O in open) && !(O in closed) && O in possibles) - open += O - */ - -///mob/living/simple_animal/mouse/restrained() //Hotfix to stop mice from doing things with MouseDrop -// return 1 - /mob/living/simple_animal/mouse/start_pulling(var/atom/movable/AM)//Prevents mouse from pulling things to_chat(src, "You are too small to pull anything.") return /mob/living/simple_animal/mouse/Crossed(AM as mob|obj) - if( ishuman(AM) ) - if(!stat) + if(ishuman(AM)) + if(stat == CONSCIOUS) var/mob/M = AM to_chat(M, "[bicon(src)] Squeek!") - M << 'sound/effects/mousesqueek.ogg' + SEND_SOUND(M, 'sound/effects/mousesqueek.ogg') ..() /mob/living/simple_animal/mouse/death(gibbed) diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index 94a20968baf..1e8d5eeb609 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -72,5 +72,6 @@ melee_damage_lower = 10 melee_damage_upper = 30 a_intent = INTENT_HARM + pass_flags = PASSTABLE universal_speak = 1 universal_understand = 1 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hellhound.dm b/code/modules/mob/living/simple_animal/hostile/hellhound.dm new file mode 100644 index 00000000000..8adc16dbd24 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/hellhound.dm @@ -0,0 +1,121 @@ +// Hellhound +/mob/living/simple_animal/hostile/hellhound + // Sprites by FoS: http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 + name = "Lesser Hellhound" + desc = "A horrifying, black canine monster, with glowing red eyes and vicious-looking teeth." + icon_state = "blackdog" + icon_living = "blackdog" + icon_dead = "blackdog_dead" + icon_resting = "blackdog_rest" + mutations = list(BREATHLESS) + gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 + maxbodytemp = INFINITY + melee_damage_lower = 10 // slightly higher than araneus + melee_damage_upper = 30 + a_intent = INTENT_HARM + environment_smash = 1 + speak_chance = 0 + speed = 0 + maxHealth = 250 // same as sgt araneus + health = 250 + obj_damage = 50 + robust_searching = 1 + stat_attack = 1 + attacktext = "savages" + attack_sound = 'sound/effects/bite.ogg' + speak_emote = list("growls") + see_in_dark = 9 + universal_understand = 1 + wander = 0 + var/life_regen_cycles = 0 + var/life_regen_cycle_trigger = 10 // heal once for every X number of cycles spent resting + var/life_regen_amount = -10 // negative, because negative = healing + var/smoke_lastuse = 0 + var/smoke_freq = 300 // 30 seconds + var/datum/action/innate/demon/whisper/whisper_action + +/mob/living/simple_animal/hostile/hellhound/New() + . = ..() + whisper_action = new() + whisper_action.Grant(src) + +/mob/living/simple_animal/hostile/hellhound/handle_automated_action() + . = ..() + if(resting) + if(!wants_to_rest()) + custom_emote(1, "growls, and gets up.") + playsound(get_turf(src), 'sound/hallucinations/growl2.ogg', 50, 1) + icon_state = "[icon_living]" + resting = 0 + update_canmove() + else if(wants_to_rest()) + custom_emote(1, "lays down, and starts to lick their wounds.") + icon_state = "[icon_living]_rest" + resting = 1 + update_canmove() + +/mob/living/simple_animal/hostile/hellhound/examine(mob/user) + . = ..() + if(stat != DEAD) + var/list/msgs = list() + if(key) + msgs += "Its eyes have the spark of intelligence." + if(health > (maxHealth*0.95)) + msgs += "It appears to be in excellent health." + else if(health > (maxHealth*0.75)) + msgs += "It has a few injuries." + else if(health > (maxHealth*0.55)) + msgs += "It has many injuries." + else if(health > (maxHealth*0.25)) + msgs += "It is covered in wounds!" + if(resting) + if(bruteloss > 0 || fireloss > 0) + msgs += "It is currently licking its wounds, regenerating the damage to its body!" + else + msgs += "It is currently resting." + to_chat(usr,msgs.Join("
")) + +/mob/living/simple_animal/hostile/hellhound/Life(seconds, times_fired) + . = ..() + if(stat != DEAD && resting && (bruteloss > 0) || (fireloss > 0)) + if(life_regen_cycles >= life_regen_cycle_trigger) + life_regen_cycles = 0 + to_chat(src, "You lick your wounds, helping them close.") + adjustBruteLoss(life_regen_amount) + adjustFireLoss(life_regen_amount) + else + life_regen_cycles++ + +/mob/living/simple_animal/hostile/hellhound/proc/wants_to_rest() + if(target) + return FALSE + if(bruteloss > 0 || fireloss > 0) + return TRUE + return FALSE + +/mob/living/simple_animal/hostile/hellhound/AttackingTarget() + . = ..() + if(ishuman(target)) + special_aoe() + +/mob/living/simple_animal/hostile/hellhound/proc/special_aoe() + if(world.time < (smoke_lastuse + smoke_freq)) + return + smoke_lastuse = world.time + var/datum/effect_system/smoke_spread/sleeping/smoke = new + smoke.set_up(10, 0, loc) + smoke.start() + +/mob/living/simple_animal/hostile/hellhound/greater + name = "Greater Hellhound" + maxHealth = 400 + health = 400 + melee_damage_lower = 20 + melee_damage_upper = 30 + environment_smash = 2 + gold_core_spawnable = CHEM_MOB_SPAWN_INVALID + light_color = "#FF0000" + light_power = 6 + light_range = 2 diff --git a/code/modules/projectiles/gun_attachments.dm b/code/modules/projectiles/gun_attachments.dm new file mode 100644 index 00000000000..9a5156b4546 --- /dev/null +++ b/code/modules/projectiles/gun_attachments.dm @@ -0,0 +1,19 @@ +//Put all your tacticool gun gadgets here. So far it's pretty empty + + +/obj/item/suppressor + name = "suppressor" + desc = "A universal syndicate small-arms suppressor for maximum espionage." + icon = 'icons/obj/guns/projectile.dmi' + icon_state = "suppressor" + item_state = "suppressor" + w_class = WEIGHT_CLASS_SMALL + var/oldsound = null + var/initial_w_class = null + origin_tech = "combat=2;engineering=2" + +/obj/item/suppressor/specialoffer + name = "cheap suppressor" + desc = "A foreign knock-off suppressor, it feels flimsy, cheap, and brittle. Still fits all weapons." + icon = 'icons/obj/guns/projectile.dmi' + icon_state = "suppressor" diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 0ff5e57e7c5..39654c96a2b 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -183,20 +183,4 @@ for(var/obj/item/ammo_casing/AC in magazine.stored_ammo) if(AC.BB) process_fire(user, user,0) - . = 1 - -/obj/item/suppressor - name = "suppressor" - desc = "A universal syndicate small-arms suppressor for maximum espionage." - icon = 'icons/obj/guns/projectile.dmi' - icon_state = "suppressor" - item_state = "suppressor" - w_class = WEIGHT_CLASS_SMALL - var/oldsound = null - var/initial_w_class = null - -/obj/item/suppressor/specialoffer - name = "cheap suppressor" - desc = "A foreign knock-off suppressor, it feels flimsy, cheap, and brittle. Still fits all weapons." - icon = 'icons/obj/guns/projectile.dmi' - icon_state = "suppressor" + . = 1 \ No newline at end of file diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index b7854d90e13..b34364c4c93 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -79,7 +79,7 @@ name = "laser tag beam" icon_state = "omnilaser" hitsound = 'sound/weapons/tap.ogg' - damage = 0 + nodamage = 1 damage_type = STAMINA flag = "laser" var/suit_types = list(/obj/item/clothing/suit/redtag, /obj/item/clothing/suit/bluetag) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index f6474c4a16b..d0007ab7266 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -538,6 +538,7 @@ // note AM since can contain mobs or objs for(var/atom/movable/AM in D) AM.loc = src + SEND_SIGNAL(AM, COMSIG_MOVABLE_DISPOSING, src, D) if(istype(AM, /mob/living/carbon/human)) var/mob/living/carbon/human/H = AM if(FAT in H.mutations) // is a human and fat? diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 4ab40200dbb..d9a572c1a0e 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -242,6 +242,8 @@ name = "NT specops cybernetics implant" desc = "An extremely powerful cybernetic implant that contains combat and utility modules used by NT special forces." contents = newlist(/obj/item/gun/energy/pulse/pistol/m1911, /obj/item/door_remote/omni, /obj/item/melee/energy/blade/hardlight, /obj/item/reagent_containers/hypospray/combat/nanites, /obj/item/gun/medbeam, /obj/item/borg/stun, /obj/item/implanter/mindshield, /obj/item/flash/armimplant) + icon = 'icons/obj/guns/energy.dmi' + icon_state = "m1911" emp_proof = 1 /obj/item/organ/internal/cyberimp/arm/surgery diff --git a/html/changelog.html b/html/changelog.html index 25612650bc8..719d91ee2e5 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,79 @@ -->
+

23 November 2018

+

Kyep updated:

+
    +
  • Dead mice no longer squeak.
  • +
  • Ghosts walking over living mice no longer makes them squeak.
  • +
+ +

22 November 2018

+

AlAtEX updated:

+
    +
  • re-adds sprites for boxes that disappeared
  • +
+

AlAtEx updated:

+
    +
  • Added a new medkit for IPCs
  • +
  • added a purple medkit
  • +
  • Added a repair kit box to start with for IPC's
  • +
  • Re-added the crowbar and extended tank to miner's boxes
  • +
  • added three new box images
  • +
+

Azule Utama updated:

+
    +
  • Made laser tag guns work again.
  • +
  • Syndicate Cigarettes added to maintenance loot.
  • +
+

Eschess updated:

+
    +
  • Adds ui button to toggle hardsuit helmet
  • +
  • syndicate hardsuit combat mode is activated only by the helmet button
  • +
+

Kyep updated:

+
    +
  • Added hellhound, a dangerous new monster.
  • +
+

datlo updated:

+
    +
  • Added the CQC manual to nuke ops and traitor uplinks, letting them remember some of the basics of CQC.
  • +
+ +

21 November 2018

+

MrKicker updated:

+
    +
  • Added generated sound files to sound/vox_fem , then added references to them in vox_sounds.dm
  • +
+ +

20 November 2018

+

AffectedArc07 updated:

+
    +
  • NTTC now has multiple job tag styles
  • +
  • NTTC now has option to make job tags colored
  • +
  • NTTC now has option to make nametags colored
  • +
  • NTTC now has options to make command members louder (bold)
  • +
  • The NTTC window title is no longer NTSL.
  • +
+

Azule Utama updated:

+
    +
  • Fixed chameleon suit having two invalid options.
  • +
+

TDSSS updated:

+
    +
  • Silencers now have a tech origin, give research levels when deconstructed
  • +
  • Moved gun attachments to their own folder, code-wise.
  • +
+

name here updated:

+
    +
  • Fixed a runtime in a syndieteam radio.
  • +
+

tigercat2000 updated:

+
    +
  • Nano scrolling is 95% less buggy
  • +
  • NanoUI's Fancy Mode now less broken as hell remove: 512 support for Nano dev tools
  • +
+

19 November 2018

Birdtalon updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index cd7ac9cbc6e..8ce76fec6b9 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -8127,3 +8127,49 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. datlo: - rscadd: Added antag alert sounds that play at roundstart for most major antagonists, ported from TG. +2018-11-20: + AffectedArc07: + - rscadd: NTTC now has multiple job tag styles + - rscadd: NTTC now has option to make job tags colored + - rscadd: NTTC now has option to make nametags colored + - rscadd: NTTC now has options to make command members louder (bold) + - spellcheck: The NTTC window title is no longer NTSL. + Azule Utama: + - bugfix: Fixed chameleon suit having two invalid options. + TDSSS: + - tweak: Silencers now have a tech origin, give research levels when deconstructed + - tweak: Moved gun attachments to their own folder, code-wise. + name here: + - bugfix: Fixed a runtime in a syndieteam radio. + tigercat2000: + - bugfix: Nano scrolling is 95% less buggy + - bugfix: 'NanoUI''s Fancy Mode now less broken as hell remove: 512 support for + Nano dev tools' +2018-11-21: + MrKicker: + - soundadd: Added generated sound files to sound/vox_fem , then added references + to them in vox_sounds.dm +2018-11-22: + AlAtEX: + - bugfix: re-adds sprites for boxes that disappeared + AlAtEx: + - rscadd: Added a new medkit for IPCs + - imageadd: added a purple medkit + - rscadd: Added a repair kit box to start with for IPC's + - rscadd: Re-added the crowbar and extended tank to miner's boxes + - imageadd: added three new box images + Azule Utama: + - bugfix: Made laser tag guns work again. + - rscadd: Syndicate Cigarettes added to maintenance loot. + Eschess: + - rscadd: Adds ui button to toggle hardsuit helmet + - tweak: syndicate hardsuit combat mode is activated only by the helmet button + Kyep: + - rscadd: Added hellhound, a dangerous new monster. + datlo: + - rscadd: Added the CQC manual to nuke ops and traitor uplinks, letting them remember + some of the basics of CQC. +2018-11-23: + Kyep: + - bugfix: Dead mice no longer squeak. + - bugfix: Ghosts walking over living mice no longer makes them squeak. diff --git a/html/nttc/dist/index.html b/html/nttc/dist/index.html index 80e7a40ac81..a8a7a17f1e3 100644 --- a/html/nttc/dist/index.html +++ b/html/nttc/dist/index.html @@ -3,7 +3,7 @@ - NTSL + NTTC @@ -12,7 +12,7 @@