diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..df7a79e3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +tgstation.int diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index cef639b7..3571f691 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -382,7 +382,7 @@ "ahr" = (/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/structure/cable{icon_state = "1-4"},/turf/open/floor/plasteel/showroomfloor,/area/security/warden) "ahs" = (/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{icon_state = "2-4"},/turf/open/floor/plasteel/showroomfloor,/area/security/warden) "aht" = (/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel/showroomfloor,/area/security/warden) -"ahu" = (/obj/machinery/door/airlock/security/glass{name = "Brig Control"; req_access_txt = "3"},/obj/structure/cable{icon_state = "4-8"},/obj/structure/cable{icon_state = "1-4"},/obj/structure/cable{icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel/showroomfloor,/area/security/warden) +"ahu" = (/obj/machinery/door/airlock/security/glass{dir = 4; name = "Brig Control"; req_access_txt = "3"},/obj/structure/cable{icon_state = "4-8"},/obj/structure/cable{icon_state = "1-4"},/obj/structure/cable{icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel/showroomfloor,/area/security/warden) "ahv" = (/obj/structure/disposalpipe/segment{dir = 6},/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 8},/turf/open/floor/plasteel,/area/security/main) "ahw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "4-8"},/obj/structure/cable{icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/security/main) "ahx" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,/turf/open/floor/plasteel,/area/security/main) @@ -949,7 +949,7 @@ "asm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/open/floor/plasteel,/area/security/vacantoffice/b) "asn" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on,/turf/open/floor/plating,/area/security/vacantoffice/b) "aso" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/open/floor/plating,/area/maintenance/fore) -"asp" = (/obj/machinery/door/airlock/maintenance{name = "Law Office Maintenance"; req_access_txt = "38"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plating,/area/maintenance/fore) +"asp" = (/obj/machinery/door/airlock/maintenance{dir = 4; name = "Law Office Maintenance"; req_access_txt = "38"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plating,/area/maintenance/fore) "asq" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 8},/turf/open/floor/wood,/area/lawoffice) "asr" = (/obj/structure/chair/office/dark,/obj/effect/landmark/start/lawyer,/turf/open/floor/wood,/area/lawoffice) "ass" = (/obj/machinery/light{dir = 4},/obj/effect/turf_decal/tile/red{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/fore) @@ -1568,7 +1568,7 @@ "aEh" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 8},/turf/open/floor/plasteel,/area/security/checkpoint/auxiliary) "aEi" = (/obj/effect/turf_decal/tile/red,/obj/effect/turf_decal/tile/red{dir = 4},/turf/open/floor/plasteel,/area/security/checkpoint/auxiliary) "aEj" = (/obj/structure/table/glass,/obj/item/reagent_containers/food/snacks/grown/wheat,/obj/item/reagent_containers/food/snacks/grown/watermelon,/obj/item/reagent_containers/food/snacks/grown/watermelon,/obj/item/reagent_containers/food/snacks/grown/watermelon,/obj/item/reagent_containers/food/snacks/grown/citrus/orange,/obj/item/reagent_containers/food/snacks/grown/grapes,/obj/item/reagent_containers/food/snacks/grown/cocoapod,/obj/effect/turf_decal/tile/green,/obj/effect/turf_decal/tile/green{dir = 4},/turf/open/floor/plasteel,/area/hydroponics/garden) -"aEk" = (/obj/machinery/door/airlock{name = "Garden"},/turf/open/floor/plasteel,/area/hydroponics/garden) +"aEk" = (/obj/machinery/door/airlock{dir = 4; name = "Garden"},/turf/open/floor/plasteel,/area/hydroponics/garden) "aEl" = (/turf/open/floor/plasteel,/area/storage/primary) "aEm" = (/obj/effect/landmark/event_spawn,/turf/open/floor/plasteel,/area/storage/primary) "aEn" = (/obj/effect/turf_decal/bot_white/right,/obj/structure/closet/crate/goldcrate,/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel/dark,/area/ai_monitored/nuke_storage) @@ -2535,7 +2535,7 @@ "aWM" = (/obj/structure/cable{icon_state = "1-2"},/obj/structure/disposalpipe/sorting/mail/flip{dir = 2; sortType = 16},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/open/floor/plasteel,/area/hallway/primary/starboard) "aWN" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/airalarm{pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/starboard) "aWO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/starboard) -"aWP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Library"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/carpet,/area/library) +"aWP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Library"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/carpet,/area/library) "aWQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/carpet,/area/library) "aWR" = (/obj/structure/disposalpipe/segment{dir = 9},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/carpet,/area/library) "aWS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/carpet,/area/library) @@ -2624,7 +2624,7 @@ "aYx" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/closed/wall,/area/hydroponics) "aYy" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/obj/structure/cable{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/open/floor/plasteel,/area/hallway/primary/starboard) "aYz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/hallway/primary/starboard) -"aYA" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Library"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/carpet,/area/library) +"aYA" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{dir = 4; name = "Library"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/carpet,/area/library) "aYB" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/carpet,/area/library) "aYC" = (/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 8},/turf/open/floor/carpet,/area/library) "aYD" = (/obj/machinery/holopad,/turf/open/floor/carpet,/area/library) @@ -3193,7 +3193,7 @@ "bju" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/radio/intercom{pixel_y = 20},/turf/open/floor/plasteel,/area/quartermaster/storage) "bjv" = (/obj/machinery/camera{c_tag = "Cargo Bay North"},/obj/machinery/vending/wardrobe/cargo_wardrobe,/turf/open/floor/plasteel,/area/quartermaster/storage) "bjw" = (/turf/open/floor/plasteel,/area/quartermaster/storage) -"bjx" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 30},/obj/machinery/light{dir = 1; pixel_y = 16},/turf/open/floor/plasteel,/area/quartermaster/storage) +"bjx" = (/obj/machinery/light{dir = 1; pixel_y = 16},/turf/open/floor/plasteel,/area/quartermaster/storage) "bjy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/open/floor/plasteel,/area/quartermaster/storage) "bjz" = (/obj/machinery/button/door{id = "qm_warehouse"; name = "Warehouse Door Control"; pixel_x = -1; pixel_y = 24; req_access_txt = "31"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/open/floor/plasteel,/area/quartermaster/storage) "bjA" = (/obj/machinery/photocopier,/obj/item/radio/intercom{pixel_y = 20},/turf/open/floor/plasteel,/area/quartermaster/office) @@ -3267,7 +3267,7 @@ "bkQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/turf_decal/tile/brown{dir = 8},/turf/open/floor/plasteel,/area/quartermaster/office) "bkR" = (/obj/structure/disposalpipe/segment{dir = 5},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/quartermaster/office) "bkS" = (/obj/structure/disposalpipe/sorting/mail/flip{dir = 1; sortType = 2},/obj/structure/noticeboard{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "2-4"},/turf/open/floor/plasteel,/area/quartermaster/office) -"bkT" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/mining/glass{name = "Cargo Office"; req_access_txt = "50"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel,/area/quartermaster/sorting) +"bkT" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 30},/turf/open/floor/plasteel,/area/quartermaster/storage) "bkU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel,/area/quartermaster/sorting) "bkV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel,/area/quartermaster/sorting) "bkW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel,/area/quartermaster/sorting) @@ -3650,7 +3650,7 @@ "bsj" = (/obj/effect/turf_decal/delivery,/turf/open/floor/plasteel,/area/quartermaster/storage) "bsk" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; dir = 8; freq = 1400; location = "QM #1"},/obj/effect/turf_decal/bot,/mob/living/simple_animal/bot/mulebot{beacon_freq = 1400; home_destination = "QM #1"; suffix = "#1"},/turf/open/floor/plasteel,/area/quartermaster/storage) "bsl" = (/obj/structure/table,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30},/obj/item/multitool,/obj/machinery/camera{c_tag = "Cargo Office"; dir = 4},/turf/open/floor/plasteel,/area/quartermaster/office) -"bsm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/mining/glass{dir = 4; name = "Cargo Office"; req_access_txt = "50"},/turf/open/floor/plasteel,/area/quartermaster/office) +"bsm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/mining/glass{dir = 4; name = "Cargo Office"; req_access_txt = "50"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel,/area/quartermaster/sorting) "bsn" = (/obj/effect/landmark/event_spawn,/turf/open/floor/plasteel,/area/quartermaster/office) "bso" = (/obj/effect/landmark/event_spawn,/obj/effect/turf_decal/bot,/turf/open/floor/plasteel,/area/hallway/primary/central) "bsp" = (/obj/structure/sign/warning/electricshock{pixel_y = -32},/obj/structure/cable{icon_state = "0-4"},/obj/structure/cable,/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; name = "Privacy Shutters"},/obj/effect/spawner/structure/window/reinforced,/turf/open/floor/plating,/area/crew_quarters/heads/hop) @@ -4205,6 +4205,7 @@ "bCS" = (/obj/machinery/door/airlock{name = "Custodial Closet"; req_access_txt = "26"},/obj/structure/disposalpipe/segment,/obj/effect/landmark/event_spawn,/turf/open/floor/plasteel,/area/janitor) "bCT" = (/turf/closed/wall,/area/maintenance/aft) "bCU" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/open/floor/plating,/area/maintenance/aft) +"bCV" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/mining/glass{dir = 4; name = "Cargo Office"; req_access_txt = "50"},/turf/open/floor/plasteel,/area/quartermaster/office) "bCW" = (/obj/structure/disposalpipe/segment,/obj/structure/table,/obj/item/surgicaldrill,/turf/open/floor/plasteel,/area/medical/sleeper) "bCX" = (/obj/structure/table,/obj/item/hemostat,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/open/floor/plasteel/white/side{dir = 2},/area/medical/sleeper) "bCY" = (/obj/structure/table,/obj/item/scalpel{pixel_y = 12},/obj/item/circular_saw,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/open/floor/plasteel/white,/area/medical/sleeper) @@ -4542,7 +4543,7 @@ "bJs" = (/obj/structure/chair,/obj/effect/turf_decal/stripes/line{dir = 5},/turf/open/floor/plating/airless,/area/science/test_area) "bJt" = (/obj/docking_port/stationary{dir = 8; dwidth = 3; height = 5; id = "mining_home"; name = "mining shuttle bay"; roundstart_template = /datum/map_template/shuttle/mining/box; width = 7},/turf/open/space/basic,/area/space) "bJu" = (/obj/effect/mapping_helpers/airlock/cyclelink_helper{dir = 4},/obj/machinery/door/airlock/external{name = "Mining Dock Airlock"; req_access_txt = "48"; shuttledocked = 1},/turf/open/floor/plating,/area/quartermaster/miningdock) -"bJv" = (/obj/effect/mapping_helpers/airlock/cyclelink_helper{dir = 8},/obj/machinery/door/airlock/mining/glass{name = "Mining Dock"; req_access_txt = "48"},/turf/open/floor/plasteel,/area/quartermaster/miningdock) +"bJv" = (/obj/effect/mapping_helpers/airlock/cyclelink_helper{dir = 8},/obj/machinery/door/airlock/mining/glass{dir = 4; name = "Mining Dock"; req_access_txt = "48"},/turf/open/floor/plasteel,/area/quartermaster/miningdock) "bJw" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 1},/turf/open/floor/plasteel,/area/quartermaster/miningdock) "bJx" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating,/area/maintenance/port/aft) "bJy" = (/obj/structure/closet/firecloset,/turf/open/floor/plating,/area/maintenance/port/aft) @@ -5001,7 +5002,7 @@ "bSj" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/open/floor/plasteel,/area/engine/atmos) "bSk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/obj/structure/cable{icon_state = "1-2"},/turf/open/floor/plasteel,/area/engine/atmos) "bSl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/open/floor/plasteel,/area/engine/atmos) -"bSm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/atmos/glass{name = "Distribution Loop"; req_access_txt = "24"},/turf/open/floor/plasteel,/area/engine/atmos) +"bSm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/atmos/glass{dir = 4; name = "Distribution Loop"; req_access_txt = "24"},/turf/open/floor/plasteel,/area/engine/atmos) "bSn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 9},/turf/open/floor/plasteel,/area/engine/atmos) "bSo" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 9},/turf/open/floor/plasteel,/area/engine/atmos) "bSp" = (/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Pure to Mix"},/turf/open/floor/plasteel,/area/engine/atmos) @@ -5154,7 +5155,7 @@ "bVg" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/effect/turf_decal/tile/yellow{dir = 8},/turf/open/floor/plasteel/dark/corner{dir = 1},/area/engine/atmos) "bVh" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/open/floor/plasteel,/area/engine/atmos) "bVi" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/effect/turf_decal/tile/yellow{dir = 4},/turf/open/floor/plasteel/dark/corner,/area/engine/atmos) -"bVj" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/atmos{name = "Atmospherics"; req_access_txt = "24"},/turf/open/floor/plasteel,/area/engine/atmos) +"bVj" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/atmos{dir = 4; name = "Atmospherics"; req_access_txt = "24"},/turf/open/floor/plasteel,/area/engine/atmos) "bVk" = (/obj/machinery/atmospherics/components/binary/pump/on{dir = 8; name = "Air to External"},/turf/open/floor/plasteel,/area/engine/atmos) "bVl" = (/obj/structure/cable{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/turf/open/floor/plasteel,/area/engine/atmos) "bVm" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 9},/turf/open/floor/plasteel,/area/engine/atmos) @@ -6476,7 +6477,7 @@ "cuC" = (/obj/structure/piano{icon_state = "piano"},/turf/open/floor/wood,/area/crew_quarters/bar) "cuD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/open/floor/plasteel,/area/engine/engineering) "cuE" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/engine/engineering) -"cuF" = (/obj/machinery/door/airlock/command{name = "MiniSat Access"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/engine/engineering) +"cuF" = (/obj/machinery/door/airlock/command{dir = 4; name = "MiniSat Access"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plasteel,/area/engine/engineering) "cuG" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 8},/turf/open/floor/plasteel,/area/engine/engineering) "cuH" = (/obj/structure/transit_tube_pod,/obj/structure/transit_tube/station/reverse/flipped{dir = 4},/obj/effect/turf_decal/stripes/line{dir = 8},/turf/open/floor/plating,/area/engine/engineering) "cuI" = (/obj/structure/cable{icon_state = "2-4"},/obj/structure/cable{icon_state = "1-4"},/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/starboard/aft) @@ -7036,13 +7037,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaweayUbexayUayWaxBaxBayXayUbeyayUayYbezbeAbeAbdrbeBbeCbeDbeEbeFbdtbeGbeHbeIbeIbeJbeKaXpaXpaXpbeLbeMaXpaPjaPjaPjaPjbeNbeObePbeQbeObeRaZibeSbeTaZjaZlaZmbeUbeVbeWbeXbeXbeXbeXbeYbeZbeVbBKaIPbbZaZvbaJbfbbfcbfdbfebffbcQbfgbfhaXYbfibfjbfkbfkbfkbflbfmaYdbfnbfobfpbfqbfrbfsbftbbabfuaZDbsJaIPcCcbfvbfvbfvbfvbfvbfvbfvbfwbfxbfxbfxbfybfzbfwbfAbfAbfAbfAbfAbfBbfBbfBbfCbfBbfBbfBbfBbfDbaaberbfEbfFbfGbfHbfIbfJbfJbfJbfKbfLbfLbfLbfLbfLbfMbfNbfNbBPbBQbfNbBRbBSbfNbfNbfRbfSbfSbfSbfSbfTbfUbfVbfWaMzaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaAaauSaAbaxyayUaAcaAdbfXbfYayUaxyaAbayUauSaAaawebdrbfZbgabgabgabgbbgcbgdbgebeObeObgfbggaXpaYWbghbeLbgiaXpbgjbgjaRTbgkbglbgmbgnbgmbgmbgobgpbgqaZkbgrbgsaZmaRTbgtbgubeVbgvbgwbgxbgyaPNbgAbBTbgCbBUaZvbgEaZybgFbgGbgHbgIbcQbgJaZvaadbgKbgLbgLbgLbgLbgLbgMaadaZDbgNbgObgPbgQbbabgRbbabgSaZDbsJaIPbBWbfvbgUbgVbgWbgXbgYbfvbgZbrtbrtbrtbhbbhccBMbhdbhebhfbhgbfAbhhbhibhjbhkbhibhlbhmbfBbfFbhnbfFbfFbfFbhobhpbhqbhrbhsbhtbhubhvbhwbhxbhybfLbhzbhAbhzbfLbhBbhCbhBbfSbhDbhEbhDbfSbhFbhGbfSbhHbhIaMzaMzaMzaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaadaadaadaadayUbhJayUayUayUayUayUayUbhKayUaadaadaadaaabdrbhLbdrbhMbgabhNbhObdraRTaTfbhPbhQbhRbhSbhSbhSbhSbhSbhSbhTbhUbhVbhWbhXbhYbhYbhYbhYbhYbhYaZmbhZaZiaZmbhYbhYbiabibbicbidbiebifbiebigbihbfaaIPbBXaZvbijaZyaZyaZyaZybgIbcQbikaZvaadbgKbgLbilbimbinbgLbgMaadaZDbiobbObipbiqbbabftbbabbaaZDbsJaIPcCcbfvbirbisbitbitbiubivbhcbiwbhcbhcbhbbhcbhcbhdbixbiybizbfAbiAbhibhibiBbiAbiCbhibfBbiDbiEbiFbfFbiGbiHbfHbiIbiJbiKbiLbiMbiNbiObiPbiQbiRbiSbiTbiUbfLbiVbiWbiXbfSbiYbiZbiYbjabjbbjbbfSbjcbhIaaaaadaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoBaaabdrbjebjfbjgbjhbjhbjibjjbjkbjlaPjbjmbjnbjobjobjobjpbjpbjpbjpbjpbjpbjqbjrbhYbjsbjtbjubjvbjwbjxbjybjzbhYbjAbjBbjCbeVbeVbjDbjEbjFbjEbjGbjHbjIbjJbbZbjKbjLbjMbjNbjOaZybjPbcQaZvaZvaadbgKbgLbimbgLbimbgLbgMaadaZDaZDbjQbbPbjRbbabjSbjTbjUaZDbsJaIPcCcbfvbjVbisbjWbjXbjYbjZbhcbkabkbbkcbkdbkebkfbhdbkgbkhbkibfAbiAbhibhibiBbiAbiCbkjbfBbkkbklbkmbfFbknbkobfHbkpbkqbkrbksbkpbiNbktbkubiPbiPbiPbiPbkvbfLbkwbkxbkybfSbkzbjbbjbbkAbkBbkCbfSbjcbhIbkDbkDbkDbkDaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdrbkEbdrbkFbkGbkGbkHbdrbkIbkIaPjbkJbkKbkJbkJbkJbkKbkJaPjaPjbhYbhYbkLbkMbhYbjwbjwbjwbjwbjwbjwbkNbkObkPbkQbkRbkSbkTbkUbkVbkUbkWbkXbkYbihbfabkZblablbblcbldbleblfaZybgIbcQaZvaadaadblgblhbinblibilbljblkaadaadaZDbllblmaZDaZDaZDaZDblnaZDburaIPcBJbfvblpblqblrbitbiublsbhcbltblublvblwblxblybfAblzblAblBbfAbiAbhibhibiBbiAblCblDbfBbfFbfFbfFbfFblEbkobfHblFbiJblGbiLblHbiNblIblJblKblLblMblNblObfLblPbkxblQbfSblRblSblTblUblVblWbfSbjcblXblYblZbmabmbaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoBaaabdrbjebjfbjgbjhbjhbjibjjbjkbjlaPjbjmbjnbjobjobjobjpbjpbjpbjpbjpbjpbjqbjrbhYbjsbjtbjubjvbjxbkTbjybjzbhYbjAbjBbjCbeVbeVbjDbjEbjFbjEbjGbjHbjIbjJbbZbjKbjLbjMbjNbjOaZybjPbcQaZvaZvaadbgKbgLbimbgLbimbgLbgMaadaZDaZDbjQbbPbjRbbabjSbjTbjUaZDbsJaIPcCcbfvbjVbisbjWbjXbjYbjZbhcbkabkbbkcbkdbkebkfbhdbkgbkhbkibfAbiAbhibhibiBbiAbiCbkjbfBbkkbklbkmbfFbknbkobfHbkpbkqbkrbksbkpbiNbktbkubiPbiPbiPbiPbkvbfLbkwbkxbkybfSbkzbjbbjbbkAbkBbkCbfSbjcbhIbkDbkDbkDbkDaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdrbkEbdrbkFbkGbkGbkHbdrbkIbkIaPjbkJbkKbkJbkJbkJbkKbkJaPjaPjbhYbhYbkLbkMbhYbjwbjwbjwbjwbjwbjwbkNbkObkPbkQbkRbkSbsmbkUbkVbkUbkWbkXbkYbihbfabkZblablbblcbldbleblfaZybgIbcQaZvaadaadblgblhbinblibilbljblkaadaadaZDbllblmaZDaZDaZDaZDblnaZDburaIPcBJbfvblpblqblrbitbiublsbhcbltblublvblwblxblybfAblzblAblBbfAbiAbhibhibiBbiAblCblDbfBbfFbfFbfFbfFblEbkobfHblFbiJblGbiLblHbiNblIblJblKblLblMblNblObfLblPbkxblQbfSblRblSblTblUblVblWbfSbjcblXblYblZbmabmbaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdrbmcbjfbmdbkGbmebmfbdraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmgbmhbmibmjbmkbmlbjwbjwbjwbmmbjwbjwbmnbwgbmpbmqbmrbmsbmtbmubihbmvbeVbeVbeVbmwbmxaLzbjKbmybmzbmzbmzbmzbmAbmBbmCaadaaabgKbmDbgLbgLbgLbmEbgMaaaaadbmFbmGbmHbmIbufbmKaZDbmLaZDbrlaIPcBKbfvbmObmPbmQbmRbmSbfvbmTbltblubmUbmVbhcbmWbfAbmXbmYbmZbfAbnabnbbncbndbnebnfbnebngbnhbnibnhbnhbnhbnjbfHbnkbnlbnmbnnbnobnpbnqbnrbnsbntbnubnvaRhbfLbnxbnybnzbfSbnAbnBbnCbnDbjbaSvbfSbnFbnGbnHbnIbnIbnIbnIbnIbnIbnJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdrbnKbjfbjfbjfbdrbdrbdraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmgbnLbnMbnNbnObnObnObnObnObnObnObnObnObnPbnQbnRbnSbnTbnUbnVbnWbnXbnYbnZboabfabobbocbjKbjKbmCbodboebofbogbohbmCaaaaaabgKboibojbokbojbolbgMaaaaaabmFbombonboobmFbopaZDboqaZDbrlaIPcCdcCDbosbmPbotbitboubfvbovbowboxboybozbhcboAbfAbhdboBboCbfAbfBboDbfBboEboFboGboHboHboHboHboHboHboHboIboJbfIbfIbfIbfIbfIboKboLbiPboMbnvbnvboNboOboKboPboQboRboSboTboUboVboWboXboYbfSboZbpabpbbpcbpcbpcbpcbpcbpdbhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpebmgbmgbpfbnMbjybjwbpgbpgbpgbpgbjwbjwbjwbjwbphbpibpjbpkbplbpmbpnbpobppbnXbnXboabpqbprbpsbptbpubpvbpwbpxbpybpzbpAbmCaadaaabgKbpBbpCbpCbpCbpDbgMaaaaadbmFbpEbpFbpGbmFbpHaZDbmLaZDbrlaIPcCdbfvbpJbmPbpKbpLbpMbfvbpNbltbhbboybpObpPbovbovbpQbpRbpSbpTbpUbpVbpWbpXbpYbpZbqabqbbqcbqdbqebqfbqgbkobqhbqibqjbqkbqlbqmbqnbqobqpbqqbqrbqsbnvbqtbqubqvbqwaSxboSbqybqzbqAbqBbjbbqCbqDbqEbfSbqFbqFbqFbqFbqFbqFbjcbhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqGbqHbqGbqIbqJbqKbqLbqMbjwbjwbjwbjwbjwbqNbhYbhYbqObnXbqPbqQbqRbnVbqSbnXbqTbnXbqUbmMbobbqVbqWbqXbqYbqZbrabrbbpzbrcbmCaaaaaabgKbrdbrebrfbrebrgbgMaaaaaabrhbribrjbrhbrhbrhbrhbrkbrhcBUaLzcCebfvbfvbrnbrobrpbfvbfvbrqbrrbrsbsebsgbsebuqbsebrubrvbrwbrwbrwbrxbrwbrybpYbpZbrzbrAbrBbrCbrDbrEbqgbrFbrGbrHbrIbrIbrIbrJbrKbrLbrMbrNbrObrPbrQbrRbrSbrTbkxbrUboSboSbrVbrWbrXbrVboSbfSbfSbfSbrYbrZbsabsbbscbqFbsdbhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrfbsfbutbshbjwbjybjwbpgbpgbsibpgbjwbjwbsjbskbhYbslbnXbqPbqQbnXbsmbnXbnXbsnbnXbqUbmMbobaIPbqWbsobspbsqbsrbsrbssbstbmCaadaadbsubsvbswbsxbsybszbsAaadaadbsBbsCbsDbsEbsFbsGbsHbsIbrhcBVaIPbsKbsLbsMbsNbsObsPbsQbsRbsSbsTbsUbsVbsVbsVbsVbsVbsWbsXbsVbsVbsVbsYbkfbsZbtabpZbtbbtcbtdbtdbtebqfbqgbkobqhbtfbtgbthbtibtjbtkbtlbiPbtmbiPbiPbiPbtnboKbtobtpbtqbtrbtsbttbtubtvbtwbtxbtybtzbtAbtBbtCbtCbtCbtDbtEbtFbhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrfbsfbutbshbjwbjybjwbpgbpgbsibpgbjwbjwbsjbskbhYbslbnXbqPbqQbnXbCVbnXbnXbsnbnXbqUbmMbobaIPbqWbsobspbsqbsrbsrbssbstbmCaadaadbsubsvbswbsxbsybszbsAaadaadbsBbsCbsDbsEbsFbsGbsHbsIbrhcBVaIPbsKbsLbsMbsNbsObsPbsQbsRbsSbsTbsUbsVbsVbsVbsVbsVbsWbsXbsVbsVbsVbsYbkfbsZbtabpZbtbbtcbtdbtdbtebqfbqgbkobqhbtfbtgbthbtibtjbtkbtlbiPbtmbiPbiPbiPbtnboKbtobtpbtqbtrbtsbttbtubtvbtwbtxbtybtzbtAbtBbtCbtCbtCbtDbtEbtFbhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpebmgbmgbtGbjwbjybjwbjwbjwbjwbjwbjwbjwbsjbtHbhYbtIbtJbtKbtLbtMbtNbtObtPbnXbtQboabtRbobaIPbqWbqXbmCbtSbtTbtUbtVbtWbmCaaaaaaaadbgKbtXbtYbtXbgMaadaaaaaabsBbtZbuabubbucbudbudbuebydbugbuhaMXbuibujbukbulbumbunbuobunbunbupbzBbApbAubAubAuckqcksbhcbhcbuubuvbuvbuwbpZbpZbpZbuxbuybuzbrDbqfbqgbuAbqhbfLboKboKboKboKboKboKboKboKboKbuBbuCbuBboKbuDbuEbuFbuGbuGbuGbuHbuIbuJbuKbuLbuMbuNbuObuPbuQbuRbuSbuTbuUbuVbkDbuWbuWbkDaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuXcrfbsfbutbnLbuYbkNbuZbmlbjwbuYbjwbjwbjwbsjbvabhYbvbbnXbqPbvcbvdbvebnXbnXbnXbvfboabtRbobaXNbqWbvgbmCbvhbvibvjbvkbohbmCaaaaaaaadbvlbvmbpCbvnbvoaadaaaaaabsBbvpbvqbvrbvsbvtbvubvvbrhcCfaIPcCcbovbovbvxbvybrubvzbvAbvBbvCbvCbvBbvAbvBbvAbvBbvAbvBbvAbfzbfzbuvbvDbtdbvEbvFbpZbuxbvGbvHbvIbvJbqgbvKbvLbvMbvNbvObuGbuGbvPbuGbuGbvQbvRbvSbvTbvUbuGbvVbvWbvXbvYbvYbvYbvZbvZbvZbvZbvZbwabwbbwcbwdbwcbwebwcbqFbwfbEnbwhbwibwjbkDaadaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwkbwlbwkbwmbwnbwmbwmbwmbwmbwmbwobwpbjwbsjbwqbhYbwrbwsbwtbwubwvbwwbwxbwxbwxbwwbwwcCgbobaKebwzbqXbmCbwAbwBbwCbwDbwEbmCaaaaaaaadbwFbwGbsxbwHbwIaadaaaaaabsBbwJbwKbwLbwMbvtbvubvvbrhbziaIPcCcbwObwPbwQbvybwRbwSbvAbwTbwUbwVbwWbwXbwYbwZbxabwZbxbbvAbhccribuvbxcbtdbxdbxebxfbxgbxhbxibxibxjbxkbxlbxmbxnbxobxpbxqbxrbxqbxqbxsbxqbxqbxtbxubxqbxqbxvbxwbxxbvYbxybxzbxAbxBbxCbxDbvZbxEbxFbxGbxHbxIbxFbxJbqFbwfbhIbxKbxLbxMbkDaaaaaaaaaaaaaaaaaaaaaaadbxNaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 3cd64af8..fb4718d4 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -72,6 +72,7 @@ #define STATUS_EFFECT_ICHORIAL_STAIN /datum/status_effect/ichorial_stain //Prevents a servant from being revived by vitality matrices for one minute. +#define STATUS_EFFECT_STASIS /datum/status_effect/incapacitating/stasis //Halts biological functions like bleeding, chemical processing, blood regeneration, walking, etc ///////////// // NEUTRAL // ///////////// diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 80c33f2f..7d930c6d 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -72,6 +72,8 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.wings_list) if(!GLOB.moth_wings_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list) + if(!GLOB.moth_markings_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list) //CIT CHANGES - genitals and such if(!GLOB.cock_shapes_list.len) @@ -145,6 +147,7 @@ "legs" = pick("Normal Legs","Digitigrade Legs"), "caps" = pick(GLOB.caps_list), "moth_wings" = pick(GLOB.moth_wings_list), + "moth_markings" = pick(GLOB.moth_markings_list), "taur" = "None", "mam_body_markings" = pick(snowflake_markings_list), "mam_ears" = pick(snowflake_ears_list), diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index 82b2b903..4362f33a 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -20,6 +20,11 @@ /proc/SQLtime(timevar) return time2text(timevar || world.timeofday, "YYYY-MM-DD hh:mm:ss") +/proc/station_time(display_only = FALSE, wtime=world.time) + return ((((wtime - SSticker.round_start_time) * SSticker.station_time_rate_multiplier) + SSticker.gametime_offset) % 864000) - (display_only? GLOB.timezoneOffset : 0) + +/proc/station_time_timestamp(format = "hh:mm:ss", wtime) + return time2text(station_time(TRUE, wtime), format) GLOBAL_VAR_INIT(midnight_rollovers, 0) GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 6700fbad..a9615d7c 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -35,6 +35,7 @@ GLOBAL_LIST_EMPTY(wings_list) GLOBAL_LIST_EMPTY(wings_open_list) GLOBAL_LIST_EMPTY(r_wings_list) GLOBAL_LIST_EMPTY(moth_wings_list) +GLOBAL_LIST_EMPTY(moth_markings_list) GLOBAL_LIST_EMPTY(caps_list) GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list("ghost")) //stores the ghost forms that support directional sprites diff --git a/code/controllers/subsystem/vis_overlays.dm b/code/controllers/subsystem/vis_overlays.dm index 435414a8..07c786b1 100644 --- a/code/controllers/subsystem/vis_overlays.dm +++ b/code/controllers/subsystem/vis_overlays.dm @@ -5,11 +5,13 @@ SUBSYSTEM_DEF(vis_overlays) init_order = INIT_ORDER_VIS var/list/vis_overlay_cache + var/list/unique_vis_overlays var/list/currentrun var/datum/callback/rotate_cb /datum/controller/subsystem/vis_overlays/Initialize() vis_overlay_cache = list() + unique_vis_overlays = list() rotate_cb = CALLBACK(src, .proc/rotate_vis_overlay) return ..() @@ -31,20 +33,23 @@ SUBSYSTEM_DEF(vis_overlays) return //the "thing" var can be anything with vis_contents which includes images -/datum/controller/subsystem/vis_overlays/proc/add_vis_overlay(atom/movable/thing, icon, iconstate, layer, plane, dir, alpha=255) - . = "[icon]|[iconstate]|[layer]|[plane]|[dir]|[alpha]" - var/obj/effect/overlay/vis/overlay = vis_overlay_cache[.] - if(!overlay) - overlay = new - overlay.icon = icon - overlay.icon_state = iconstate - overlay.layer = layer - overlay.plane = plane - overlay.dir = dir - overlay.alpha = alpha - vis_overlay_cache[.] = overlay +/datum/controller/subsystem/vis_overlays/proc/add_vis_overlay(atom/movable/thing, icon, iconstate, layer, plane, dir, alpha = 255, add_appearance_flags = NONE, unique = FALSE) + var/obj/effect/overlay/vis/overlay + if(!unique) + . = "[icon]|[iconstate]|[layer]|[plane]|[dir]|[alpha]|[add_appearance_flags]" + overlay = vis_overlay_cache[.] + if(!overlay) + overlay = _create_new_vis_overlay(icon, iconstate, layer, plane, dir, alpha, add_appearance_flags) + vis_overlay_cache[.] = overlay + else + overlay.unused = 0 else - overlay.unused = 0 + overlay = _create_new_vis_overlay(icon, iconstate, layer, plane, dir, alpha, add_appearance_flags) + overlay.cache_expiration = -1 + var/cache_id = "\ref[overlay]@{[world.time]}" + unique_vis_overlays += overlay + vis_overlay_cache[cache_id] = overlay + . = overlay thing.vis_contents += overlay if(!isatom(thing)) // Automatic rotation is not supported on non atoms @@ -56,6 +61,17 @@ SUBSYSTEM_DEF(vis_overlays) else thing.managed_vis_overlays += overlay +/datum/controller/subsystem/vis_overlays/proc/_create_new_vis_overlay(icon, iconstate, layer, plane, dir, alpha, add_appearance_flags) + var/obj/effect/overlay/vis/overlay = new + overlay.icon = icon + overlay.icon_state = iconstate + overlay.layer = layer + overlay.plane = plane + overlay.dir = dir + overlay.alpha = alpha + overlay.appearance_flags |= add_appearance_flags + return overlay + /datum/controller/subsystem/vis_overlays/proc/remove_vis_overlay(atom/movable/thing, list/overlays) thing.vis_contents -= overlays if(!isatom(thing)) @@ -68,8 +84,11 @@ SUBSYSTEM_DEF(vis_overlays) /datum/controller/subsystem/vis_overlays/proc/rotate_vis_overlay(atom/thing, old_dir, new_dir) var/rotation = dir2angle(old_dir) - dir2angle(new_dir) var/list/overlays_to_remove = list() - for(var/i in thing.managed_vis_overlays) + for(var/i in thing.managed_vis_overlays - unique_vis_overlays) var/obj/effect/overlay/vis/overlay = i add_vis_overlay(thing, overlay.icon, overlay.icon_state, overlay.layer, overlay.plane, turn(overlay.dir, rotation)) overlays_to_remove += overlay + for(var/i in thing.managed_vis_overlays & unique_vis_overlays) + var/obj/effect/overlay/vis/overlay = i + overlay.dir = turn(overlay.dir, rotation) remove_vis_overlay(thing, overlays_to_remove) diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index e930c77c..a470f814 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -80,6 +80,44 @@ desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are." icon_state = "asleep" +//STASIS +/datum/status_effect/incapacitating/stasis + id = "stasis" + duration = -1 + tick_interval = 10 + alert_type = /obj/screen/alert/status_effect/stasis + var/last_dead_time + +/datum/status_effect/incapacitating/stasis/proc/update_time_of_death() + if(last_dead_time) + var/delta = world.time - last_dead_time + var/new_timeofdeath = owner.timeofdeath + delta + owner.timeofdeath = new_timeofdeath + owner.tod = station_time_timestamp(wtime=new_timeofdeath) + last_dead_time = null + if(owner.stat == DEAD) + last_dead_time = world.time + +/datum/status_effect/incapacitating/stasis/on_creation(mob/living/new_owner, set_duration, updating_canmove) + . = ..() + update_time_of_death() + +/datum/status_effect/incapacitating/stasis/tick() + update_time_of_death() + +/datum/status_effect/incapacitating/stasis/on_remove() + update_time_of_death() + return ..() + +/datum/status_effect/incapacitating/stasis/be_replaced() + update_time_of_death() + return ..() + +/obj/screen/alert/status_effect/stasis + name = "Stasis" + desc = "Your biological functions have halted. You could live forever this way, but it's pretty boring." + icon_state = "stasis" + //OTHER DEBUFFS /datum/status_effect/his_wrath //does minor damage over time unless holding His Grace id = "his_wrath" diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index d8027a2c..cbda257f 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -88,11 +88,13 @@ if(istype(AM,/mob/living)) var/mob/living/AMob = AM AMob.grabbedby(src) + return TRUE stop_pulling() if(AM.pulledby) log_combat(AM, AM.pulledby, "pulled from", src) AM.pulledby.stop_pulling() //an object can't be pulled by two mobs at once. + pulling = AM AM.pulledby = src grab_state = gs @@ -102,19 +104,44 @@ var/mob/M = AM log_combat(src, M, "grabbed", addition="passive grab") visible_message("[src] has grabbed [M] passively.") - return TRUE +//move character into tile whos grabbing you +/atom/movable/proc/adjust_position() + + var/pull_dir = get_dir(src, pulledby) + if (pulledby <> null) + switch(pull_dir) + if(NORTH) + animate(src, pixel_x=0, pixel_y=8, time=5) + if(NORTHEAST) + animate(src, pixel_x=8, pixel_y=8, time=5) + if(NORTHWEST) + animate(src, pixel_x=-8, pixel_y=8, time=5) + if(SOUTHEAST) + animate(src, pixel_x=8, pixel_y=-8, time=5) + if(SOUTHWEST) + animate(src, pixel_x=-8, pixel_y=-8, time=5) + if(SOUTH) + animate(src, pixel_x=0, pixel_y=-8, time=5) + if(WEST) + animate(src, pixel_x=-8, pixel_y=0, time=5) + if(EAST) + animate(src, pixel_x=8, pixel_y=0, time=5) + + /atom/movable/proc/stop_pulling() if(pulling) pulling.pulledby = null var/mob/living/ex_pulled = pulling pulling = null grab_state = 0 + if(isliving(ex_pulled)) var/mob/living/L = ex_pulled L.update_canmove()// mob gets up if it was lyng down in a chokehold + /atom/movable/proc/Move_Pulled(atom/A) if(!pulling) return @@ -132,9 +159,12 @@ return step(pulling, get_dir(pulling.loc, A)) + + /atom/movable/proc/check_pulling() if(pulling) var/atom/movable/pullee = pulling + if(pullee && get_dist(src, pullee) > 1) stop_pulling() return @@ -149,6 +179,11 @@ stop_pulling() return + + + + + //////////////////////////////////////// // Here's where we rewrite how byond handles movement except slightly different // To be removed on step_ conversion @@ -220,6 +255,7 @@ // place due to a Crossed, Bumped, etc. call will interrupt // the second half of the diagonal movement, or the second attempt // at a first half if step() fails because we hit something. + if (direct & NORTH) if (direct & EAST) if (step(src, NORTH) && moving_diagonally) @@ -276,6 +312,7 @@ if(. && pulling && pulling == pullee) //we were pulling a thing and didn't lose it during our move. if(pulling.anchored) stop_pulling() + else var/pull_dir = get_dir(src, pulling) //puller and pullee more than one tile away or in diagonal position @@ -283,6 +320,7 @@ pulling.Move(T, get_dir(pulling, T)) //the pullee tries to reach our previous position if(pulling && get_dist(src, pulling) > 1) //the pullee couldn't keep up stop_pulling() + if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1)//separated from our puller and not in the middle of a diagonal move. pulledby.stop_pulling() diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index b0e4c699..9cd7b436 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -179,12 +179,15 @@ Class Procs: L.update_canmove() occupant = null +/obj/machinery/proc/can_be_occupant(atom/movable/am) + return occupant_typecache ? is_type_in_typecache(am, occupant_typecache) : isliving(am) + /obj/machinery/proc/close_machine(atom/movable/target = null) state_open = FALSE density = TRUE if(!target) for(var/am in loc) - if (!(occupant_typecache ? is_type_in_typecache(am, occupant_typecache) : isliving(am))) + if (!(can_be_occupant(am))) continue var/atom/movable/AM = am if(AM.has_buckled_mobs()) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index b217c14e..54b42a14 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -13,8 +13,8 @@ var/obj/item/reagent_containers/beaker = null var/static/list/drip_containers = typecacheof(list(/obj/item/reagent_containers/blood, /obj/item/reagent_containers/food, - /obj/item/reagent_containers/glass)) - + /obj/item/reagent_containers/glass, + /obj/item/reagent_containers/chem_pack)) /obj/machinery/iv_drip/Initialize() . = ..() update_icon() diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm new file mode 100644 index 00000000..f24b2f4f --- /dev/null +++ b/code/game/machinery/stasis.dm @@ -0,0 +1,137 @@ +#define STASIS_TOGGLE_COOLDOWN 50 +/obj/machinery/stasis + name = "Lifeform Stasis Unit" + desc = "A not so comfortable looking bed with some nozzles at the top and bottom. It will keep someone in stasis." + icon = 'icons/obj/machines/stasis.dmi' + icon_state = "stasis" + density = FALSE + can_buckle = TRUE + buckle_lying = 90 + circuit = /obj/item/circuitboard/machine/stasis + idle_power_usage = 40 + active_power_usage = 340 + var/stasis_enabled = TRUE + var/last_stasis_sound = FALSE + var/stasis_can_toggle = 0 + var/mattress_state = "stasis_on" + var/obj/effect/overlay/vis/mattress_on + +/obj/machinery/stasis/examine(mob/user) + ..() + var/turn_on_or_off = stasis_enabled ? "turn off" : "turn on" + to_chat(user, "Alt-click to [turn_on_or_off] the machine.") + +/obj/machinery/stasis/proc/play_power_sound() + var/_running = stasis_running() + if(last_stasis_sound != _running) + var/sound_freq = rand(5120, 8800) + if(_running) + playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, frequency = sound_freq) + else + playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, frequency = sound_freq) + last_stasis_sound = _running + +/obj/machinery/stasis/AltClick(mob/user) + if(world.time >= stasis_can_toggle && user.canUseTopic(src)) + stasis_enabled = !stasis_enabled + stasis_can_toggle = world.time + STASIS_TOGGLE_COOLDOWN + playsound(src, 'sound/machines/click.ogg', 60, TRUE) + play_power_sound() + update_icon() + +/obj/machinery/stasis/Exited(atom/movable/AM, atom/newloc) + if(AM == occupant) + var/mob/living/L = AM + if(L.IsInStasis()) + thaw_them(L) + . = ..() + +/obj/machinery/stasis/proc/stasis_running() + return stasis_enabled && is_operational() + +/obj/machinery/stasis/update_icon() + . = ..() + var/_running = stasis_running() + var/list/overlays_to_remove = managed_vis_overlays + + if(mattress_state) + if(!mattress_on || !managed_vis_overlays) + mattress_on = SSvis_overlays.add_vis_overlay(src, icon, mattress_state, layer, plane, dir, alpha = 0, unique = TRUE) + + if(mattress_on.alpha ? !_running : _running) //check the inverse of _running compared to truthy alpha, to see if they differ + var/new_alpha = _running ? 255 : 0 + var/easing_direction = _running ? EASE_OUT : EASE_IN + animate(mattress_on, alpha = new_alpha, time = 50, easing = CUBIC_EASING|easing_direction) + + overlays_to_remove = managed_vis_overlays - mattress_on + + SSvis_overlays.remove_vis_overlay(src, overlays_to_remove) + + if(occupant) + SSvis_overlays.add_vis_overlay(src, 'icons/obj/machines/stasis.dmi', "tubes", LYING_MOB_LAYER + 0.1, plane, dir) //using vis_overlays instead of normal overlays for mouse_opacity here + + if(stat & BROKEN) + icon_state = "stasis_broken" + return + if(panel_open || stat & MAINT) + icon_state = "stasis_maintenance" + return + icon_state = "stasis" + +/obj/machinery/stasis/obj_break(damage_flag) + . = ..() + play_power_sound() + update_icon() + +/obj/machinery/stasis/power_change() + . = ..() + play_power_sound() + update_icon() + +/obj/machinery/stasis/proc/chill_out(mob/living/target) + if(target != occupant) + return + var/freq = rand(24750, 26550) + playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 2, frequency = freq) + target.SetStasis(TRUE) + target.ExtinguishMob() + use_power = ACTIVE_POWER_USE + +/obj/machinery/stasis/proc/thaw_them(mob/living/target) + target.SetStasis(FALSE) + if(target == occupant) + use_power = IDLE_POWER_USE + +/obj/machinery/stasis/post_buckle_mob(mob/living/L) + if(!can_be_occupant(L)) + return + occupant = L + if(stasis_running()) + chill_out(L) + update_icon() + +/obj/machinery/stasis/post_unbuckle_mob(mob/living/L) + thaw_them(L) + if(L == occupant) + occupant = null + update_icon() + +/obj/machinery/stasis/process() + if( !( occupant && isliving(occupant)) ) + use_power = IDLE_POWER_USE + return + var/mob/living/L_occupant = occupant + if(stasis_running()) + if(!L_occupant.IsInStasis()) + chill_out(L_occupant) + else if(L_occupant.IsInStasis()) + thaw_them(L_occupant) + +/obj/machinery/stasis/screwdriver_act(mob/living/user, obj/item/I) + . = default_deconstruction_screwdriver(user, "stasis_maintenance", "stasis", I) + update_icon() + +/obj/machinery/stasis/crowbar_act(mob/living/user, obj/item/I) + return default_deconstruction_crowbar(I) + +#undef STASIS_TOGGLE_COOLDOWN \ No newline at end of file diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm index b9b6e3af..a5293500 100644 --- a/code/game/machinery/telecomms/computers/message.dm +++ b/code/game/machinery/telecomms/computers/message.dm @@ -419,6 +419,7 @@ "name" = "[customsender]", "job" = "[customjob]", "message" = custommessage, + "emoji_message" = emoji_parse(custommessage), "targets" = list("[customrecepient.owner] ([customrecepient.ownjob])") )) // this will log the signal and transmit it to the target diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 19600808..0cf356ad 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -106,10 +106,11 @@ return "Everyone" return data["targets"][1] -/datum/signal/subspace/pda/proc/format_message() +/datum/signal/subspace/pda/proc/format_message(emojify = FALSE) + var/message = emojify ? data["emoji_message"] : data["message"] if (logged && data["photo"]) - return "\"[data["message"]]\" (Photo)" - return "\"[data["message"]]\"" + return "\"[message]\" (Photo)" + return "\"[message]\"" /datum/signal/subspace/pda/broadcast() if (!logged) // Can only go through if a message server logs it diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 2a01a7e1..36d85edb 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -7,6 +7,14 @@ /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/glass = 2) +/obj/item/circuitboard/machine/stasis + name = "Lifeform Stasis Unit (Machine Board)" + build_path = /obj/machinery/stasis + req_components = list( + /obj/item/stack/cable_coil = 3, + /obj/item/stock_parts/manipulator = 1, + /obj/item/stock_parts/capacitor = 1) + /obj/item/circuitboard/machine/vr_sleeper name = "VR Sleeper (Machine Board)" build_path = /obj/machinery/vr_sleeper diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 1533fdfc..505d2c07 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -714,6 +714,7 @@ GLOBAL_LIST_EMPTY(PDAs) return if((last_text && world.time < last_text + 10) || (everyone && last_everyone && world.time < last_everyone + PDA_SPAM_DELAY)) return + var/emoji_message = emoji_parse(message) if(prob(1)) message += "\nSent from my PDA" // Send the signal @@ -734,7 +735,8 @@ GLOBAL_LIST_EMPTY(PDAs) "name" = "[owner]", "job" = "[ownjob]", "message" = message, - "targets" = string_targets + "targets" = string_targets, + "emoji_message" = emoji_message )) if (picture) signal.data["photo"] = picture @@ -751,13 +753,13 @@ GLOBAL_LIST_EMPTY(PDAs) // Log it in our logs tnote += "→ To [target_text]:
[signal.format_message()]
" // Show it to ghosts - var/ghost_message = "[owner] PDA Message --> [target_text]: [signal.format_message()]" + var/ghost_message = "[owner] PDA Message --> [target_text]: [signal.format_message(TRUE)]" for(var/mob/M in GLOB.player_list) if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA)) to_chat(M, "[FOLLOW_LINK(M, user)] [ghost_message]") // Log in the talk log user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text]") - to_chat(user, "Message sent to [target_text]: \"[message]\"") + to_chat(user, "Message sent to [target_text]: \"[emoji_message]\"") if (!silent) playsound(src, 'sound/machines/terminal_success.ogg', 15, 1) // Reset the photo @@ -787,7 +789,7 @@ GLOBAL_LIST_EMPTY(PDAs) hrefstart = "" hrefend = "" - to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [signal.format_message()] (Reply)") + to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [signal.format_message(TRUE)] (Reply)") update_icon(TRUE) diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 4e719625..7ab85084 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -364,7 +364,7 @@ STR.max_combined_w_class = 200 STR.max_items = 50 STR.insert_preposition = "in" - STR.can_hold = typecacheof(list(/obj/item/reagent_containers/pill, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle)) + STR.can_hold = typecacheof(list(/obj/item/reagent_containers/pill, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/chem_pack)) /* * Biowaste bag (mostly for xenobiologists) diff --git a/code/game/world.dm b/code/game/world.dm index b4c18f38..d3491903 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -259,8 +259,8 @@ GLOBAL_VAR(restart_counter) s += "[station_name()]"; s += " (" - s += "" //Change this to wherever you want the hub to link to. CIT CHANGE - links to cit's website on the hub - s += "Citadel" //Replace this with something else. Or ever better, delete it and uncomment the game version. CIT CHANGE - modifies the hub entry link + s += "" //Change this to wherever you want the hub to link to. CIT CHANGE - links to cit's website on the hub + s += "Website" //Replace this with something else. Or ever better, delete it and uncomment the game version. CIT CHANGE - modifies the hub entry link s += "" s += ")\]" //CIT CHANGE - encloses the server title in brackets to make the hub entry fancier s += "
[CONFIG_GET(string/servertagline)]
" //CIT CHANGE - adds a tagline! diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f0348a19..9b1da634 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -104,6 +104,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) "body_markings" = "None", "legs" = "Normal Legs", "moth_wings" = "Plain", + "moth_markings" = "None", "mcolor2" = "FFF", "mcolor3" = "FFF", "mam_body_markings" = "Plain", @@ -459,6 +460,20 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(mutant_category >= MAX_MUTANT_ROWS) dat += "" mutant_category = 0 + + if("moth_markings" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Moth markings

" + + dat += "[features["moth_markings"]]
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("tail_human" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -1788,6 +1803,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_moth_wings) features["moth_wings"] = new_moth_wings + if("moth_markings") + var/new_moth_markings + new_moth_markings = input(user, "Choose your character's markings:", "Character Preference") as null|anything in GLOB.moth_markings_list + if(new_moth_markings) + features["moth_markings"] = new_moth_markings + if("s_tone") var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in GLOB.skin_tones if(new_s_tone) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index bce88474..ea076b2c 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -291,6 +291,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_lizard_body_markings"] >> features["body_markings"] S["feature_lizard_legs"] >> features["legs"] S["feature_moth_wings"] >> features["moth_wings"] + S["feature_moth_markings"] >> features["moth_markings"] S["feature_human_tail"] >> features["tail_human"] S["feature_human_ears"] >> features["ears"] @@ -433,6 +434,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list) features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list) features["moth_wings"] = sanitize_inlist(features["moth_wings"], GLOB.moth_wings_list) + features["moth_markings"] = sanitize_inlist(features["moth_markings"], GLOB.moth_markings_list, "None") joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole)) job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high)) @@ -507,6 +509,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"]) WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) WRITE_FILE(S["feature_moth_wings"] , features["moth_wings"]) + WRITE_FILE(S["feature_moth_markings"] , features["moth_markings"]) //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 483055cb..18c5075b 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -399,7 +399,7 @@ return TRUE if(!O.reagents || !O.reagents.reagent_list.len) // other empty containers not accepted return FALSE - if(istype(O, /obj/item/reagent_containers/syringe) || istype(O, /obj/item/reagent_containers/glass/bottle) || istype(O, /obj/item/reagent_containers/glass/beaker) || istype(O, /obj/item/reagent_containers/spray) || istype(O, /obj/item/reagent_containers/medspray)) + if(istype(O, /obj/item/reagent_containers/syringe) || istype(O, /obj/item/reagent_containers/glass/bottle) || istype(O, /obj/item/reagent_containers/glass/beaker) || istype(O, /obj/item/reagent_containers/spray) || istype(O, /obj/item/reagent_containers/medspray)|| istype(O, /obj/item/reagent_containers/chem_pack)) return TRUE return FALSE diff --git a/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm index 6b8036bd..2f435ec5 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm @@ -66,3 +66,55 @@ /datum/sprite_accessory/moth_wings/snow name = "Snow" icon_state = "snow" + +/datum/sprite_accessory/moth_markings // the markings that moths can have. finally something other than the boring tan + icon = 'icons/mob/moth_markings.dmi' + color_src = null + +/datum/sprite_accessory/moth_markings/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/moth_markings/reddish + name = "Reddish" + icon_state = "reddish" + +/datum/sprite_accessory/moth_markings/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/moth_markings/gothic + name = "Gothic" + icon_state = "gothic" + +/datum/sprite_accessory/moth_markings/whitefly + name = "White Fly" + icon_state = "whitefly" + +/datum/sprite_accessory/moth_markings/lovers + name = "Lovers" + icon_state = "lovers" + +/datum/sprite_accessory/moth_markings/punished + name = "Punished" + icon_state = "punished" + +/datum/sprite_accessory/moth_markings/firewatch + name = "Firewatch" + icon_state = "firewatch" + +/datum/sprite_accessory/moth_markings/deathhead + name = "Deathshead" + icon_state = "deathhead" + +/datum/sprite_accessory/moth_markings/poison + name = "Poison" + icon_state = "poison" + +/datum/sprite_accessory/moth_markings/ragged + name = "Ragged" + icon_state = "ragged" + +/datum/sprite_accessory/moth_markings/moonfly + name = "Moon Fly" + icon_state = "moonfly" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 01a52b3b..92791628 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -4,7 +4,7 @@ set invisibility = 0 if (notransform) return - if(..()) //not dead + if(..() && !IsInStasis()) //not dead and not in stasis // GROW! if(amount_grown < max_grown) amount_grown++ diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 1af9dbc5..0a325859 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -28,21 +28,22 @@ if (QDELETED(src)) return 0 - if(.) //not dead - handle_active_genes() + if(!IsInStasis()) + if(.) //not dead + handle_active_genes() - if(stat != DEAD) - //heart attack stuff - handle_heart() + if(stat != DEAD) + //heart attack stuff + handle_heart() - if(stat != DEAD) - //Stuff jammed in your limbs hurts - handle_embedded_objects() + if(stat != DEAD) + //Stuff jammed in your limbs hurts + handle_embedded_objects() + dna.species.spec_life(src) // for mutantraces //Update our name based on whether our face is obscured/disfigured name = get_visible_name() - dna.species.spec_life(src) // for mutantraces if(stat != DEAD) return 1 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 9abfc582..3efcf5e5 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -719,6 +719,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) S = GLOB.legs_list[H.dna.features["legs"]] if("moth_wings") S = GLOB.moth_wings_list[H.dna.features["moth_wings"]] + if("moth_markings") + S = GLOB.moth_markings_list[H.dna.features["moth_markings"]] if("caps") S = GLOB.caps_list[H.dna.features["caps"]] if("ipc_screen") diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index c1ff5e1b..2ef5f2f7 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -9,28 +9,29 @@ stamdamageoverlaytemp = 0 update_damage_hud() - if(stat != DEAD) //Reagent processing needs to come before breathing, to prevent edge cases. - handle_organs() + if(!IsInStasis()) + if(stat != DEAD) //Reagent processing needs to come before breathing, to prevent edge cases. + handle_organs() - . = ..() + . = ..() - if (QDELETED(src)) - return + if (QDELETED(src)) + return - if(.) //not dead - handle_blood() + if(.) //not dead + handle_blood() - if(stat != DEAD) - var/bprv = handle_bodyparts() - if(bprv & BODYPART_LIFE_UPDATE_HEALTH) - updatehealth() - update_stamina() + if(stat != DEAD) + var/bprv = handle_bodyparts() + if(bprv & BODYPART_LIFE_UPDATE_HEALTH) + updatehealth() + update_stamina() - if(stat != DEAD) - handle_brain_damage() + if(stat != DEAD) + handle_brain_damage() - if(stat != DEAD) - handle_liver() + if(stat != DEAD) + handle_liver() if(stat == DEAD) stop_sound_channel(CHANNEL_HEARTBEAT) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 33b9dffa..e0386bcd 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -9,7 +9,7 @@ if (notransform) return - if(..()) + if(..() && !IsInStasis()) if(!client) if(stat == CONSCIOUS) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 201e5fea..24d813fe 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -33,43 +33,45 @@ return if(!loc) return - var/datum/gas_mixture/environment = loc.return_air() + if(!IsInStasis()) + if(stat != DEAD) + //Mutations and radiation + handle_mutations_and_radiation() - if(stat != DEAD) - //Mutations and radiation - handle_mutations_and_radiation() + if(stat != DEAD) + //Breathing, if applicable + handle_breathing(times_fired) - if(stat != DEAD) - //Breathing, if applicable - handle_breathing(times_fired) + handle_diseases()// DEAD check is in the proc itself; we want it to spread even if the mob is dead, but to handle its disease-y properties only if you're not. - handle_diseases()// DEAD check is in the proc itself; we want it to spread even if the mob is dead, but to handle its disease-y properties only if you're not. + if (QDELETED(src)) // diseases can qdel the mob via transformations + return - if (QDELETED(src)) // diseases can qdel the mob via transformations - return + if(stat != DEAD) + //Random events (vomiting etc) + handle_random_events() - if(stat != DEAD) - //Random events (vomiting etc) - handle_random_events() + //Handle temperature/pressure differences between body and environment + var/datum/gas_mixture/environment = loc.return_air() + if(environment) + handle_environment(environment) - //Handle temperature/pressure differences between body and environment - if(environment) - handle_environment(environment) + + + //stuff in the stomach + handle_stomach() + + handle_gravity() + + if(stat != DEAD) + handle_traits() // eye, ear, brain damages + handle_status_effects() //all special effects, stun, knockdown, jitteryness, hallucination, sleeping, etc handle_fire() - //stuff in the stomach - handle_stomach() - - handle_gravity() - if(machine) machine.check_eye(src) - if(stat != DEAD) - handle_traits() // eye, ear, brain damages - if(stat != DEAD) - handle_status_effects() //all special effects, stun, knockdown, jitteryness, hallucination, sleeping, etc if(stat != DEAD) return 1 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index e3d2e14a..9bbe7914 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -339,7 +339,7 @@ death() -/mob/living/incapacitated(ignore_restraints, ignore_grab) +/mob/living/incapacitated(ignore_restraints, ignore_grab, ignore_stasis) if(stat || IsUnconscious() || IsStun() || IsKnockdown() || recoveringstam || (!ignore_restraints && restrained(ignore_grab))) // CIT CHANGE - adds recoveringstam check here return TRUE @@ -603,7 +603,7 @@ ..(pressure_difference, direction, pressure_resistance_prob_delta) /mob/living/can_resist() - return !((next_move > world.time) || incapacitated(ignore_restraints = TRUE)) + return !((next_move > world.time) || incapacitated(ignore_restraints = TRUE, ignore_stasis= TRUE)) /mob/living/verb/resist() set name = "Resist" @@ -1011,6 +1011,8 @@ var/has_legs = get_num_legs() var/has_arms = get_num_arms() var/ignore_legs = get_leg_ignore() + var/in_stasis = IsInStasis() + var/canmove = !buckled && (pulledby) && !chokehold && !IsFrozen() && !in_stasis && (has_arms || ignore_legs || has_legs) var/pinned = resting && pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE // Cit change - adds pinning for aggressive-grabbing people on the ground if(ko || move_and_fall || IsStun() || chokehold) // Cit change - makes resting not force you to drop everything drop_all_held_items() diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 0880f7f4..486b28c6 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -138,6 +138,14 @@ priority_absorb_key["stuns_absorbed"] += amount return TRUE +/////////////////////////////////// STASIS /////////////////////////////////// + +/mob/living/proc/IsInStasis() + . = has_status_effect(STATUS_EFFECT_STASIS) + +/mob/living/proc/SetStasis(apply, updating = TRUE) + . = apply ? apply_status_effect(STATUS_EFFECT_STASIS, null, updating) : remove_status_effect(STATUS_EFFECT_STASIS) + /////////////////////////////////// DISABILITIES //////////////////////////////////// /mob/living/proc/add_quirk(quirk, spawn_effects) //separate proc due to the way these ones are handled diff --git a/code/modules/research/designs/machine_desings/machine_designs_medical.dm b/code/modules/research/designs/machine_desings/machine_designs_medical.dm index 65b3d74f..c4f0d842 100644 --- a/code/modules/research/designs/machine_desings/machine_designs_medical.dm +++ b/code/modules/research/designs/machine_desings/machine_designs_medical.dm @@ -2,6 +2,14 @@ ///MEDICAL Boards// /////////////////// +/datum/design/board/stasis + name = "Machine Design (Lifeform Stasis Unit)" + desc = "The circuit board for a stasis unit." + id = "stasis" + build_path = /obj/item/circuitboard/machine/stasis + category = list("Medical Machinery") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + /datum/design/board/limbgrower name = "Machine Design (Limb Grower Board)" desc = "The circuit board for a limb grower." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 8ccb7fd5..389a5650 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -508,7 +508,7 @@ display_name = "Cryostasis Technology" description = "Smart freezing of objects to preserve them!" prereq_ids = list("adv_engi", "biotech") - design_ids = list("splitbeaker", "noreactsyringe", "cryotube", "cryo_Grenade") + design_ids = list("splitbeaker", "noreactsyringe", "cryotube", "cryo_Grenade", "stasis") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) export_price = 4000 diff --git a/icons/mob/moth_markings.dmi b/icons/mob/moth_markings.dmi new file mode 100644 index 00000000..06d0d2e2 Binary files /dev/null and b/icons/mob/moth_markings.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 8142e034..397d2ce5 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/obj/doors/airlocks/station/overlays.dmi b/icons/obj/doors/airlocks/station/overlays.dmi index ebe4bfb8..299adf3c 100644 Binary files a/icons/obj/doors/airlocks/station/overlays.dmi and b/icons/obj/doors/airlocks/station/overlays.dmi differ diff --git a/icons/obj/machines/stasis.dmi b/icons/obj/machines/stasis.dmi new file mode 100644 index 00000000..f859db85 Binary files /dev/null and b/icons/obj/machines/stasis.dmi differ diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi index 1b8dacf3..fa74d50e 100644 Binary files a/icons/obj/reagentfillings.dmi and b/icons/obj/reagentfillings.dmi differ diff --git a/icons/obj/stasis.dmi b/icons/obj/stasis.dmi new file mode 100644 index 00000000..f859db85 Binary files /dev/null and b/icons/obj/stasis.dmi differ diff --git a/icons/obj/syringe.dmi b/icons/obj/syringe.dmi index 80e68139..16203907 100644 Binary files a/icons/obj/syringe.dmi and b/icons/obj/syringe.dmi differ diff --git a/icons/turf/walls/wall.dmi b/icons/turf/walls/wall.dmi index f1183bce..6dfe1ecd 100644 Binary files a/icons/turf/walls/wall.dmi and b/icons/turf/walls/wall.dmi differ diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index be9e0547..535885b3 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -149,8 +149,8 @@ should_draw_citadel = TRUE species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG) - mutant_bodyparts = list("mam_ears", "mam_body_markings", "mam_tail", "taur", "moth_wings", "mam_snouts") - default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "moth_wings" = "Plain", "mam_snouts" = "Bug", "mam_body_markings" = "Moth", "taur" = "None") + mutant_bodyparts = list("mam_ears", "mam_body_markings", "mam_tail", "taur", "moth_wings","moth_markings", "mam_snouts") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "moth_wings" = "Plain","moth_markings" = "None", "mam_snouts" = "Bug", "mam_body_markings" = "Moth", "taur" = "None") attack_verb = "flutter" //wat? attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' diff --git a/sound/AI/aimalf.ogg b/sound/AI/aimalf.ogg index b7996916..50b7688d 100644 Binary files a/sound/AI/aimalf.ogg and b/sound/AI/aimalf.ogg differ diff --git a/sound/AI/aliens.ogg b/sound/AI/aliens.ogg index f7d17462..98132048 100644 Binary files a/sound/AI/aliens.ogg and b/sound/AI/aliens.ogg differ diff --git a/sound/AI/attention.ogg b/sound/AI/attention.ogg index 912be442..563e4f80 100644 Binary files a/sound/AI/attention.ogg and b/sound/AI/attention.ogg differ diff --git a/sound/AI/commandreport.ogg b/sound/AI/commandreport.ogg index 82e4ca42..36921404 100644 Binary files a/sound/AI/commandreport.ogg and b/sound/AI/commandreport.ogg differ diff --git a/sound/AI/granomalies.ogg b/sound/AI/granomalies.ogg index 89b368d5..89a776c3 100644 Binary files a/sound/AI/granomalies.ogg and b/sound/AI/granomalies.ogg differ diff --git a/sound/AI/intercept.ogg b/sound/AI/intercept.ogg index 3569a07d..c0a3c6c7 100644 Binary files a/sound/AI/intercept.ogg and b/sound/AI/intercept.ogg differ diff --git a/sound/AI/ionstorm.ogg b/sound/AI/ionstorm.ogg index 9f39713d..4bb414e5 100644 Binary files a/sound/AI/ionstorm.ogg and b/sound/AI/ionstorm.ogg differ diff --git a/sound/AI/meteors.ogg b/sound/AI/meteors.ogg index 8f1c3aea..4e7cdd11 100644 Binary files a/sound/AI/meteors.ogg and b/sound/AI/meteors.ogg differ diff --git a/sound/AI/newAI.ogg b/sound/AI/newAI.ogg index 35aba345..d21967d0 100644 Binary files a/sound/AI/newAI.ogg and b/sound/AI/newAI.ogg differ diff --git a/sound/AI/outbreak5.ogg b/sound/AI/outbreak5.ogg index 39c79c92..fbdb8eed 100644 Binary files a/sound/AI/outbreak5.ogg and b/sound/AI/outbreak5.ogg differ diff --git a/sound/AI/outbreak7.ogg b/sound/AI/outbreak7.ogg index f21d4fca..f35e65be 100644 Binary files a/sound/AI/outbreak7.ogg and b/sound/AI/outbreak7.ogg differ diff --git a/sound/AI/poweroff.ogg b/sound/AI/poweroff.ogg index 1c6377c9..f445f195 100644 Binary files a/sound/AI/poweroff.ogg and b/sound/AI/poweroff.ogg differ diff --git a/sound/AI/poweron.ogg b/sound/AI/poweron.ogg index 9d18797d..8cc3058c 100644 Binary files a/sound/AI/poweron.ogg and b/sound/AI/poweron.ogg differ diff --git a/sound/AI/radiation.ogg b/sound/AI/radiation.ogg index ef395af3..18e112a7 100644 Binary files a/sound/AI/radiation.ogg and b/sound/AI/radiation.ogg differ diff --git a/sound/AI/shuttlecalled.ogg b/sound/AI/shuttlecalled.ogg index 716bf824..da5a5e21 100644 Binary files a/sound/AI/shuttlecalled.ogg and b/sound/AI/shuttlecalled.ogg differ diff --git a/sound/AI/shuttledock.ogg b/sound/AI/shuttledock.ogg index 0f70bebc..3c035c59 100644 Binary files a/sound/AI/shuttledock.ogg and b/sound/AI/shuttledock.ogg differ diff --git a/sound/AI/shuttlerecalled.ogg b/sound/AI/shuttlerecalled.ogg index 5f6db404..1a46af54 100644 Binary files a/sound/AI/shuttlerecalled.ogg and b/sound/AI/shuttlerecalled.ogg differ diff --git a/sound/AI/spanomalies.ogg b/sound/AI/spanomalies.ogg index 7680726f..e5ababea 100644 Binary files a/sound/AI/spanomalies.ogg and b/sound/AI/spanomalies.ogg differ diff --git a/sound/AI/welcome.ogg b/sound/AI/welcome.ogg index c7013dcb..2224cabb 100644 Binary files a/sound/AI/welcome.ogg and b/sound/AI/welcome.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 69c3026a..c80bb0fb 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -605,6 +605,7 @@ #include "code\game\machinery\Sleeper.dm" #include "code\game\machinery\slotmachine.dm" #include "code\game\machinery\spaceheater.dm" +#include "code\game\machinery\stasis.dm" #include "code\game\machinery\status_display.dm" #include "code\game\machinery\suit_storage_unit.dm" #include "code\game\machinery\syndicatebeacon.dm"