Merge pull request #2 from quotefox/master

a
This commit is contained in:
shellspeed1
2019-09-29 20:18:01 -07:00
committed by GitHub
61 changed files with 462 additions and 101 deletions
+2
View File
@@ -0,0 +1,2 @@
tgstation.int
+16 -15
View File
@@ -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
+1
View File
@@ -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 //
/////////////
+3
View File
@@ -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),
+5
View File
@@ -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)
+1
View File
@@ -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
+33 -14
View File
@@ -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)
+38
View File
@@ -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"
+39 -1
View File
@@ -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.</span>")
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()
+4 -1
View File
@@ -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())
+2 -2
View File
@@ -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()
+137
View File
@@ -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, "<span class='notice'>Alt-click to [turn_on_or_off] the machine.</span>")
/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
@@ -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
@@ -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"]]\" (<a href='byond://?src=[REF(logged)];photo=1'>Photo</a>)"
return "\"[data["message"]]\""
return "\"[message]\" (<a href='byond://?src=[REF(logged)];photo=1'>Photo</a>)"
return "\"[message]\""
/datum/signal/subspace/pda/broadcast()
if (!logged) // Can only go through if a message server logs it
@@ -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
+6 -4
View File
@@ -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 += "<i><b>&rarr; To [target_text]:</b></i><br>[signal.format_message()]<br>"
// Show it to ghosts
var/ghost_message = "<span class='name'>[owner] </span><span class='game say'>PDA Message</span> --> <span class='name'>[target_text]</span>: <span class='message'>[signal.format_message()]</span>"
var/ghost_message = "<span class='name'>[owner] </span><span class='game say'>PDA Message</span> --> <span class='name'>[target_text]</span>: <span class='message'>[signal.format_message(TRUE)]</span>"
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, "<span class='info'>Message sent to [target_text]: \"[message]\"</span>")
to_chat(user, "<span class='info'>Message sent to [target_text]: \"[emoji_message]\"</span>")
if (!silent)
playsound(src, 'sound/machines/terminal_success.ogg', 15, 1)
// Reset the photo
@@ -787,7 +789,7 @@ GLOBAL_LIST_EMPTY(PDAs)
hrefstart = "<a href='?src=[REF(L)];track=[html_encode(signal.data["name"])]'>"
hrefend = "</a>"
to_chat(L, "[icon2html(src)] <b>Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], </b>[signal.format_message()] (<a href='byond://?src=[REF(src)];choice=Message;skiprefresh=1;target=[REF(signal.source)]'>Reply</a>)")
to_chat(L, "[icon2html(src)] <b>Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], </b>[signal.format_message(TRUE)] (<a href='byond://?src=[REF(src)];choice=Message;skiprefresh=1;target=[REF(signal.source)]'>Reply</a>)")
update_icon(TRUE)
+1 -1
View File
@@ -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)
+2 -2
View File
@@ -259,8 +259,8 @@ GLOBAL_VAR(restart_counter)
s += "<b>[station_name()]</b>";
s += " ("
s += "<a href=\"https://citadel-station.net/home/\">" //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 += "<a href=\"http://hyperstation13.com//\">" //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 += "</a>"
s += ")\]" //CIT CHANGE - encloses the server title in brackets to make the hub entry fancier
s += "<br>[CONFIG_GET(string/servertagline)]<br>" //CIT CHANGE - adds a tagline!
+21
View File
@@ -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 += "</td>"
mutant_category = 0
if("moth_markings" in pref_species.default_features)
if(!mutant_category)
dat += APPEARANCE_CATEGORY_COLUMN
dat += "<h3>Moth markings</h3>"
dat += "<a href='?_src_=prefs;preference=moth_markings;task=input'>[features["moth_markings"]]</a><BR>"
mutant_category++
if(mutant_category >= MAX_MUTANT_ROWS)
dat += "</td>"
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)
@@ -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)
@@ -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
@@ -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"
@@ -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++
+10 -9
View File
@@ -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
@@ -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")
+17 -16
View File
@@ -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)
@@ -9,7 +9,7 @@
if (notransform)
return
if(..())
if(..() && !IsInStasis())
if(!client)
if(stat == CONSCIOUS)
+27 -25
View File
@@ -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
+4 -2
View File
@@ -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()
+8
View File
@@ -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
@@ -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."
+1 -1
View File
@@ -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
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -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'
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -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"