diff --git a/.github/workflows/update_tgs_dmapi.yml b/.github/workflows/update_tgs_dmapi.yml index 72c029c770..6fe53f700c 100644 --- a/.github/workflows/update_tgs_dmapi.yml +++ b/.github/workflows/update_tgs_dmapi.yml @@ -29,7 +29,7 @@ jobs: run: | git config user.name tgstation-server git config user.email tgstation-server@users.noreply.github.com - git add * + git add . git commit -m 'Update TGS DMAPI' git push -f -u origin tgs-dmapi-update diff --git a/_maps/RandomZLevels/away_mission/jungleresort.dmm b/_maps/RandomZLevels/away_mission/jungleresort.dmm new file mode 100644 index 0000000000..d4698fec9a --- /dev/null +++ b/_maps/RandomZLevels/away_mission/jungleresort.dmm @@ -0,0 +1,26564 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ab" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"af" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/toy/plush/random, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"ai" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/closet/crate/secure/loot, +/obj/item/clothing/head/collectable/paper, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"ak" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"an" = ( +/obj/structure/stone_tile/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"ap" = ( +/obj/structure/stone_tile/surrounding/burnt, +/obj/structure/stone_tile/center/burnt, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"ar" = ( +/obj/structure/flora/ausbushes/fullgrass, +/mob/living/carbon/monkey, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"as" = ( +/obj/structure/flora/junglebush/b, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"at" = ( +/obj/machinery/jukebox, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"aA" = ( +/obj/machinery/light, +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"aB" = ( +/obj/structure/flora/junglebush/large, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"aG" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/rock, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"aI" = ( +/obj/structure/flora/tree/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"aL" = ( +/obj/structure/stone_tile/slab/cracked, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"aP" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"aY" = ( +/obj/machinery/vending/autodrobe, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"bf" = ( +/obj/structure/sign/barsign, +/turf/closed/wall/mineral/wood, +/area/awaymission/jungleresort) +"bg" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"bn" = ( +/obj/structure/flora/tree/jungle/small, +/obj/structure/flora/rock/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"bp" = ( +/obj/structure/flora/tree/jungle, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"br" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/rock/pile/largejungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"bv" = ( +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/center/cracked, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"bw" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"by" = ( +/obj/item/kirbyplants/random, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"bG" = ( +/turf/closed/indestructible/riveted, +/area/awaymission/jungleresort) +"bW" = ( +/obj/structure/table/wood, +/obj/machinery/button/door{ + id = "ResortCabin2"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/obj/item/poster/random_official, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"bZ" = ( +/obj/structure/table/wood, +/obj/item/storage/box/donkpockets, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"cg" = ( +/obj/structure/table/wood, +/obj/machinery/reagentgrinder, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/kitchen/knife, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"cn" = ( +/obj/structure/flora/junglebush/c, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"cw" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"cA" = ( +/obj/structure/flora/junglebush/b, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"cD" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"cH" = ( +/obj/structure/flora/grass/jungle, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"cJ" = ( +/obj/structure/flora/junglebush/c, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"cK" = ( +/obj/structure/closet/crate, +/obj/item/clothing/head/collectable/tophat, +/turf/open/floor/plating/rust, +/area/awaymission/jungleresort) +"cT" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/jungleresort) +"cV" = ( +/obj/structure/flora/junglebush/c, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"cX" = ( +/obj/structure/flora/rock, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"dm" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/beer, +/obj/item/clothing/head/hardhat/cakehat, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"dn" = ( +/obj/structure/chair/comfy/brown, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"dt" = ( +/obj/structure/table/wood, +/mob/living/carbon/monkey/punpun/curiousgorge, +/obj/item/reagent_containers/food/drinks/drinkingglass, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"du" = ( +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"dC" = ( +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"dF" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"dW" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"dY" = ( +/obj/structure/flora/junglebush/large, +/obj/structure/flora/rock/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"ef" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/circuit, +/area/awaymission/jungleresort) +"ez" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/obj/structure/stone_tile/center/cracked, +/obj/item/ammo_casing/shotgun/buckshot, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"eB" = ( +/obj/structure/chair/comfy/black, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"eC" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"eD" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/obj/machinery/button/door{ + id = "AbandonedCabinDorm"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/open/floor/carpet/red, +/area/awaymission/jungleresort) +"eI" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/awaymission/jungleresort) +"eJ" = ( +/obj/structure/flora/junglebush, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"eK" = ( +/obj/machinery/washing_machine, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"eN" = ( +/obj/item/clothing/suit/hooded/wintercoat/bar, +/obj/structure/table/wood, +/obj/item/clothing/head/that, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"eR" = ( +/obj/structure/bed, +/obj/item/bedsheet/captain, +/obj/machinery/button/door{ + id = "ResortManagerDorm"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"eT" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"fh" = ( +/obj/structure/table/wood, +/obj/machinery/button/door{ + id = "ResortCabin3"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 + }, +/obj/item/storage/wallet/random, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"fm" = ( +/obj/structure/reagent_dispensers/keg/mead, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"fy" = ( +/obj/structure/stone_tile/surrounding_tile/burnt, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"fz" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"fH" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/tree/jungle/small, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"fW" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"fX" = ( +/obj/structure/flora/grass/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"gj" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"go" = ( +/obj/structure/flora/rock, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"gv" = ( +/obj/structure/table/wood, +/obj/item/book/manual/chef_recipes, +/obj/item/toy/figure/chef, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"gK" = ( +/obj/structure/table/wood, +/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot, +/obj/item/ammo_box/magazine/toy/m762/riot, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"gL" = ( +/obj/structure/table/wood, +/obj/item/export/bottle/minikeg, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"gN" = ( +/obj/structure/table/wood/fancy, +/obj/item/candle/infinite, +/obj/item/toy/figure/chaplain, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"gU" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"gV" = ( +/obj/structure/table/wood, +/obj/machinery/button/door{ + id = "ResortCabin1"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/obj/item/lipstick/random, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"gZ" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/under/color/jumpskirt/random, +/obj/item/clothing/under/color/random, +/obj/item/clothing/under/color/random, +/obj/item/clothing/under/color/jumpskirt/random, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"hj" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile/cracked, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"hk" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"hl" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"hp" = ( +/obj/structure/flora/tree/jungle/small, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"ht" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"hv" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"hw" = ( +/obj/structure/flora/junglebush, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"hy" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"hC" = ( +/obj/structure/flora/rock, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"hH" = ( +/obj/structure/flora/rock/jungle, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"hN" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"hU" = ( +/obj/structure/curtain, +/obj/machinery/shower, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"hX" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/obj/structure/stone_tile/burnt, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"ia" = ( +/obj/structure/flora/grass/jungle/b, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"ie" = ( +/obj/structure/flora/junglebush, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"ih" = ( +/obj/structure/stone_tile/surrounding/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/center/cracked, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"ii" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/carneburrito, +/obj/item/reagent_containers/food/drinks/soda_cans/starkist, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"im" = ( +/obj/machinery/computer/security/wooden_tv, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"io" = ( +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"is" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/rock/pile, +/obj/structure/flora/ausbushes/stalkybush, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"iv" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/center/burnt, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"iE" = ( +/obj/structure/closet/secure_closet/bar, +/obj/item/clothing/glasses/sunglasses/reagent, +/obj/item/clothing/under/rank/civilian/bartender/skirt, +/obj/item/clothing/accessory/waistcoat, +/obj/item/clothing/under/rank/civilian/bartender, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"iG" = ( +/obj/structure/flora/junglebush/large, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"iH" = ( +/obj/machinery/gibber, +/obj/machinery/light/small, +/turf/open/floor/plasteel/freezer, +/area/awaymission/jungleresort) +"iL" = ( +/obj/structure/bed, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/item/bedsheet/syndie, +/turf/open/floor/carpet/red, +/area/awaymission/jungleresort) +"iR" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"iU" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"iZ" = ( +/obj/item/storage/toolbox/artistic, +/obj/structure/table/wood/fancy, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"jb" = ( +/obj/structure/flora/rock/pile, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"jh" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"jj" = ( +/obj/structure/flora/junglebush, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"js" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"jy" = ( +/obj/structure/flora/grass/jungle/b, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"jB" = ( +/obj/structure/flora/junglebush/large, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"jF" = ( +/obj/structure/flora/tree/jungle, +/obj/machinery/light, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"jH" = ( +/obj/structure/flora/junglebush/b, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"jJ" = ( +/obj/structure/flora/grass/jungle, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"jL" = ( +/obj/structure/flora/ausbushes/brflowers, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"jO" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"jQ" = ( +/obj/structure/flora/junglebush/c, +/obj/machinery/light, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"kf" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/junglebush/c, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"kn" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"kq" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck/syndicate, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"kr" = ( +/obj/structure/flora/junglebush/large, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"kw" = ( +/obj/structure/flora/junglebush, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"kz" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/shaker, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"kB" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/fullupgrade, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"kI" = ( +/obj/structure/flora/junglebush, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"kJ" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"kQ" = ( +/obj/machinery/processor, +/turf/open/floor/plasteel/freezer, +/area/awaymission/jungleresort) +"kW" = ( +/turf/closed/wall/rust, +/area/awaymission/jungleresort) +"le" = ( +/obj/structure/chair/sofa/corner, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"lf" = ( +/obj/structure/flora/rock/pile, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"ll" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"lr" = ( +/obj/structure/flora/junglebush/b, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"lB" = ( +/obj/structure/chair/sofa/right{ + dir = 1 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"lJ" = ( +/obj/structure/flora/junglebush/c, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"lS" = ( +/obj/structure/toilet/secret/low_loot{ + dir = 1 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"lV" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ResortManagerDorm"; + name = "Resort Manager's Dorm" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"mg" = ( +/obj/machinery/door/airlock/engineering{ + name = "Resort Power" + }, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"mh" = ( +/obj/structure/flora/ausbushes/grassybush, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"mk" = ( +/obj/structure/flora/junglebush/c, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"ml" = ( +/obj/structure/table/wood, +/obj/item/toy/figure/captain, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"mt" = ( +/obj/structure/flora/junglebush, +/obj/machinery/light, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"mu" = ( +/obj/machinery/door/window{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"my" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/lightreplacer, +/obj/item/storage/box/lights/mixed, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"mE" = ( +/obj/structure/flora/grass/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"mY" = ( +/obj/structure/flora/rock, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"mZ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"ne" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"nm" = ( +/obj/structure/flora/junglebush/c, +/obj/structure/flora/grass/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"no" = ( +/obj/item/chair, +/obj/item/reagent_containers/food/drinks/beer, +/obj/machinery/light/floor, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"np" = ( +/obj/structure/flora/junglebush/c, +/obj/structure/flora/junglebush, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"nq" = ( +/turf/open/floor/mineral/titanium/yellow, +/area/awaymission/jungleresort) +"nt" = ( +/obj/structure/flora/rock/jungle, +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/junglebush/c, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"nv" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"nw" = ( +/obj/structure/flora/grass/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"nD" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"nJ" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"nU" = ( +/obj/structure/flora/ausbushes/grassybush, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"od" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"og" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"oj" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"op" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/jungleresort) +"ot" = ( +/obj/structure/table/wood, +/obj/item/canvas/nineteenXnineteen, +/obj/item/canvas/nineteenXnineteen, +/obj/item/canvas/nineteenXnineteen, +/obj/item/canvas/nineteenXnineteen, +/obj/item/toy/crayon/spraycan, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"ow" = ( +/obj/structure/flora/tree/jungle, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"oW" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/head/collectable/petehat/gang, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"oX" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"oZ" = ( +/turf/closed/indestructible/riveted/boss, +/area/awaymission/jungleresort) +"pm" = ( +/obj/structure/flora/grass/jungle/b, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"pn" = ( +/obj/structure/toilet/secret/low_loot, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"po" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/center/cracked, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"px" = ( +/obj/machinery/light, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"pC" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/rock/pile, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"pK" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/rock, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"pN" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/ausbushes/grassybush, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"pP" = ( +/obj/structure/sign/warning, +/turf/closed/mineral/random/labormineral/jungle, +/area/awaymission/jungleresort) +"pQ" = ( +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"pT" = ( +/obj/structure/table, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/jungleresort) +"pU" = ( +/obj/structure/flora/junglebush/b, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"qa" = ( +/turf/open/floor/plating/rust, +/area/awaymission/jungleresort) +"qg" = ( +/turf/closed/wall/mineral/titanium, +/area/awaymission/jungleresort) +"qi" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/closet/crate/secure/loot, +/obj/item/clothing/head/collectable/beret, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"qr" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"qs" = ( +/obj/item/storage/toolbox/syndicate, +/obj/structure/table/wood/fancy, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"qz" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"qC" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"qG" = ( +/obj/item/storage/toolbox/emergency, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/table/wood/fancy, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"rd" = ( +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"rg" = ( +/obj/structure/stone_tile/center/cracked, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"rm" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"ro" = ( +/obj/structure/flora/rock/jungle, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"rt" = ( +/obj/structure/chair/sofa/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"rv" = ( +/obj/item/statuebust, +/obj/structure/table/wood/fancy, +/turf/open/floor/plasteel/dark, +/area/awaymission/jungleresort) +"rx" = ( +/obj/structure/flora/junglebush, +/obj/structure/flora/junglebush/b, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"rF" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"rH" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"rP" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"rQ" = ( +/obj/structure/flora/tree/jungle/small, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"rS" = ( +/obj/structure/table/wood, +/obj/item/toy/plush/beeplushie, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"rT" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"se" = ( +/obj/structure/flora/junglebush/b, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"sh" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"sn" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"so" = ( +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"sq" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"st" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"sD" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/baguette, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"sQ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"sR" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/flashlight/lamp, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"sS" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/cigarettes/cigpack_robustgold, +/obj/item/clothing/mask/cigarette/robustgold, +/obj/item/lighter, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"td" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/junglebush/c, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"ti" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"tn" = ( +/obj/structure/flora/rock/pile, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"tu" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/junglebush, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"tx" = ( +/obj/machinery/door/airlock/wood{ + name = "Resort Bar Backroom" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"tC" = ( +/obj/structure/table/wood, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/brute, +/obj/item/storage/firstaid/toxin, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"tH" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 5 + }, +/obj/structure/stone_tile/center, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"tK" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"tS" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ResortCabin1"; + name = "Resort Cabin 1" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"tT" = ( +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"tZ" = ( +/obj/structure/flora/rock/pile, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"uc" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"ue" = ( +/obj/machinery/light, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"uh" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"uj" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ResortCabin3"; + name = "Resort Cabin 3" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"ur" = ( +/obj/structure/flora/tree/jungle, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"us" = ( +/obj/structure/flora/rock, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"uu" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"uv" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"ux" = ( +/obj/item/stack/sheet/animalhide/monkey, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"uy" = ( +/obj/structure/chair/stool, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"uC" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"uG" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"uO" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"uS" = ( +/obj/structure/flora/rock/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"uT" = ( +/obj/structure/table/wood, +/obj/item/folder/blue, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"uW" = ( +/obj/structure/flora/grass/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"uX" = ( +/obj/structure/flora/junglebush/large, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"uZ" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"vc" = ( +/obj/structure/flora/grass/jungle/b, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"vl" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"vq" = ( +/obj/structure/barricade/wooden, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"vs" = ( +/obj/structure/table/wood, +/obj/machinery/button/door{ + id = "ResortCabin4"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 + }, +/obj/effect/spawner/lootdrop/glowstick, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"vw" = ( +/obj/machinery/door/airlock/wood{ + name = "Abandoned Cabin" + }, +/obj/structure/barricade/wooden, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"vx" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"vy" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"vK" = ( +/obj/structure/flora/ausbushes/stalkybush, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"vN" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"vZ" = ( +/obj/machinery/door/airlock/wood{ + name = "Resort Bar" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"wj" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"wm" = ( +/obj/structure/flora/junglebush/c, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"wo" = ( +/obj/structure/table/wood/fancy, +/obj/item/storage/toolbox/gold_fake, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"wq" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen/fountain, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"ws" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"wv" = ( +/obj/structure/bed, +/obj/effect/spawner/lootdrop/bedsheet, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"ww" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/suit/hooded/wintercoat/captain, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"wF" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"wG" = ( +/obj/structure/flora/rock/jungle, +/obj/structure/flora/grass/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"wH" = ( +/obj/structure/flora/junglebush/b, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"wJ" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/structure/flora/ausbushes/grassybush, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"wS" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/center/cracked, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"wV" = ( +/obj/structure/chair/wood, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"wZ" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"xr" = ( +/obj/structure/table/wood, +/obj/structure/bedsheetbin/color, +/obj/item/toy/figure/assistant, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"xD" = ( +/obj/structure/flora/rock/pile, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"xH" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"xL" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"xQ" = ( +/obj/machinery/door/airlock/wood, +/turf/open/floor/carpet/red, +/area/awaymission/jungleresort) +"xS" = ( +/obj/structure/chair/wood, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"xU" = ( +/obj/structure/flora/junglebush/b, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"xV" = ( +/obj/structure/flora/junglebush, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"yb" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"yi" = ( +/obj/item/grown/log/tree, +/obj/item/lighter, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"yr" = ( +/obj/structure/statue/sandstone/venus, +/turf/open/floor/plasteel/dark, +/area/awaymission/jungleresort) +"yu" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"yx" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"yy" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"yz" = ( +/obj/machinery/door/airlock/wood{ + name = "Resort Manager's Office" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"yC" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"yF" = ( +/obj/machinery/vending/cola/random, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"yJ" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 5 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"yK" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"yL" = ( +/obj/machinery/vending/snack/random, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"yM" = ( +/obj/item/kirbyplants/random, +/obj/machinery/light, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"yQ" = ( +/obj/effect/spawner/lootdrop/cig_packs, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"yS" = ( +/obj/machinery/door/window, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"yW" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/jungleresort) +"yX" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/salad/validsalad, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"yY" = ( +/obj/machinery/door/airlock/shuttle, +/turf/open/floor/mineral/titanium, +/area/awaymission/jungleresort) +"zl" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"zr" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"zx" = ( +/obj/structure/flora/junglebush/b, +/obj/structure/flora/rock, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"zA" = ( +/obj/structure/flora/grass/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"zC" = ( +/obj/structure/flora/grass/jungle/b, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"zH" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/jungleresort) +"zI" = ( +/obj/structure/dresser, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"zK" = ( +/obj/structure/flora/rock/jungle, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"zP" = ( +/obj/structure/flora/tree/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"zV" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"zY" = ( +/obj/structure/flora/junglebush/c, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Aa" = ( +/obj/structure/flora/junglebush/c, +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Ag" = ( +/obj/machinery/door/airlock/wood{ + name = "Resort Office" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Ah" = ( +/obj/structure/table/wood/poker, +/obj/item/dice/d6, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Ak" = ( +/obj/structure/flora/junglebush/large, +/obj/structure/flora/rock/jungle, +/obj/structure/flora/grass/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"An" = ( +/obj/effect/spawner/lootdrop/bedsheet, +/obj/structure/bed, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Ar" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Az" = ( +/obj/structure/flora/junglebush/b, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"AC" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/obj/structure/stone_tile/center, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"AF" = ( +/obj/structure/flora/junglebush, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"AR" = ( +/turf/closed/mineral/random/labormineral/jungle, +/area/awaymission/jungleresort) +"AS" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"AT" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"AU" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/structure/flora/rock, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"AV" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"Bh" = ( +/obj/machinery/light/floor, +/obj/structure/easel, +/obj/item/canvas/nineteenXnineteen, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Bn" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Bp" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/rock/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Bq" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Br" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"BB" = ( +/obj/machinery/door/window, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"BM" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"BP" = ( +/obj/structure/dresser, +/turf/open/floor/carpet/red, +/area/awaymission/jungleresort) +"BQ" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"BY" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"BZ" = ( +/obj/structure/flora/junglebush/c, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Cc" = ( +/obj/item/mop, +/obj/structure/mopbucket, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"Co" = ( +/obj/structure/chair/wood/wings, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Ct" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Cu" = ( +/obj/structure/flora/junglebush, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Cv" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/port_gen/pacman/super, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"CA" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"CC" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"CH" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"CK" = ( +/obj/structure/flora/rock/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"CN" = ( +/obj/structure/flora/tree/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"CR" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"CT" = ( +/obj/item/storage/toolbox/greyscale, +/obj/structure/table/wood/fancy, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"CV" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"CY" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Db" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 6 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Di" = ( +/obj/item/storage/toolbox/drone, +/obj/structure/table/wood/fancy, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"Dj" = ( +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"Dr" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 6 + }, +/obj/structure/stone_tile/center/cracked, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Du" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ResortCabin4"; + name = "Resort Cabin 4" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Dz" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/junglebush/b, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"DF" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 5 + }, +/obj/structure/stone_tile/center/cracked, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"DL" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"DO" = ( +/obj/structure/flora/tree/jungle/small, +/obj/machinery/light, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"DS" = ( +/obj/structure/flora/junglebush/large, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"DU" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/burger/plain, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Ei" = ( +/obj/structure/table/wood, +/obj/machinery/door/window{ + dir = 8 + }, +/obj/item/paper/crumpled/awaymissions/jungleresort/notice, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"El" = ( +/obj/structure/flora/grass/jungle/b, +/obj/machinery/light, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Eq" = ( +/obj/structure/frame/computer, +/obj/effect/decal/cleanable/glass, +/obj/item/shard, +/turf/open/floor/mineral/titanium/yellow, +/area/awaymission/jungleresort) +"Et" = ( +/obj/structure/toilet/secret/low_loot{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Eu" = ( +/obj/structure/table/wood, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/toy/plush/random, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Ex" = ( +/obj/structure/table/wood/fancy, +/obj/item/candle/infinite, +/turf/open/floor/plasteel/dark, +/area/awaymission/jungleresort) +"Ey" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"EA" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"EL" = ( +/obj/structure/table/wood, +/obj/item/storage/box/donkpockets, +/obj/item/storage/box/donkpockets, +/obj/item/camera, +/obj/item/camera_film, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"EO" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/jungleresort) +"EP" = ( +/obj/machinery/door/airlock/wood{ + name = "Resort Cafe" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"EQ" = ( +/obj/structure/flora/tree/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"EV" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/junglebush, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Fd" = ( +/obj/structure/flora/grass/jungle/b, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Fl" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/center, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Fq" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Fr" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Fz" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/rock/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"FL" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"FN" = ( +/obj/structure/flora/tree/jungle, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"FO" = ( +/obj/machinery/door/airlock/wood, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"FP" = ( +/obj/structure/flora/grass/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"FQ" = ( +/obj/structure/flora/ausbushes/reedbush, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"FR" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"FT" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"FV" = ( +/obj/machinery/door/airlock/freezer{ + name = "Freezer" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"FX" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Gd" = ( +/obj/structure/chair/pew{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"Gk" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Gl" = ( +/obj/structure/sign/poster/random, +/turf/closed/wall/mineral/wood, +/area/awaymission/jungleresort) +"Gn" = ( +/obj/machinery/light, +/obj/structure/closet/crate/bin, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Gu" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/ausbushes/sparsegrass, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Gv" = ( +/obj/structure/table/wood, +/obj/item/toy/figure/bartender, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Gz" = ( +/obj/structure/flora/junglebush, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"GA" = ( +/obj/structure/flora/tree/jungle/small, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"GD" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 5 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"GN" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"GU" = ( +/obj/item/reagent_containers/food/snacks/sausage, +/obj/item/reagent_containers/food/snacks/sausage, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Ha" = ( +/obj/structure/table/wood, +/obj/item/dualsaber/toy, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Hg" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"Hk" = ( +/obj/structure/flora/grass/jungle, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Hm" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Hs" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/machinery/light, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Hw" = ( +/obj/machinery/door/airlock/wood{ + name = "Resort Arrivals" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Hy" = ( +/obj/structure/flora/rock/pile, +/mob/living/carbon/monkey, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"HC" = ( +/obj/structure/bonfire/dense, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"HD" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"HI" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ResortCabin2"; + name = "Resort Cabin 2" + }, +/obj/structure/barricade/wooden, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"HQ" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Ih" = ( +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"Ii" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Ij" = ( +/obj/structure/chair/pew/left{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"Ir" = ( +/obj/effect/decal/cleanable/blood/gibs/human/down, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Iw" = ( +/obj/structure/table/wood, +/obj/effect/spawner/lootdrop/space_cash, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"IC" = ( +/obj/structure/flora/rock/pile, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"IF" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"IK" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/barricade/wooden, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"IO" = ( +/obj/structure/barricade/wooden, +/obj/machinery/door/airlock/wood{ + id_tag = "ResortCabin5"; + name = "Resort Cabin 5" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"IR" = ( +/obj/structure/flora/junglebush/large, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"IW" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/machinery/light, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Jb" = ( +/obj/structure/flora/tree/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Jc" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Jd" = ( +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Jf" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Jh" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Jj" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Jo" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Jq" = ( +/obj/structure/table/wood, +/obj/machinery/microwave, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Jt" = ( +/obj/structure/chair/wood/wings{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Jv" = ( +/obj/structure/filingcabinet, +/obj/structure/window/reinforced, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"Jz" = ( +/obj/effect/decal/cleanable/blood/splats, +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"JF" = ( +/turf/open/floor/plasteel/dark, +/area/awaymission/jungleresort) +"JG" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/gibs/human/up, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"JK" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"JQ" = ( +/obj/item/toy/plush/carpplushie, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"JU" = ( +/obj/structure/stone_tile/slab/burnt, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"JZ" = ( +/obj/structure/flora/tree/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Ka" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Kk" = ( +/obj/machinery/light/floor, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"Kl" = ( +/obj/item/kirbyplants/random, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Ko" = ( +/turf/closed/wall/r_wall, +/area/awaymission/jungleresort) +"Kr" = ( +/obj/structure/flora/junglebush/b, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Kw" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"KC" = ( +/obj/machinery/telecomms/relay/preset/mining, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/circuit, +/area/awaymission/jungleresort) +"KJ" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/tree/jungle/small, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"KM" = ( +/mob/living/carbon/monkey, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"KO" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"KR" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"KX" = ( +/obj/structure/flora/rock, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"KY" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"KZ" = ( +/obj/structure/flora/junglebush, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"La" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Ll" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Lp" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/plating/asteroid, +/area/awaymission/jungleresort) +"Lr" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/center/burnt, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Lt" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 5 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/obj/structure/stone_tile/center/burnt, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Lu" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Lv" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"Ly" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/structure/stone_tile/surrounding/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/center/cracked, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"LE" = ( +/obj/structure/reagent_dispensers/keg/gargle, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"LK" = ( +/obj/structure/chair/pew/right{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"LL" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/smes{ + charge = 1.5e+006; + input_level = 30000; + inputting = 0; + output_level = 7000 + }, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"LR" = ( +/mob/living/simple_animal/hostile/jungle/leaper/boss, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"LU" = ( +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"LW" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Mc" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"Mf" = ( +/obj/structure/flora/junglebush/large, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Mh" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/bottle/applejack/empty, +/obj/item/reagent_containers/food/drinks/drinkingglass, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Mp" = ( +/turf/closed/wall/mineral/wood, +/area/awaymission/jungleresort) +"Mx" = ( +/obj/structure/chair/sofa/right, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"MD" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"MF" = ( +/obj/structure/flora/junglebush, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"MJ" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"MP" = ( +/turf/open/floor/plasteel/freezer, +/area/awaymission/jungleresort) +"MS" = ( +/obj/structure/flora/rock/pile, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"MW" = ( +/obj/structure/flora/rock/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"MX" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"MY" = ( +/obj/structure/barricade/wooden, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"Nd" = ( +/obj/structure/flora/junglebush, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Nf" = ( +/obj/structure/stone_tile/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 5 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Ni" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Nn" = ( +/obj/machinery/power/apc/auto_name/west, +/obj/structure/cable, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"Nx" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/butteredtoast, +/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"NF" = ( +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"NU" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"Oe" = ( +/obj/machinery/light, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Ol" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Or" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Ou" = ( +/obj/structure/flora/grass/jungle, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"Oz" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"OA" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"OB" = ( +/obj/item/storage/book/bible, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"OU" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Pb" = ( +/obj/structure/flora/rock/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Pc" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"Pd" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Pg" = ( +/obj/structure/flora/ausbushes/grassybush, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Pp" = ( +/obj/structure/flora/junglebush/c, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Pu" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Pv" = ( +/obj/structure/flora/junglebush/large, +/obj/structure/flora/grass/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"PB" = ( +/obj/structure/flora/junglebush, +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"PD" = ( +/obj/structure/flora/rock/jungle, +/obj/machinery/light, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"PL" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"PM" = ( +/obj/structure/flora/grass/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"PN" = ( +/turf/open/floor/mineral/titanium, +/area/awaymission/jungleresort) +"PP" = ( +/obj/structure/flora/rock, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"PS" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"PT" = ( +/obj/structure/flora/rock/pile, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"PW" = ( +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"PY" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Qa" = ( +/obj/effect/decal/cleanable/blood/gibs/limb, +/obj/effect/decal/cleanable/blood/gibs/torso, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Qc" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/floor/plasteel/freezer, +/area/awaymission/jungleresort) +"Qp" = ( +/turf/open/floor/plating/asteroid, +/area/awaymission/jungleresort) +"Qr" = ( +/obj/structure/chair/sofa{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Qt" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"Qz" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding/cracked, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"QA" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"QB" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"QC" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"QE" = ( +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"QI" = ( +/obj/machinery/nuclearbomb/beer, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"QO" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"QX" = ( +/obj/structure/flora/junglebush, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Rd" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen" + }, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/storage/toolbox/electrical, +/obj/item/wrench, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/stack/sheet/mineral/uranium, +/obj/item/clothing/glasses/meson/engine, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"Rm" = ( +/obj/structure/flora/tree/jungle/small, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Rn" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/item/folder, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"Ro" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Rp" = ( +/obj/structure/flora/ausbushes/reedbush, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"RD" = ( +/obj/structure/flora/junglebush/c, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"RI" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/kitchen/rollingpin, +/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/food/condiment/peppermill, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"RP" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/gibs/torso, +/obj/item/clothing/suit/curator, +/obj/item/clothing/under/rank/civilian/curator/treasure_hunter, +/obj/item/clothing/head/fedora/curator, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/melee/chainofcommand/jungle, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"RW" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"RX" = ( +/obj/structure/flora/junglebush/c, +/obj/structure/flora/rock/pile, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Sc" = ( +/obj/structure/flora/rock, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Se" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/beer, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Sh" = ( +/obj/structure/flora/junglebush/large, +/obj/structure/flora/junglebush/c, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Si" = ( +/obj/effect/decal/cleanable/blood/gibs/limb, +/obj/structure/stone_tile/surrounding/burnt, +/obj/effect/decal/remains/human, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Sk" = ( +/obj/machinery/door/airlock/wood{ + name = "Resort Kitchen" + }, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Ss" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"St" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"SD" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"SF" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"SL" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"SO" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/stone_tile/surrounding/cracked, +/obj/item/gun/ballistic/shotgun/sc_pump, +/obj/item/clothing/suit/armor/vest, +/obj/item/clothing/head/helmet, +/obj/item/ammo_casing/shotgun/buckshot, +/obj/item/ammo_casing/shotgun/buckshot, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"SV" = ( +/obj/machinery/vending/wardrobe/bar_wardrobe, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"SW" = ( +/obj/structure/flora/rock/jungle, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"SZ" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 5 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Ta" = ( +/obj/machinery/shower, +/obj/structure/curtain, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Tm" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/lootdrop/space_cash, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Tv" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/ausbushes/stalkybush, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Tw" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/grass/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Tx" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Ty" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"TC" = ( +/obj/machinery/deepfryer, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"TD" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"TG" = ( +/obj/structure/flora/rock/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"TI" = ( +/obj/structure/barricade/wooden, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"TM" = ( +/obj/structure/table/wood/fancy, +/obj/item/candle/infinite, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"TR" = ( +/obj/structure/table/wood, +/obj/item/storage/box/donkpockets, +/obj/item/storage/box/donkpockets, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"TT" = ( +/obj/structure/flora/ausbushes/stalkybush, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"TU" = ( +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plating/asteroid, +/area/awaymission/jungleresort) +"TX" = ( +/obj/structure/table/wood, +/obj/machinery/button/door{ + id = "ResortCabin5"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 + }, +/obj/item/poster/random_contraband, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Uc" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Ud" = ( +/obj/machinery/light/floor, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Ue" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center/burnt, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Uo" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/innards, +/obj/structure/stone_tile/surrounding/cracked, +/obj/item/fireaxe, +/obj/item/clothing/head/hardhat/red, +/obj/item/clothing/shoes/workboots, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Us" = ( +/obj/machinery/vending/clothing, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Uv" = ( +/obj/structure/flora/grass/jungle/b, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"UB" = ( +/obj/structure/flora/junglebush, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"UH" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Vb" = ( +/obj/structure/chair/stool, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Ve" = ( +/obj/structure/table/wood, +/obj/machinery/door/window{ + dir = 8 + }, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"Vg" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Vh" = ( +/obj/item/storage/toolbox/electrical, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/table/wood/fancy, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"Vm" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"VI" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "AbandonedCabinDorm"; + name = "Abandoned Cabin Dorm" + }, +/turf/open/floor/carpet/red, +/area/awaymission/jungleresort) +"VJ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"VK" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/stamp, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"VL" = ( +/obj/structure/rack, +/obj/item/storage/backpack/satchel/explorer, +/obj/item/gps/mining, +/obj/item/radio, +/obj/item/flashlight, +/obj/item/flashlight/flare, +/obj/item/pickaxe, +/obj/item/mining_scanner, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"VP" = ( +/obj/structure/flora/junglebush/b, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"VU" = ( +/obj/structure/flora/rock/pile/largejungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Wa" = ( +/obj/structure/flora/junglebush/c, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Wd" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"Wh" = ( +/obj/structure/flora/junglebush/large, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Wi" = ( +/obj/structure/chair/stool/bar, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Wj" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Wl" = ( +/obj/structure/flora/grass/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Wo" = ( +/obj/structure/flora/tree/jungle/small, +/obj/structure/flora/grass/jungle, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"WD" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/head/collectable/slime, +/turf/open/floor/plating/rust, +/area/awaymission/jungleresort) +"WE" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"WQ" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/gibs/torso, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"WU" = ( +/obj/structure/flora/ausbushes/stalkybush, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Xa" = ( +/obj/structure/flora/ausbushes/stalkybush, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Xd" = ( +/obj/structure/flora/grass/jungle, +/obj/machinery/light, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Xh" = ( +/obj/structure/flora/rock/jungle, +/obj/structure/flora/junglebush, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Xj" = ( +/turf/closed/wall, +/area/awaymission/jungleresort) +"Xm" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"Xo" = ( +/obj/structure/flora/junglebush/c, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"Xq" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/circuit, +/area/awaymission/jungleresort) +"Xs" = ( +/obj/effect/decal/cleanable/blood/gibs/torso, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Xz" = ( +/turf/open/floor/carpet/red, +/area/awaymission/jungleresort) +"XB" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"XC" = ( +/obj/item/grown/log/tree, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"XK" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"XM" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/salad/jungle, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"XR" = ( +/obj/structure/flora/tree/jungle/small, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"XV" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain, +/turf/open/floor/wood, +/area/awaymission/jungleresort) +"XY" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/obj/item/toy/figure/ian, +/turf/open/floor/carpet/blue, +/area/awaymission/jungleresort) +"XZ" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/power/port_gen/pacman/super, +/turf/open/floor/plating, +/area/awaymission/jungleresort) +"Yb" = ( +/obj/structure/bonfire/dense, +/obj/item/melee/roastingstick, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Yd" = ( +/obj/item/storage/box/marshmallow, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Ye" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/toy/figure/syndie, +/turf/open/floor/carpet/red, +/area/awaymission/jungleresort) +"Yf" = ( +/obj/structure/flora/junglebush/c, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Yg" = ( +/obj/effect/decal/cleanable/blood/gibs/limb, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Yh" = ( +/obj/item/clothing/under/color/grey/glorf, +/obj/item/clothing/gloves/color/fyellow/old, +/obj/item/clothing/shoes/sneakers/black, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/soft/grey, +/obj/effect/decal/remains/human, +/turf/open/floor/carpet, +/area/awaymission/jungleresort) +"Ym" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/flora/rock/pile, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"Yp" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/obj/structure/stone_tile/center, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Yt" = ( +/obj/structure/kitchenspike, +/turf/open/floor/plasteel/freezer, +/area/awaymission/jungleresort) +"YE" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"YF" = ( +/obj/machinery/gateway/away, +/turf/open/floor/plating/dirt/dark/jungle, +/area/awaymission/jungleresort) +"YJ" = ( +/obj/structure/flora/rock/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"YK" = ( +/obj/machinery/light/floor, +/turf/open/water/jungle, +/area/awaymission/jungleresort) +"YM" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"YP" = ( +/obj/structure/flora/rock/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"YQ" = ( +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"YU" = ( +/obj/structure/flora/grass/jungle/b, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/jungleresort) +"YW" = ( +/obj/effect/decal/cleanable/blood/gibs/human/core, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"Zn" = ( +/obj/item/stack/sheet/mineral/wood, +/obj/effect/decal/cleanable/blood/gibs/human/core, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"ZE" = ( +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/burnt, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"ZH" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/obj/structure/stone_tile/center/burnt, +/turf/open/floor/plating/dirt/jungle, +/area/awaymission/jungleresort) +"ZV" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/grass, +/area/awaymission/jungleresort) + +(1,1,1) = {" +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +"} +(2,1,1) = {" +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +"} +(3,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(4,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(5,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(6,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(7,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(8,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(9,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +oZ +AR +oZ +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(10,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +bv +Ue +tT +oZ +oZ +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(11,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +oZ +oZ +tT +RP +BQ +aL +tT +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(12,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +aL +JU +Gk +DF +SL +po +Jz +JU +oZ +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(13,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +tT +Si +rg +uG +dF +an +hX +ih +aL +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(14,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +aL +tT +po +VJ +LR +FR +Lt +tT +tT +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(15,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +Lr +JU +Yg +jO +Lv +hj +tT +Nf +aL +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +rd +vK +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +Pg +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(16,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +oZ +Uo +ZE +ZH +Fl +aL +ez +SO +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Pg +YQ +YQ +ZV +YQ +wH +AR +AR +AR +AR +AR +YQ +YQ +wH +rd +cn +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(17,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +oZ +tT +ap +YW +Db +Ly +oZ +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +CN +cn +YQ +rF +Pg +YQ +rd +YQ +YQ +YQ +CN +YQ +YQ +kr +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(18,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +aL +fy +Dr +JU +oZ +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +YQ +YQ +YQ +vl +YQ +AF +YQ +vK +YQ +YQ +rd +aP +mY +YQ +ZV +Pg +AF +YQ +YQ +Pg +rd +ZV +vK +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +AF +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(19,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AC +GD +oZ +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +CN +rF +aP +YQ +YQ +CN +YQ +YQ +aP +CN +YQ +YQ +AF +YQ +YQ +YQ +MW +br +YQ +YQ +YQ +YQ +CN +YQ +cn +YQ +YQ +YQ +CN +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +rd +YQ +YQ +YQ +CN +YQ +kr +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(20,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +iv +Qz +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +Wl +YQ +YQ +YQ +Pg +ZV +YQ +cV +Pg +YQ +YQ +YM +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +YQ +YQ +MW +aP +YQ +YQ +YQ +AF +YQ +YQ +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +wH +YQ +rd +YQ +YQ +YM +YQ +YQ +YQ +rd +ZV +YQ +rd +MW +Pg +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(21,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +wS +SZ +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +rd +AF +YQ +YQ +YQ +CN +rd +AF +YQ +YQ +YQ +YQ +wH +YQ +YQ +YQ +YQ +YQ +YQ +YQ +Wl +cn +YQ +YQ +YM +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +CN +Pg +YQ +YQ +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +wH +YQ +AF +ZV +cn +YQ +YQ +YQ +CN +YQ +AF +aP +ZV +rF +Pv +wH +YQ +YQ +YQ +CN +YQ +aP +Wl +YQ +rd +YQ +AF +YQ +YQ +YQ +Pg +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(22,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +yJ +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Pg +wH +YQ +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +Wl +Pg +AF +YQ +YQ +YQ +CN +YQ +aP +YQ +YQ +Pg +Wl +YQ +YQ +ZV +aP +vK +VU +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +vK +wH +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +rd +MW +aP +YM +YQ +XK +YQ +rd +MW +YQ +YQ +Pg +YQ +YQ +YQ +CN +YQ +cn +YQ +YQ +YQ +YQ +vK +YQ +mY +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +ZV +cn +YQ +YQ +vK +AF +ZV +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(23,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +Yp +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YM +cn +YQ +YQ +YM +aG +YQ +YQ +MW +rF +YQ +YQ +YQ +aP +rd +cn +YQ +YQ +wH +YQ +rd +YQ +YQ +YQ +CN +YQ +YQ +rd +YQ +YQ +YQ +YQ +rd +YQ +MW +YQ +YQ +ZV +ZV +YQ +YM +AF +YQ +aP +YQ +AR +AR +AR +AR +AR +AR +AR +rd +Pg +cn +YQ +YQ +YM +YQ +YQ +YQ +YQ +YQ +CN +YQ +Pg +ZV +rd +kr +YQ +YQ +rd +Pg +YQ +YQ +KJ +Pg +Xh +YQ +YQ +CN +AF +YQ +YQ +YQ +wH +YQ +YQ +YQ +YQ +rd +YQ +aP +YQ +Pg +YQ +YQ +cn +YQ +rd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(24,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +TD +oZ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +aP +Wl +rd +aP +Pg +YQ +YQ +Wl +YQ +rd +YQ +rd +YQ +YQ +YQ +YQ +YM +KM +Pg +ZV +AF +YQ +YQ +rd +YQ +YQ +YM +YQ +YQ +YQ +CN +cn +YQ +YQ +YQ +CN +Wl +rd +wH +YQ +MW +YQ +YQ +YQ +YM +ZV +cn +rd +aP +YQ +wH +AF +YQ +YQ +kr +aP +YQ +YQ +Wl +wH +YQ +YQ +YQ +YQ +YQ +CN +ar +YQ +cn +wH +YQ +YQ +YQ +AF +YQ +YQ +rd +YQ +YQ +Dz +ZV +YQ +rd +YQ +cn +Wl +Pg +YQ +kr +YQ +YQ +wH +YQ +YQ +YQ +YQ +CN +YQ +wH +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(25,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +aL +Xs +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +rd +YQ +YQ +YQ +CN +kr +YQ +YQ +YQ +CN +YQ +YQ +KJ +YQ +YQ +YQ +CN +Pg +aP +YQ +YQ +CN +rd +kr +vK +YQ +YQ +YQ +YQ +YQ +YQ +YQ +Pg +rd +aP +YQ +kr +YQ +cn +aP +YQ +YQ +YQ +CN +Pg +YQ +YQ +YQ +YQ +Wl +YQ +kr +cn +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +CN +YQ +MW +YQ +MW +rd +Wl +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +vK +YQ +cn +YQ +YQ +YQ +CN +YQ +YQ +YM +MW +YQ +YQ +YQ +CN +rd +YQ +Wl +YQ +rd +Wl +aP +kr +ZV +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(26,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +oZ +tH +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +ZV +YQ +YQ +YQ +YQ +YQ +cn +YQ +YQ +YQ +YQ +YQ +YQ +YQ +rd +YQ +YQ +YQ +YQ +YQ +cn +YQ +YQ +YQ +CN +cn +aP +wH +YQ +YQ +YQ +wH +YQ +AF +Pg +YQ +YQ +YQ +YQ +YQ +rd +rd +Wl +YQ +YQ +YQ +CN +YQ +YQ +vK +YQ +YQ +YQ +YQ +ZV +Wl +Pg +VU +YQ +kr +rd +YQ +wH +YQ +vK +YQ +YQ +YQ +MW +YQ +MW +YQ +rF +Dz +YQ +YQ +Wl +YQ +YQ +YM +YQ +YQ +YQ +rd +YQ +YQ +wH +YQ +YQ +YQ +YQ +YQ +ZV +YQ +YQ +YQ +YQ +YQ +AF +YQ +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(27,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +ak +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +CN +MW +YQ +YQ +YM +cn +rF +YQ +YQ +YQ +CN +Wl +kr +rd +YQ +AF +YQ +Wl +rd +MW +Pg +aP +YQ +YQ +YQ +YQ +kr +mY +YQ +YQ +YQ +CN +YQ +YQ +YM +YQ +Wl +YQ +CN +YQ +kr +cn +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +Fz +Wl +YQ +YQ +YQ +CN +rd +YQ +YQ +aP +YQ +YQ +YQ +YQ +CN +YQ +AF +YQ +rd +Wl +YQ +AF +Pg +Wl +YQ +YQ +rd +YQ +aP +YQ +YQ +pN +YQ +Wl +aP +YQ +YQ +YQ +CN +YQ +AF +YQ +YQ +YM +kr +aP +YQ +YQ +CN +mY +Pg +aP +rd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(28,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +rd +AF +YQ +YQ +wH +Wl +YQ +wH +YQ +ZV +Pg +vK +YQ +MW +YQ +CN +YQ +YQ +YQ +YM +YQ +AF +YQ +aP +Pg +YQ +YQ +YQ +YQ +YQ +vK +YQ +YQ +YQ +YQ +YQ +YQ +aP +rd +YQ +YQ +YQ +CN +MW +YQ +kr +YQ +Wl +wH +YQ +YQ +YQ +YQ +YQ +rd +YQ +YQ +YQ +CN +cn +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +CN +cn +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +CN +wH +YQ +YQ +YQ +YQ +aP +rd +Wl +YQ +Wl +rF +Pg +wH +YQ +YQ +vK +YQ +YQ +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(29,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +io +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Wl +vK +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +YQ +Pg +PB +YQ +cn +YQ +YQ +YQ +YQ +wH +Pg +cn +YQ +YQ +YQ +YQ +CN +YQ +rd +MW +YQ +YQ +CN +YQ +Wl +kr +YQ +YQ +YQ +CN +ZV +YQ +YM +YQ +YQ +wH +Pg +vK +YQ +YQ +AF +Wl +rd +YQ +YQ +YQ +CN +AF +cn +YQ +YQ +YQ +YQ +YQ +ZV +YQ +YM +Wl +YQ +YQ +rd +kr +YQ +YQ +AF +ZV +YQ +MW +YQ +MW +cn +rd +YQ +YQ +YQ +rd +YQ +YQ +YM +rd +AF +YQ +YQ +mY +YQ +cn +YQ +AF +YQ +VU +rd +cn +YQ +YQ +Wl +CN +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(30,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +AT +io +JG +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +kr +YQ +YQ +YQ +aP +YQ +cn +YQ +aP +YQ +YM +YQ +YQ +YQ +CN +aP +YQ +rd +YQ +Wl +YQ +kr +YQ +YQ +YQ +Wl +YQ +YM +YQ +YQ +YQ +YQ +AF +YQ +aP +YQ +YQ +YQ +rd +Pg +YQ +YQ +YQ +AF +YQ +aP +YQ +YQ +YQ +CN +ZV +aP +YQ +YQ +cn +YQ +YQ +MW +CN +AF +Wl +YQ +YQ +CN +YQ +rd +YQ +YQ +AF +wH +YQ +aP +YQ +cn +YQ +YQ +YQ +CN +Pg +np +YQ +wH +rd +kr +YQ +AF +YQ +vK +YQ +kr +YQ +YQ +YQ +CN +vK +YQ +YQ +YQ +CN +YQ +MW +YQ +YQ +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(31,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +VJ +FR +io +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +cn +YQ +YQ +YQ +CN +Pg +rd +YQ +rd +Wl +YQ +kr +YQ +Wl +cn +wH +YQ +YQ +YM +Wl +YQ +YQ +rd +YQ +YQ +YM +Pg +cn +YQ +Wl +YQ +YQ +YQ +YQ +CN +YQ +cn +YQ +AF +YQ +MW +YQ +YQ +YQ +CN +YQ +kr +YQ +YQ +YQ +YQ +YQ +YM +Wl +YQ +rd +AF +YQ +YQ +YQ +YQ +rd +YQ +YQ +wH +aP +YQ +YQ +YQ +CN +vK +rd +YQ +YM +Pg +YQ +YQ +YQ +rd +YQ +YQ +YQ +YQ +CN +ZV +YQ +YQ +YQ +CN +rd +cn +wH +YQ +YQ +wH +rd +aP +YQ +rd +YQ +ZV +YQ +YQ +YQ +aP +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(32,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +io +Qa +io +FL +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +rF +YQ +aP +Wl +rd +YQ +YQ +YM +AF +YQ +YQ +rd +YQ +AF +YQ +mY +mY +YQ +Pg +YQ +YQ +YQ +CN +YQ +aP +YQ +YQ +YQ +AF +YQ +kr +ZV +YQ +Pg +YQ +AF +YQ +YQ +YQ +CN +wH +YQ +YQ +YQ +YQ +cn +YQ +YQ +cn +rd +MW +YQ +YQ +YQ +YQ +YM +aP +ZV +YQ +YQ +YQ +CN +Pg +AF +rd +mY +YQ +YQ +YQ +rd +Wl +ZV +AF +YQ +rd +rd +YQ +Wl +Ka +kr +YQ +YQ +AF +cn +Wl +YQ +YQ +YQ +Pg +YQ +Wl +YQ +YQ +Hy +kr +YQ +YQ +YQ +YQ +AF +YQ +YQ +YQ +CN +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(33,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +sq +io +io +LU +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +np +YQ +ZV +YQ +YQ +wH +YQ +YQ +YQ +CN +MW +aP +YQ +YQ +CN +rd +AF +YQ +YQ +ZV +YQ +cn +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +rd +YQ +Wl +rd +YQ +YQ +KM +YQ +aP +rd +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +CN +YQ +wH +rd +Wl +YQ +YQ +rd +YQ +kr +YQ +YQ +Pg +YQ +YQ +YM +YQ +YQ +kr +YQ +YQ +YQ +CN +Ey +du +uO +YQ +mY +YQ +rd +YQ +Pg +cn +MW +YQ +YQ +aP +CN +YQ +YM +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +pU +PT +Fd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(34,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Zn +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +CN +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +wH +YQ +YQ +YQ +YQ +YQ +Mp +Mp +Mp +Mp +Mp +Mp +Mp +Mp +YQ +YQ +rd +YQ +YQ +YQ +CN +AF +YQ +MW +YQ +Wl +ZV +cn +YQ +Wl +YQ +YQ +rd +YQ +YQ +YQ +mY +YQ +kr +YQ +YQ +vK +YQ +YQ +YQ +CN +Pg +AF +YQ +YQ +CN +MW +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +CN +MW +YQ +YQ +Lu +io +du +io +jy +YQ +MW +YQ +CN +AF +aP +YQ +YQ +YQ +YQ +YQ +YQ +rd +Pg +Wl +YQ +YQ +YQ +rd +IR +FX +du +Ou +cA +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(35,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +st +st +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +wH +YQ +YQ +YQ +VU +aP +Pg +cn +rd +YQ +rd +Pg +ZV +kr +aP +Mp +BP +Xz +eD +Mp +gK +Eu +Mp +aP +YQ +Wl +YQ +YQ +YQ +YQ +YQ +cn +YQ +YQ +YM +Pg +YQ +YQ +YQ +CN +YQ +YQ +YQ +Wl +aP +YQ +AF +Pg +cn +YQ +AF +YQ +YQ +YQ +wH +YQ +YQ +Wo +YQ +AF +YQ +YQ +YQ +YQ +wH +AF +YQ +YQ +YQ +YQ +YQ +YQ +hw +du +io +JQ +du +du +DL +YQ +YQ +YQ +rd +YQ +vK +AF +YQ +kr +ZV +cn +YQ +AF +YQ +cn +rd +YQ +mE +du +Xa +La +uG +QA +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(36,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +st +Ir +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Pg +rd +MW +YQ +Pg +kr +YQ +YQ +rd +kr +YQ +YQ +YQ +Tw +YQ +AF +YQ +Mp +iL +Xz +Xz +VI +Jd +Jd +Mp +YQ +kr +YQ +AF +rd +kr +YQ +YQ +YQ +CN +YQ +YQ +AF +YQ +YQ +YQ +YQ +YQ +YQ +CN +ZV +YQ +wH +vK +Wl +YQ +Wl +YQ +CN +YQ +np +AF +rF +MW +YQ +cn +YQ +YQ +YQ +YM +cn +Xj +Xj +Xj +Xj +Xj +Xj +Xj +YQ +CN +js +du +Lv +io +KO +cn +wH +YQ +YM +YQ +YQ +YQ +CN +aP +Wl +YQ +YQ +aP +CN +vK +MW +Ka +XB +io +FN +uG +QA +pQ +pQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(37,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +LU +st +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +CN +ZV +YQ +YQ +YQ +CN +YQ +cn +YQ +YQ +YQ +YQ +rd +Mp +Xz +Xz +Ye +Mp +Jd +Jd +Mp +cJ +Ka +YQ +Ka +CN +Wl +YQ +YQ +kr +YQ +YQ +YQ +YQ +CN +vK +cn +Wl +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +ZV +YQ +YQ +YQ +CN +YQ +kr +rd +YQ +YQ +YQ +CN +YQ +YQ +Xj +my +Nn +BM +Ih +CA +Xj +YQ +FT +du +io +du +io +se +YQ +YQ +YQ +Pg +YQ +YQ +wH +YQ +wH +cn +YQ +YQ +YQ +Pg +wH +XB +du +io +du +uG +pQ +pQ +AV +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(38,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +AT +io +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +cn +rd +Wl +YQ +YQ +vK +YQ +AF +aP +rd +cn +YQ +YQ +CN +Mp +xQ +Gl +Mp +Mp +Jd +ux +vw +io +io +Fr +io +DL +Ka +AF +YQ +aP +cn +YQ +YQ +YQ +Wl +YQ +YQ +YM +YQ +YQ +YQ +CN +YQ +rF +cn +YQ +YQ +YQ +CN +rd +YQ +YQ +YQ +YQ +CN +Wl +YQ +YQ +YQ +YQ +Wl +rd +Xj +LL +Pc +Ih +Ih +Xq +Xj +YQ +YQ +uS +du +io +jh +YQ +YQ +YQ +CN +Wl +YQ +AF +Pg +rd +YQ +YQ +YQ +YM +AF +Ka +XB +io +bp +uG +QA +pQ +pQ +EA +bp +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(39,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +uG +pQ +dF +io +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +aP +YQ +YM +Pg +kr +YQ +YQ +YM +aP +YQ +YQ +Pg +Mp +Et +Mp +Jq +CH +Jd +Jd +Mp +zC +sQ +YQ +LW +Uv +io +DL +YM +Pg +YQ +Wl +YQ +rF +YQ +YQ +YQ +YQ +YQ +YQ +YQ +kr +YQ +wH +rd +YQ +YQ +YQ +YQ +rF +Wl +YQ +YQ +YQ +Pg +YQ +YM +kr +YQ +Pg +YQ +rF +Xj +XZ +yb +Ih +Ih +KC +Xj +YQ +YQ +CN +eC +Uc +rd +YQ +YQ +YQ +MW +YQ +aP +YM +YQ +YQ +YQ +CN +YQ +Pg +mE +du +io +Pp +uG +pQ +pQ +AV +EA +kJ +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(40,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +uG +pQ +pQ +pQ +dF +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +rd +vK +YQ +Mp +Mp +Gl +TR +Dj +Dj +Jd +Mp +YQ +YQ +YQ +CN +Pg +wm +ZV +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +YQ +Wl +YQ +YQ +CN +YQ +YQ +YM +MW +YQ +wH +rd +AF +YQ +YQ +vK +YQ +YQ +YQ +CN +ZV +Xj +Cv +Ih +Ih +Ih +ef +Xj +YQ +YQ +YQ +YQ +YQ +CN +YQ +Wl +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +Fd +TG +io +cX +uG +QA +pQ +pQ +EA +FQ +go +NF +jH +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(41,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +uh +pQ +pQ +pQ +Hg +ll +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +AF +wH +YQ +YQ +Wl +hv +wH +vl +YQ +YQ +CN +MW +rd +Mp +Ct +Jd +Jd +Dj +Dj +Jd +IK +YQ +YQ +YQ +YQ +MW +YQ +YQ +YQ +Wl +YQ +mY +AF +cn +YQ +ZV +Wl +YQ +YQ +rd +Pg +AF +YQ +VU +YQ +YQ +YQ +rd +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +Wl +YQ +YQ +YQ +rd +Xj +Rd +Ih +Ih +Ih +Cc +Xj +Pg +YQ +YQ +YQ +kr +YQ +wH +Pg +YQ +YQ +YQ +CN +cn +wH +Wl +PT +zY +Xa +Ou +SW +uG +pQ +pQ +AV +EA +io +io +zP +fX +ZV +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(42,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +uG +pQ +pQ +pQ +pQ +Hg +WQ +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +rd +Pg +YQ +YQ +KM +YQ +Pg +YQ +YQ +YQ +ZV +cn +YQ +Mp +rS +Jd +PW +Dj +Dj +Jd +IK +wH +YQ +rd +kr +Wl +YQ +YQ +Tw +rd +wH +YQ +YQ +MW +kr +Pg +YQ +YQ +wH +vK +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +Wl +YQ +YQ +rd +KM +YQ +YQ +YQ +YQ +ZV +YQ +YQ +YM +YQ +Xj +Xj +Xj +mg +Xj +Xj +Xj +YQ +wH +Wl +YQ +YQ +YQ +YQ +YM +wH +YQ +YQ +YQ +YQ +Ka +FX +iG +du +Rp +uG +QA +pQ +pQ +EA +kJ +du +io +Jh +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(43,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +uh +pQ +pQ +pQ +pQ +pQ +dF +ak +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +Fz +mY +aP +MW +cn +rd +YQ +YM +rF +AF +YQ +YQ +wH +Mp +im +Jd +lB +Dj +Dj +aA +Mp +YQ +YQ +YM +rd +AF +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +YQ +CN +kr +YQ +YQ +rF +YQ +YQ +YQ +YQ +YQ +Pg +is +YQ +cn +YQ +YM +kr +YQ +YQ +YQ +CN +YQ +YQ +Wl +rF +YQ +Kr +du +bw +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +YQ +cn +AF +vK +kr +YQ +Ka +io +bp +NU +uG +QA +pQ +pQ +AV +EA +io +io +zP +Gz +YQ +kr +rd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(44,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +uh +pQ +pQ +pQ +pQ +pQ +Hg +io +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +ZV +YQ +YQ +rd +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YM +Mp +Ct +Jd +Jd +Jd +Jd +Ha +Mp +vK +YQ +YQ +YQ +vK +rd +YQ +YM +Wl +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +Wl +YQ +AF +YQ +YQ +YQ +YM +rd +kr +YQ +YQ +YQ +CN +Pg +rd +YQ +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +rQ +du +DL +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +rF +MW +YQ +Wl +rT +XB +io +du +uG +QA +pQ +pQ +AV +EA +bp +du +io +RD +YQ +YQ +wH +aP +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(45,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +VJ +pQ +pQ +pQ +pQ +pQ +pQ +dF +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YM +YQ +YQ +YQ +CN +aP +YQ +YQ +YQ +CN +vK +YQ +aP +Mp +Mp +Mp +IK +IK +Mp +Mp +Mp +Wl +YQ +YQ +YQ +CN +YQ +YQ +YQ +Pg +rF +kr +YQ +YQ +YQ +AF +rF +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +rF +wH +YQ +YQ +YQ +YQ +YQ +YQ +rF +YQ +YQ +YQ +CN +YQ +MW +YQ +YQ +YQ +YQ +OU +du +DL +YQ +CN +wH +Wl +YQ +YM +Pg +Wl +YQ +YQ +Ka +EQ +du +cw +Rp +uG +pQ +pQ +AV +EA +io +du +NF +ie +Pb +vK +rd +YQ +YQ +CN +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(46,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +VJ +pQ +pQ +pQ +pQ +AV +AV +AS +dF +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +rF +rd +YQ +YQ +YQ +vK +rd +YQ +YQ +YQ +Pg +YQ +cn +YQ +kr +YQ +rd +YQ +Pg +ZV +YQ +kr +aP +cn +YQ +Wl +rd +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +YM +Wl +rd +YQ +YQ +YQ +Pg +YQ +Ka +Ka +Ka +cJ +Ka +Ka +YQ +CN +wH +YQ +YQ +YQ +CN +YQ +rd +YQ +cn +wH +YQ +YQ +YQ +CN +Uv +io +DL +YQ +MW +YQ +YQ +rF +YQ +YQ +YQ +Ka +XB +du +du +Az +uG +QA +pQ +AV +EA +du +mh +cH +RD +LW +YQ +YQ +wH +YQ +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(47,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +uh +pQ +pQ +EA +io +io +io +VJ +dF +io +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +Pg +cn +AF +vK +ZV +YQ +YQ +rd +AF +YQ +YM +wH +YQ +YQ +MW +YQ +YM +AF +YQ +YQ +YQ +YQ +AF +kr +Pg +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +vK +kr +YQ +YQ +YM +zY +iG +io +du +io +bp +io +xH +Ka +Rm +Wl +YQ +YQ +YQ +Wl +ZV +Wl +Pg +YQ +rd +YQ +YQ +og +OU +du +zA +Pg +YQ +YQ +YQ +CN +YQ +Ka +XB +FN +du +mh +uG +QA +pQ +AV +EA +rm +io +io +yu +JZ +YQ +kr +YQ +YQ +YQ +CN +cn +ZV +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(48,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +VJ +AV +EA +io +io +AR +AR +io +VJ +dF +od +io +AR +AR +AR +AR +AR +AR +AR +AR +YQ +CN +rd +Wl +YQ +YQ +Fz +wH +YQ +YQ +YQ +VU +aP +YQ +YQ +CN +Pg +YQ +YQ +YQ +YQ +CN +YQ +YM +wH +YQ +YQ +YM +Wl +YQ +YQ +cn +YQ +YQ +YQ +YQ +CN +YQ +YQ +Ka +XB +Ss +cH +uG +QA +QA +dF +Rp +du +io +kJ +lf +YJ +Ka +Ka +YM +YQ +YQ +YQ +CN +YQ +YQ +Xd +Ko +zK +io +io +Mf +YQ +YQ +YQ +Ka +XB +io +du +go +uG +QA +pQ +pQ +EA +kJ +io +Xa +jH +sQ +YQ +wH +YQ +YQ +YQ +YQ +YQ +wH +Wl +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(49,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +io +io +io +AR +AR +AR +AR +io +JK +GN +QA +dF +io +AR +AR +AR +AR +AR +AR +YQ +YQ +wH +YQ +YQ +Pg +YQ +YQ +YQ +YQ +CN +ZV +YQ +YQ +YQ +rd +vK +cn +YQ +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +AF +YQ +rd +wH +YQ +YQ +wH +mY +YQ +XB +io +FN +so +uG +pQ +pQ +pQ +pQ +QA +QA +dF +bp +so +mh +io +io +xH +Ka +Ka +Ka +YQ +YQ +YQ +CN +WU +zY +io +io +DL +CN +Ka +XB +Br +io +SW +uG +QA +pQ +pQ +AV +EA +io +io +zP +fX +YQ +YQ +YQ +rd +YQ +YQ +YQ +CN +kr +vK +aP +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(50,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +VJ +pQ +QA +dF +io +AR +AR +AR +AR +AR +YQ +YM +aP +Pv +rd +cn +YQ +YQ +YQ +rd +kr +vl +rd +YQ +AF +wH +YQ +YQ +YM +rd +aP +YQ +AF +Pg +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +ZV +cJ +Ka +rT +XB +io +FQ +uG +QA +pQ +pQ +AV +AV +AV +pQ +pQ +pQ +QA +QA +QA +dF +io +FN +cA +go +ro +Jc +Ka +Ka +Ka +OU +du +io +io +DL +mE +Xo +du +Rp +uG +QA +pQ +pQ +AV +EA +FQ +du +io +yu +kr +rF +YQ +YQ +YQ +CN +YQ +YQ +YQ +rd +MW +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(51,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +uh +pQ +pQ +QA +dF +io +io +AR +AR +YQ +PT +Fd +Ka +YQ +YQ +AF +cn +cn +rd +mY +MW +YQ +YQ +YQ +CN +rd +YQ +ZV +YQ +rd +YQ +CN +YQ +YQ +YQ +YQ +ZV +YQ +cn +YQ +Jf +mE +io +io +du +FN +du +uG +pQ +pQ +pQ +EA +ro +Ou +Az +VJ +AV +AV +AV +AV +pQ +pQ +QA +QA +QA +dF +FQ +TT +io +io +io +Jb +du +du +io +GA +cH +TT +uG +QA +pQ +pQ +pQ +EA +cw +kJ +cH +Jh +zC +YQ +YQ +YQ +Pg +YQ +YQ +aP +Wl +YQ +YQ +YQ +YQ +YQ +YQ +CN +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(52,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +pQ +AV +QA +QA +AR +AR +pP +KZ +io +io +xH +aI +YQ +YQ +Wo +YQ +qC +YQ +YQ +YQ +YQ +rF +YQ +YQ +YQ +CN +YQ +Wl +YQ +YQ +YQ +Tw +kr +rT +Ka +Ka +YU +Xa +UB +du +uG +QA +QA +QA +pQ +pQ +EA +io +bp +Pp +sh +ro +io +du +FN +TT +Rp +VJ +AV +pQ +pQ +pQ +pQ +QA +QA +QA +dF +du +NF +Jd +Jd +Jd +Az +NU +uG +pQ +pQ +pQ +AV +EA +io +io +yu +JZ +MW +YQ +YQ +YQ +CN +wH +AF +vK +rd +mY +YQ +YQ +YQ +CN +YQ +YQ +wH +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(53,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +VJ +AV +pQ +pQ +MY +QA +dF +du +Rp +Xa +xH +Ka +rT +YQ +YQ +YQ +CN +rd +Wl +kr +YQ +YQ +YQ +Pg +wH +YQ +YQ +YQ +Ka +Ka +XB +du +io +du +bp +mh +uG +QA +pQ +pQ +AV +AV +AV +EA +io +io +yu +sQ +CN +sQ +wm +sQ +sQ +Jo +io +Br +du +VJ +AV +AV +AV +pQ +pQ +pQ +pQ +QA +QA +Jd +Jd +Jd +QA +QA +pQ +pQ +AV +EA +io +Br +du +yu +YQ +rF +YQ +YQ +YQ +YQ +cn +AF +YQ +YQ +YQ +cn +MW +YQ +aP +YQ +Wl +cn +YQ +AF +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(54,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +io +uh +MY +pQ +pQ +pQ +QA +dF +io +du +io +FN +YP +uW +Ka +YQ +cn +YQ +AF +YQ +wH +cn +rd +MW +YQ +YM +XB +io +du +bp +Rp +uG +QA +QA +QA +pQ +AV +AV +EA +Rp +Pp +du +Xo +Az +yu +YQ +YQ +YQ +kr +AF +YQ +YQ +YQ +JZ +nw +io +io +du +bp +io +VJ +AV +AV +AV +pQ +pQ +Jd +Jd +Jd +pQ +pQ +pQ +EA +io +io +FN +Jh +Pb +ZV +cn +YQ +YQ +YM +rF +Wl +VU +rd +YQ +YQ +YQ +CN +YQ +rd +AF +ZV +Pg +kr +rd +rF +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(55,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +pP +pQ +AV +AV +pQ +QA +hN +dF +du +kJ +KZ +io +xH +Ka +aI +Ka +Ka +YQ +CN +YQ +ab +Ka +mE +du +io +uG +QA +QA +pQ +pQ +pQ +pQ +EA +KZ +kJ +Ou +NU +yu +sQ +sQ +JZ +Wl +cn +MW +YQ +YQ +CN +cn +YQ +YQ +AF +wH +sQ +sQ +sQ +uS +io +io +io +FN +FQ +zV +AV +Jd +Jd +Jd +AV +AV +EA +kJ +du +yu +fX +YQ +YQ +YQ +CN +YQ +YQ +kr +YQ +YQ +wH +YQ +YQ +YQ +YQ +wH +YQ +YQ +YQ +YM +YQ +aP +YQ +CN +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(56,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Xj +Xj +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +mh +aB +VJ +pQ +pQ +pQ +QA +QA +dF +io +du +du +Ss +mh +io +xH +Ka +Cu +io +FN +aB +Az +uG +pQ +pQ +pQ +AV +AV +EA +du +Br +io +yu +YQ +JZ +YQ +YQ +Pg +vK +kr +YQ +YQ +YQ +YQ +ZV +Pg +YQ +YQ +YM +YQ +YQ +YQ +CN +ZV +sQ +sQ +sQ +DS +px +Ko +yC +Jd +Jd +Jd +nU +FQ +cH +Az +PP +cn +rF +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +rd +CN +rF +Wl +AF +YQ +YQ +YQ +CN +YQ +aP +YQ +YQ +YQ +cn +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(57,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Xj +JF +Ex +JF +Xj +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +io +cw +VJ +AV +pQ +pQ +pQ +pQ +QA +QA +QA +QA +dF +NF +Mc +du +io +FQ +uG +QA +QA +pQ +pQ +pQ +EA +mh +Ou +io +io +PY +wm +RX +YQ +wH +MW +Wl +AF +ZV +YQ +YQ +Vm +CN +MW +Wl +YQ +YQ +CN +YQ +cn +YQ +Pg +rF +YQ +YM +cn +Wl +YQ +Pb +tn +PS +du +io +xH +sQ +JZ +sQ +sQ +YQ +CN +YQ +kr +cn +AF +YQ +YQ +YQ +YQ +YQ +YQ +cn +YQ +YQ +YQ +YQ +YQ +YQ +aP +vK +rd +cn +Pg +kr +wH +Wl +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(58,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Xj +qG +Di +JF +Ij +JF +Ex +JF +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Jo +io +bp +mh +VJ +AV +AV +AV +AV +pQ +pQ +pQ +pQ +QA +QA +QA +QA +QA +pQ +pQ +pQ +AV +EA +io +io +FN +yu +sQ +sQ +CN +YQ +wJ +Wl +kr +YQ +YQ +YQ +CN +YQ +Oe +Ko +wj +YQ +YQ +YQ +YQ +rF +MW +YQ +YQ +Wl +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +OU +io +io +du +BZ +rF +Wl +YQ +YQ +YQ +YQ +YQ +CN +rF +MW +YQ +cn +YQ +YQ +YM +Pg +Wl +YQ +YQ +YQ +CN +YQ +kr +YQ +YQ +MW +YQ +YQ +YQ +YQ +rd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(59,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Xj +CT +JF +JF +JF +Gd +Dj +Ij +JF +Ex +Xj +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +sQ +nw +ro +UB +Pp +TT +FQ +io +VJ +AV +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +AV +EA +FQ +Ss +io +PM +sQ +YQ +YQ +rF +YQ +YQ +YQ +CN +rF +YQ +YQ +YQ +wH +YQ +YM +nJ +YQ +YQ +YQ +CN +kr +wH +YQ +YQ +YQ +Ii +YQ +YQ +YQ +YQ +YQ +rF +YQ +YQ +Pg +Jo +du +io +kI +rd +YQ +kr +rF +YQ +YQ +wH +YQ +YQ +YQ +YQ +CN +rF +YQ +YQ +rd +YQ +YQ +YQ +YQ +YQ +YQ +YQ +cn +YQ +YQ +CN +YQ +YQ +YQ +CN +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(60,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Ex +JF +JF +Dj +Dj +LK +Dj +LK +Dj +Ij +JF +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +rd +wH +sQ +sQ +Wh +fX +Ni +io +Br +du +VJ +AV +AV +AV +AV +AV +AV +EA +io +io +io +zP +lr +MW +YQ +YQ +YQ +CN +YQ +YQ +vK +vK +YQ +YM +rF +AF +Pg +YQ +YQ +Wl +YQ +YQ +YQ +YQ +YQ +YQ +YQ +og +YQ +vK +AF +wH +YQ +YQ +YQ +CN +YQ +Wl +YQ +XB +du +yu +YQ +YQ +YQ +CN +YQ +YQ +YM +rd +Wl +YQ +YQ +YQ +YQ +rd +YQ +YQ +YQ +CN +rd +rF +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +AF +YQ +wH +YQ +rF +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(61,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Xj +cT +JF +Dj +Dj +Dj +Dj +TM +Dj +TM +Dj +LK +JF +op +AR +Xj +AR +AR +AR +AR +Qp +Qp +TU +Lp +AR +AR +AR +vq +Ka +Ka +aI +PT +Gz +Jo +NF +Pp +du +Az +io +SW +io +FN +Ss +cH +yu +us +Pg +kf +vK +rF +YQ +Wl +YQ +YQ +YQ +td +Wl +YQ +YQ +ZV +MW +YQ +YQ +YQ +YQ +AF +rd +YQ +YQ +vK +YQ +Xd +Ko +RW +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +YQ +OU +du +io +DL +CN +YQ +wH +Pg +AF +YQ +ZV +vK +YQ +YQ +pN +YQ +YQ +YM +Wl +YQ +YQ +YQ +YQ +cn +rd +YQ +Wl +jL +kr +YQ +YQ +Wl +ZV +YQ +MW +KM +vK +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(62,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Xj +yr +Dj +Yh +gN +Dj +Dj +Dj +Dj +Dj +Dj +Dj +Dj +JF +JF +Qp +JF +Qp +Qp +Qp +Qp +Qp +Lp +AR +AR +TU +Lp +dC +io +io +du +io +qz +Ka +CC +CC +fX +Wh +CC +CC +CC +CC +Wh +sQ +YQ +Rm +YQ +YQ +YQ +CN +wH +rd +YQ +YQ +rF +YQ +YQ +YQ +CN +YQ +rd +YQ +Wl +Jf +YQ +Ka +YQ +YQ +YQ +rd +YQ +YQ +nJ +YQ +YQ +YQ +YQ +YQ +YQ +Wl +YQ +rF +wH +OU +du +io +DL +YQ +Wl +rd +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +ZV +YQ +YQ +rF +YQ +YQ +YM +Wl +YQ +YQ +CN +oj +YQ +Pu +YQ +mY +KJ +YQ +YQ +YQ +CN +rd +Pg +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(63,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Xj +rv +Dj +OB +wo +Dj +Dj +Dj +Dj +Dj +Dj +Dj +Dj +JF +JF +JF +Qp +JF +Qp +Qp +AR +AR +AR +AR +AR +Lp +TU +st +du +du +io +du +du +io +CY +io +xH +ow +io +du +xL +io +xH +CN +XB +du +DL +YQ +Ka +ZV +AF +YQ +YQ +YQ +CN +cn +MW +YQ +Hk +Pg +YQ +YQ +XB +du +WE +du +lf +YQ +YQ +YQ +YQ +rF +YQ +YQ +YQ +rF +YQ +MW +YQ +YQ +YQ +Ka +Ka +Ka +Jo +du +SD +YQ +YQ +CN +YQ +YQ +YQ +Pg +YQ +wH +YQ +YQ +YQ +YQ +CN +kr +YQ +YQ +MW +Pg +wH +YQ +jL +YQ +YQ +YQ +rd +YQ +YQ +rd +YQ +YQ +YQ +aP +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(64,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Xj +cT +JF +Dj +Dj +Dj +Dj +TM +Dj +TM +Dj +Ij +JF +EO +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +TI +Gz +zC +sQ +sQ +sQ +JZ +hl +du +io +MF +du +xV +du +du +io +rP +du +yu +Wl +rH +io +DL +YM +wJ +YQ +ZV +wH +YQ +kr +Hs +Ko +wj +YQ +XB +du +io +io +io +io +Jc +Ka +Ka +Ka +Ka +YQ +Pg +Ka +Ka +AF +Ka +Ka +Ka +Ll +io +du +du +DL +ue +Ko +wj +YQ +YQ +kr +YQ +YQ +YM +Wl +YQ +cn +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +kr +YQ +AF +YQ +YQ +XC +YQ +YQ +CV +YQ +YQ +rF +AF +cn +kr +mY +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(65,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Xj +Xj +Ex +JF +JF +Dj +Dj +Ij +Dj +Ij +Dj +LK +JF +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Pg +YQ +cn +YQ +aP +YQ +YQ +YQ +KM +rd +bg +sQ +YQ +sQ +CN +sQ +sQ +XR +Pg +sQ +wH +rd +AF +sQ +kr +YQ +rF +YQ +Wl +YQ +YQ +YQ +CN +nJ +rF +OU +io +du +io +io +du +du +io +du +io +io +io +xH +XB +du +io +WE +du +io +io +io +du +io +du +DL +YQ +ur +rF +Wl +MW +YQ +YQ +YQ +rF +YQ +rd +MW +vK +Wl +rd +YQ +YQ +YQ +Wl +ZV +rd +YQ +CN +oj +XC +HC +XC +jL +cn +YQ +YQ +CN +wH +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(66,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Xj +iZ +JF +JF +JF +Gd +Dj +LK +JF +Ex +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +vK +rd +YQ +YQ +CN +YQ +YQ +YM +wH +kr +Wl +YQ +aP +YQ +YQ +Wl +YQ +YQ +rd +rd +Wl +YQ +CN +YQ +Wj +vK +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +cn +YQ +OU +du +io +du +YF +io +io +io +io +ia +du +du +io +io +io +io +du +Ty +io +du +du +io +ie +sQ +YQ +YQ +YQ +rd +wH +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +kr +YQ +ZV +Pg +AF +rF +YQ +YQ +mY +YQ +vK +YQ +Yd +XC +YQ +wH +YQ +YQ +YQ +YQ +YQ +rd +vK +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(67,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Xj +Vh +qs +JF +LK +JF +Ex +JF +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Wl +YQ +YQ +vl +ZV +Pg +pK +YQ +YQ +MW +YQ +YQ +YQ +CN +rF +YQ +YQ +YQ +CN +YQ +YQ +vK +ZV +MW +YQ +YQ +CN +YQ +YQ +MW +Pg +cn +YQ +YQ +YQ +CN +YQ +IC +du +io +io +du +io +du +yu +YQ +sQ +Jo +du +yu +nD +sQ +sQ +YQ +sQ +sQ +sQ +sQ +YQ +Wl +rF +YQ +YQ +YQ +CN +YQ +YQ +kr +cn +rd +YQ +YQ +YQ +YQ +YQ +YQ +CN +vK +YQ +YQ +YQ +CN +YQ +YQ +MW +YQ +YQ +YQ +CV +YQ +aP +YQ +YQ +YQ +CN +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(68,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Xj +Xj +Xj +JF +Ex +JF +Xj +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +wH +rd +YQ +Xh +YQ +YQ +YQ +YQ +CN +YQ +ZV +cn +wH +YQ +YQ +YQ +MW +YQ +cn +cn +rd +YQ +Wl +cn +YQ +kr +rF +YQ +YQ +YM +YQ +YQ +YQ +mY +YQ +YQ +Jo +io +io +io +io +yu +YQ +rF +Wl +YQ +IF +YQ +cn +Vm +YQ +YQ +CN +rF +YQ +YQ +YQ +CN +cn +YQ +YQ +YQ +YQ +rF +Wl +rd +vK +YQ +YQ +YQ +YM +YQ +YQ +rF +YQ +rd +YQ +YQ +Wl +wH +YQ +YQ +CN +CV +Pu +rd +YQ +YQ +YQ +YQ +YQ +YQ +Wl +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(69,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +rF +YQ +YQ +YQ +YQ +rd +YQ +Wl +YQ +CN +wH +Wl +YQ +YQ +CN +YQ +YQ +YM +vK +YQ +Wl +Wl +YQ +YQ +CN +Wl +YQ +rd +YQ +Pg +rF +OU +du +io +du +yu +Pg +YQ +YQ +YQ +OU +io +xH +Oe +Ko +wj +YQ +YQ +cn +Pg +YQ +YQ +YQ +YQ +YM +Wl +vK +YQ +YM +AF +YQ +YQ +YQ +CN +vK +rd +Wl +rd +YQ +YQ +cn +ZV +MW +YQ +rd +aP +vK +YQ +ZV +rd +AF +cn +YQ +YQ +CN +YQ +cn +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(70,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +aP +vK +Pg +YQ +YQ +YQ +cn +Wl +YQ +AF +YQ +CN +YQ +AF +YQ +YQ +AF +YQ +YQ +YQ +Wl +AF +rF +YQ +YQ +YQ +YQ +CN +YQ +vK +rF +YQ +AF +vK +YQ +YQ +Wl +OU +io +io +io +DL +YQ +YQ +CN +YQ +Kr +io +du +bw +nJ +wH +YQ +YQ +YQ +Tw +wH +YQ +YQ +YQ +CN +rF +YQ +YQ +YQ +CN +cn +YQ +YQ +wH +cn +YQ +AF +YQ +YQ +YQ +CN +YQ +YQ +rF +Wl +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +vK +YQ +aP +YQ +rd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(71,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +AF +kr +YQ +rd +AF +rd +wH +kr +YQ +YQ +aP +YQ +YQ +YQ +vK +Pg +YQ +YQ +YQ +CN +rF +YQ +kr +YQ +YQ +MW +YQ +YQ +YQ +wH +YQ +cn +ZV +Mp +Mp +Jj +Jj +Mp +Mp +YQ +PS +du +io +DL +YQ +YQ +rd +YQ +YQ +Jo +io +KX +YQ +AF +YQ +YQ +YQ +YQ +YM +YQ +YQ +YQ +VP +Pg +YQ +YQ +YQ +YQ +YQ +ZV +Wl +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +YQ +YQ +YQ +CN +AF +YQ +YQ +Pg +YQ +YQ +YM +Wl +YQ +YQ +wH +ZV +AF +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(72,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YM +cn +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +Tw +wH +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +YQ +CN +Pg +YQ +YQ +YQ +CN +Pg +Wl +YQ +YQ +YQ +jF +Mp +gZ +Jd +Jd +tC +Mp +wj +XB +du +nv +YQ +rF +YQ +qg +qg +yK +yY +yY +qg +qg +Wd +ZV +YQ +YQ +YQ +YQ +Mp +Mp +Mp +Mp +Mp +Mp +Mp +YQ +YQ +YQ +CN +rd +KM +YQ +YQ +YQ +cn +YQ +YQ +YM +YQ +Wl +YQ +YQ +YQ +CN +aP +YQ +YQ +YQ +AF +YQ +YQ +YQ +CN +Pg +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(73,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +rd +YQ +MW +MW +YQ +YQ +YQ +cn +YQ +YQ +Pg +YQ +vK +Wl +YQ +Wl +YQ +Wl +vK +YQ +YQ +YQ +wH +Wl +YQ +YQ +YQ +wH +cn +YQ +YQ +YQ +YQ +YQ +Mp +gZ +Jd +Jd +xr +Mp +XB +io +Ty +io +DL +YM +YQ +qg +pT +nq +PN +zH +qg +zl +Wd +YQ +Wl +YQ +wH +Mp +Gl +TC +cg +RI +Mp +Qc +Mp +Mp +wj +YQ +YQ +YQ +MW +rd +YQ +YQ +YQ +CN +YQ +kr +rF +rd +YQ +YQ +YQ +cn +YQ +YQ +YQ +CN +cn +YQ +YQ +YQ +MW +rd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(74,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Pg +aP +YQ +YQ +CN +AF +Wl +kr +aP +MW +rd +rd +kr +YQ +YM +rF +YQ +YQ +YQ +YQ +YQ +YM +rd +YQ +mY +YQ +YQ +YQ +YM +YQ +YQ +YQ +CN +Pg +rd +Mp +gZ +Jd +Jd +Jd +Hw +io +du +xH +sQ +YQ +YQ +vK +yK +Eq +eI +PN +yW +qg +zl +Wd +YQ +Oe +Mp +Mp +Mp +Jq +Jd +Jd +Jd +FV +MP +Yt +Mp +Wl +YQ +YQ +YQ +CN +AF +Wl +YQ +rd +rd +YQ +YQ +YQ +YQ +YM +ZV +rd +VU +YQ +YQ +MW +YQ +rF +kr +YQ +cn +YQ +vK +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(75,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +Wl +YQ +YQ +YQ +YQ +rd +YQ +YQ +AF +YQ +YQ +YM +YQ +rd +YQ +Wl +YQ +YQ +YQ +CN +rd +rF +YQ +YQ +YQ +CN +ZV +YQ +YQ +YQ +YQ +YQ +YQ +MW +YQ +Mp +eK +Jd +Jd +aY +Mp +ne +du +io +DL +YQ +YQ +YQ +qg +pT +nq +PN +zH +qg +zl +Wd +YQ +kr +Mp +Kl +Mp +gv +Jd +Jd +Kw +Mp +MP +iH +Mp +YQ +YQ +YQ +Pg +YQ +kr +YQ +YQ +rF +YQ +YQ +YQ +CN +rd +Pg +YQ +YQ +YQ +CN +YQ +rd +AF +rd +YQ +vK +YQ +Wl +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(76,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +rd +YQ +kr +Wl +YQ +YQ +YQ +CN +rd +YQ +YQ +YQ +YQ +YQ +CN +cn +YQ +YQ +YQ +AF +YQ +YQ +YQ +rF +YQ +Wl +YQ +YQ +YQ +CN +cn +YQ +YQ +wH +Mp +Gl +hy +Jd +Us +Mp +Ka +wF +du +DL +MW +YQ +kr +qg +qg +yK +yY +yY +qg +qg +Wd +wH +YQ +IK +Jd +Sk +Jd +Jd +Jd +sn +Mp +MP +kQ +Mp +rF +cn +AF +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +Wl +rF +YQ +YQ +YQ +YQ +aP +YQ +YM +YQ +YQ +YQ +CN +AF +rF +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(77,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +CN +YQ +YQ +aP +YQ +Wl +YQ +ZV +Wl +YQ +YQ +CN +YQ +VU +YQ +rd +YQ +ZV +MW +YQ +YQ +YQ +CN +YQ +AF +Pg +YQ +YQ +YQ +rF +YQ +YQ +YQ +CN +Mp +VL +Jd +Jd +Jd +Hw +io +du +io +xH +YQ +YQ +YQ +YQ +YQ +hw +du +io +zr +AF +YQ +YQ +Pg +Jj +Jd +Gl +Mp +sD +Nx +Mp +Gl +Mp +Mp +Mp +cn +vK +YQ +YQ +YQ +CN +YQ +YQ +YQ +kr +YQ +YQ +YM +YQ +YQ +YQ +CN +YQ +kr +YQ +YQ +YQ +YQ +aP +wH +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(78,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Tv +YQ +ZV +YQ +YQ +YQ +YQ +CN +cn +YQ +kr +YQ +YQ +YQ +YQ +YQ +ZV +vK +YQ +YQ +YM +Wl +YQ +YQ +YQ +YQ +YQ +YQ +CN +cn +MW +Pg +AF +Wl +YQ +YQ +YQ +Mp +VL +Jd +Jd +EL +Mp +Jo +io +du +xH +YM +rF +YQ +YQ +YQ +ow +io +du +DL +YQ +rd +YQ +rF +Mp +Jd +Jd +Jd +Wi +Wi +CH +Jd +dn +XM +Mp +YQ +YM +YQ +YQ +rd +YQ +YQ +YM +rd +MW +YQ +YQ +AF +cn +YQ +YQ +Wl +YQ +YQ +AF +rd +cn +Pg +Wl +YQ +cn +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(79,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +AF +kr +rd +YQ +YQ +YQ +YQ +MW +AF +YQ +YQ +rd +Pg +aP +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +KM +Wl +YQ +YQ +wH +YQ +YQ +YQ +YQ +CN +YQ +YQ +YM +mt +Mp +VL +Jd +Jd +Jq +Mp +QX +Jo +io +du +DL +YQ +YQ +YQ +kr +YQ +uc +io +FP +YQ +YQ +YQ +cn +Mp +Jd +Jd +Bn +Jd +Jd +Jd +Bn +Jd +iR +Mp +YQ +rF +Wl +wH +mY +YQ +YQ +Pg +YQ +YQ +YQ +CN +ZV +rd +vK +AF +YQ +YQ +YQ +YQ +CN +YQ +aP +YQ +rd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(80,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Wl +mY +YQ +YQ +YQ +cn +ZV +YQ +YM +rd +aP +YQ +YQ +CN +mY +AF +YQ +YQ +YQ +wH +YQ +YQ +Pg +YQ +YQ +YQ +AF +Wl +YQ +kr +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +Mp +Mp +Jj +Jj +Mp +Mp +YQ +rF +Jo +io +DL +YQ +Wl +YQ +Vm +tZ +io +yu +YQ +YQ +YQ +CN +YQ +IK +Jd +dn +DU +fW +Jd +dn +ii +fW +Jd +IK +AF +YQ +YQ +kr +YQ +YQ +YQ +CN +YQ +YQ +rF +Wl +wH +YQ +aP +YQ +kr +YQ +cn +YQ +YQ +wH +vK +MW +ZV +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(81,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +aP +YQ +YQ +YQ +CN +YQ +Wl +YQ +kr +YQ +YQ +YQ +YQ +cn +YQ +YQ +YQ +MW +rd +YQ +YQ +kr +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +YQ +AF +YQ +YQ +YQ +CN +vK +YQ +wH +YQ +YQ +ZV +YQ +YQ +wH +XB +du +DL +Pg +YQ +gU +Ko +Ro +du +xH +YQ +aP +Pg +YQ +AF +IK +Bn +Jd +iR +Jd +Jd +Jd +iR +Jd +Jd +IK +YQ +YQ +YQ +CN +YQ +YQ +rF +YQ +rd +wH +AF +rd +YQ +YQ +YQ +CN +YQ +ZV +rd +Wl +YQ +YQ +CN +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(82,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +MW +YQ +YQ +YQ +YQ +rd +aP +YQ +YQ +wH +Wl +YQ +Wo +ZV +YQ +YQ +YQ +CN +YQ +YQ +YQ +Tw +YQ +YQ +YQ +YQ +Wl +YQ +rF +YQ +YQ +Wl +CN +YQ +cn +YQ +YQ +YQ +YQ +YQ +YQ +YQ +aP +YQ +OU +io +UH +jj +Ka +Ka +Ka +nJ +YU +du +io +xH +ZV +YQ +YQ +YQ +Mp +yX +wZ +Jd +Jd +Ct +Xm +Mx +dW +PW +Jj +vK +YQ +kr +YQ +Wl +rd +YQ +YQ +YQ +CN +cn +YQ +YQ +YQ +YQ +YQ +YQ +bn +aP +YQ +YQ +YQ +Wl +AF +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(83,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +rd +YQ +YM +aP +rd +YQ +Wl +kr +YQ +YQ +YQ +CN +YQ +YQ +rd +vK +YQ +YQ +YQ +YQ +YQ +YQ +Wl +wH +YQ +YQ +YM +vK +YQ +rx +YQ +Wl +YQ +YQ +wH +rd +Pg +YQ +YQ +YQ +CN +YQ +YQ +YQ +rd +Sc +io +du +io +io +du +io +QB +io +io +du +du +xH +Wl +YQ +DO +Mp +IK +Gl +EP +Mp +Jj +Gl +le +Qr +rt +Mp +Pg +rF +YQ +YQ +cn +AF +YQ +YQ +YQ +YQ +YQ +YQ +CN +rF +AF +Pg +YQ +YQ +AF +YQ +YQ +rd +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(84,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YM +kr +YQ +YQ +YQ +wH +vK +Pg +YQ +YQ +YQ +aP +YQ +YQ +CN +wH +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +YQ +YQ +YQ +cn +YQ +YQ +CN +cn +YQ +YQ +YM +YQ +YQ +YQ +YQ +YQ +Vm +cn +YQ +YQ +vK +OU +du +io +du +du +hk +io +DL +Jo +du +io +du +du +xH +Ka +Ka +Ka +ZV +XB +io +St +YQ +Mp +Mp +IK +Mp +Mp +vc +YQ +YQ +Vm +CN +MW +YQ +cn +kr +YQ +kr +vK +Pg +YQ +YQ +YQ +Tw +wH +YQ +YQ +YQ +CN +cn +rF +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(85,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Pg +YQ +ZV +AF +YQ +YQ +YQ +CN +YQ +Wl +YM +AF +YQ +YQ +YQ +YQ +YQ +YQ +YQ +kr +YQ +cn +YQ +YQ +YQ +YQ +YQ +CN +tu +YQ +YQ +MW +AF +YQ +YQ +Wl +CN +rF +ZV +YQ +IW +Ko +wj +YQ +kr +YQ +Fd +uc +io +yu +jb +YQ +sQ +wH +vK +sQ +Jo +io +io +du +du +io +io +WE +du +io +xH +uW +Ka +Ka +YQ +kr +YQ +YQ +wH +Oe +Ko +Gu +YQ +YQ +Tw +MW +MW +YQ +Wl +rd +MW +YQ +YQ +rd +YQ +cn +kr +YQ +AU +ZV +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(86,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Wl +wH +aP +YQ +YQ +cn +YQ +YQ +YQ +YQ +YQ +YQ +MW +kr +Pg +YQ +aP +YQ +CN +Wl +YQ +YQ +cn +rF +AF +Wl +YQ +YQ +YQ +YQ +rd +YQ +YQ +vK +YQ +YQ +YQ +YQ +YQ +YQ +wH +YQ +nJ +MW +YQ +YQ +OU +du +io +du +DL +YQ +YQ +Wl +YQ +YQ +rF +rd +CR +du +du +mZ +Wa +du +io +io +du +io +du +du +io +Nd +YJ +Ka +uW +YQ +YQ +lJ +YQ +YQ +YQ +wH +YQ +rd +YQ +CN +wH +cn +ZV +YQ +YQ +aP +Wl +YQ +rd +YQ +AF +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(87,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +YQ +CN +YQ +YQ +Wl +aP +KM +Ym +cn +YQ +YQ +YM +rF +Wl +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +cn +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +YQ +wH +YQ +kr +YQ +YQ +YQ +YQ +YQ +YQ +aP +OU +du +io +yu +Vm +aP +YQ +YQ +YQ +MW +YQ +YQ +YQ +sQ +sQ +YQ +YQ +sQ +sQ +Jo +io +du +hk +io +du +io +du +du +io +lf +YQ +YQ +YQ +kr +aP +fz +YQ +YQ +YQ +YQ +YQ +rF +YQ +YQ +YQ +CN +YQ +YQ +YM +Wl +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(88,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +cn +kr +YQ +YQ +Wl +YQ +YM +wH +kr +YQ +YQ +YQ +CN +YQ +YQ +wH +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +CN +YQ +rF +YQ +YQ +ZV +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +mY +AF +YQ +YQ +YM +YQ +YQ +OU +io +UH +Oe +Ko +wj +kr +YQ +YQ +CV +YQ +YQ +YM +MW +YQ +aP +YQ +YQ +YQ +YQ +sQ +LW +wH +Jo +io +io +io +du +io +io +DL +YM +rd +Mp +Mp +Mp +Mp +Mp +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(89,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +PB +YQ +YQ +Pg +YQ +Wl +YQ +YQ +YQ +AF +YQ +YQ +YQ +mY +AF +Wl +YQ +YQ +CN +YQ +ZV +wH +Pg +YQ +YQ +YQ +ZV +Wl +YQ +kr +YQ +wH +Wl +vK +Hk +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +Vm +vK +Wl +YQ +YQ +kw +du +DL +hp +YQ +YQ +YQ +YQ +YQ +Ka +SF +Ka +Ar +YQ +vK +YQ +Vm +YQ +CN +YQ +YQ +YQ +YQ +sQ +sQ +sQ +Jo +du +QC +Ka +Ka +Ka +Mp +Ct +MJ +zI +Mp +cn +YQ +YQ +wH +YQ +kr +AF +YQ +YQ +YQ +CN +rd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(90,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +CN +MW +aP +YQ +YQ +YQ +CN +YQ +YQ +YM +cn +ZV +pN +YQ +cn +YQ +YQ +YQ +YQ +Aa +YQ +YQ +YQ +YQ +CN +MW +YQ +YQ +YQ +CN +rF +Mp +Mp +Mp +Mp +Mp +IK +Gl +IK +Mp +bf +YQ +YQ +YQ +xU +io +du +DL +ZV +AF +cn +Ka +Ka +EQ +du +du +Ud +io +as +YQ +Oe +Ko +wj +YQ +YQ +YQ +YQ +YM +YQ +YQ +YQ +YM +Jo +du +du +io +du +uj +Jd +Jd +An +Mp +YQ +rd +aP +Wl +YQ +YQ +vK +Wl +YQ +YQ +wH +vK +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(91,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +YQ +YQ +kr +Pg +YQ +YQ +YQ +Wl +MW +wH +aP +Wl +YQ +kr +YQ +YQ +MW +YQ +YQ +YQ +CN +YQ +YQ +YQ +vK +Pg +YQ +YQ +YQ +YQ +ZV +Mp +uZ +Jd +Iw +Wi +Jd +vx +Jd +yM +Mp +AF +YQ +Ol +io +du +io +DL +YQ +cD +ws +io +Kk +io +du +uG +dF +du +io +yy +rd +nJ +YQ +YQ +MW +YQ +YQ +Pg +ZV +YQ +YQ +YQ +OU +io +io +yu +JZ +Mp +fh +Jd +af +Mp +mk +vK +rd +YQ +YQ +YQ +td +YQ +Pg +Bp +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(92,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +rd +AF +YQ +YQ +YQ +cn +rd +YQ +aP +YQ +cn +YQ +YQ +YM +YQ +nm +YQ +CN +YQ +YQ +YQ +YQ +YQ +YM +zx +cn +YQ +YQ +YQ +YM +cn +Pg +Mp +BY +Jd +sS +Wi +Co +dm +tK +Jd +Jj +YQ +YQ +OU +du +io +yu +rd +OU +du +io +du +uG +QA +QA +pQ +pQ +dF +io +du +xH +AF +YQ +YQ +YQ +YQ +YQ +YQ +Vm +cn +YQ +wH +YQ +pm +io +DL +Oe +Mp +Mp +FO +Mp +Mp +YQ +YM +YQ +YQ +YQ +MW +YQ +YQ +YM +rF +Wl +AR +AR +AR +AR +AR +AR +AR +kW +Xj +Xj +AR +kW +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(93,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +CN +YQ +YQ +YQ +CN +Wl +vK +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +aP +YQ +YQ +vK +MW +YQ +YQ +YQ +Wl +YQ +YQ +YQ +CN +YQ +YQ +YQ +rd +Mp +kB +Jd +kz +Wi +Jd +Jt +Jd +Jd +Gl +Ka +Ka +mE +io +io +DL +YQ +hH +du +Ud +uG +pQ +pQ +pQ +pQ +pQ +pQ +dF +io +io +DL +YQ +YQ +YQ +Wl +Mp +Mp +Mp +Mp +Mp +rd +OU +io +du +DL +YQ +Mp +pn +Jd +XV +Mp +YQ +YQ +YQ +YQ +CN +YQ +kr +YQ +rd +ZV +cn +AR +AR +AR +AR +AR +AR +AR +Xj +qa +Ih +ti +qi +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(94,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +aP +YQ +YQ +YQ +YQ +YQ +YQ +aP +AF +YQ +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +YM +Wl +YQ +YQ +YQ +CN +AF +YQ +YQ +YQ +rd +YQ +Wl +YQ +CN +Mp +fm +Jd +dt +Wi +Jd +Jd +Jd +Jd +vZ +du +io +du +du +io +Mf +YQ +KR +io +uG +pQ +pQ +pQ +pQ +pQ +pQ +pQ +Hg +Kk +io +xH +YQ +YM +YQ +YQ +Mp +zI +MJ +Ct +Mp +Ka +OU +io +io +DL +AF +Mp +Mp +Mp +Mp +Mp +Pg +YQ +YQ +YQ +wH +Wl +YQ +aP +YQ +CN +YQ +AR +AR +AR +AR +AR +AR +AR +AR +ti +Ih +oW +qa +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(95,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +vK +cn +YQ +Wl +kr +YQ +YQ +YM +YQ +dY +YQ +YQ +Wl +wH +YQ +Pg +vK +YQ +YQ +rF +Pg +cn +YQ +YQ +YQ +cn +YQ +wH +YQ +MW +Wl +YQ +YQ +Oe +Mp +Ct +Jd +Mh +Wi +Jd +Jd +Jd +Jd +Gl +oX +sQ +CR +du +io +DL +Kr +du +io +uh +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +dF +io +du +qr +YQ +rd +vK +Mp +wv +Jd +Jd +tS +io +QB +du +UH +YQ +YQ +YQ +YQ +Wl +YQ +MW +YQ +rd +AF +YQ +rF +rd +YQ +YQ +YQ +YQ +AF +AR +AR +AR +AR +AR +AR +AR +Xj +qa +qa +Ih +Ih +kW +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(96,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +mY +YQ +YM +YQ +aP +AF +YQ +rd +Pg +YQ +YQ +YQ +CN +vK +aP +YQ +cn +YQ +YQ +YQ +CN +YQ +YQ +YM +kr +Wl +YQ +YQ +CN +YQ +ZV +Pg +YQ +YM +Mp +Jd +Jd +BB +Jd +Jd +Jd +vx +Jd +IK +wH +YQ +OU +io +io +DL +OU +io +uG +pQ +pQ +pQ +pQ +pQ +YK +pQ +pQ +pQ +pQ +dF +du +xH +CV +YQ +jQ +Mp +af +Jd +gV +Mp +sQ +OU +du +du +YQ +YM +wH +YQ +YQ +YQ +rd +YQ +ZV +YQ +YQ +YQ +CN +YQ +YQ +YM +Wl +Pg +AR +AR +AR +AR +AR +AR +AR +Xj +ti +ai +qa +ti +kW +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(97,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Pg +YQ +YQ +Wl +YQ +YQ +cn +YQ +Wl +YQ +YQ +rd +YQ +AF +Wl +YQ +rd +CN +YQ +YQ +wH +YQ +YQ +YQ +YQ +YQ +YQ +Pg +YQ +YQ +YM +YQ +YQ +YQ +Mp +Jd +Jd +Se +Wi +Jd +Co +bZ +tK +Jj +YQ +MW +YQ +uC +du +DL +jJ +du +VJ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +Hg +ot +io +DL +YQ +ZV +Mp +Gl +FO +Mp +Mp +wj +OU +du +UH +YQ +YQ +cn +rd +ZV +YQ +YQ +YQ +YQ +YQ +YQ +YQ +Pg +cn +YQ +YQ +YQ +vK +AR +AR +AR +AR +AR +AR +AR +AR +Ih +WD +Ih +Ih +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(98,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +YQ +YQ +wH +YQ +kr +YQ +YQ +MW +YQ +YQ +YQ +kr +YQ +YQ +YQ +YQ +CN +wH +rd +cn +YQ +YQ +YQ +YQ +CN +wH +Mp +Jd +Jd +Gv +at +Jd +Jd +gj +Gn +Mp +YQ +YQ +OU +du +io +MS +Sc +io +Kk +uh +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +Hg +Bh +Vb +DL +kr +YQ +Mp +Ta +Jd +lS +Mp +vK +YQ +uc +du +zr +YQ +Mp +Mp +Mp +Mp +Mp +YQ +YQ +CN +vK +kr +Wl +YQ +MW +YQ +hv +rd +AR +AR +AR +AR +AR +AR +AR +kW +ti +Ih +cK +ti +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(99,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +aP +YM +Wl +YQ +YQ +aP +CN +ZV +YQ +YM +YQ +MW +YQ +YQ +YQ +YQ +AF +YQ +YQ +YQ +CN +YQ +YQ +YQ +PD +Mp +tx +Gl +Mp +Gl +Mp +Jd +Jd +Gl +Mp +wj +aP +OU +du +io +DL +MD +io +io +uh +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +dF +du +HD +YQ +YQ +Mp +Mp +Mp +Mp +Mp +Wl +OU +io +io +xH +rT +Mp +Ct +MJ +zI +Mp +YQ +YQ +wH +YQ +aP +YQ +rd +YQ +YQ +VU +YQ +AR +AR +AR +AR +AR +AR +AR +Xj +Xj +kW +AR +Xj +Xj +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(100,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AF +rd +kr +cn +YQ +YQ +YM +kr +cn +YQ +rF +YQ +YQ +YQ +YQ +Wl +YQ +YQ +rF +YQ +YQ +XC +YQ +YQ +rF +ZV +YQ +YQ +YQ +YQ +kr +Wl +AF +YQ +Mp +Jd +Jd +eN +Mp +by +Jd +Jd +by +Mp +AF +YQ +OU +io +UH +YQ +ow +du +uG +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +EA +io +DL +YQ +YQ +YQ +YQ +aP +YQ +rd +wH +OU +du +io +io +du +Du +Jd +Jd +An +Mp +YQ +cn +rd +YQ +YQ +YQ +CN +YQ +kr +rd +wH +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(101,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +aP +YQ +Wl +YQ +Wl +YQ +YQ +AF +YQ +YQ +YM +rd +AF +YQ +YQ +YQ +CN +rd +yi +HC +XC +YQ +YQ +YQ +CN +YQ +YQ +YM +YQ +YQ +YQ +pC +Mp +QI +Jd +LE +Mp +Jd +vx +vx +Jd +Jj +YQ +cn +OU +io +du +DL +OU +du +VJ +pQ +pQ +pQ +pQ +pQ +YK +pQ +pQ +pQ +pQ +Hg +du +io +bw +YQ +YQ +YQ +CN +YQ +MW +YQ +YQ +OU +io +io +yu +sQ +Mp +vs +Jd +af +Mp +Pd +YQ +YQ +YQ +YQ +YQ +KM +YQ +YQ +YQ +CN +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(102,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +Fz +rd +vK +YQ +YQ +YQ +CN +YQ +Wl +cn +aP +YQ +YQ +AF +Pg +YQ +yQ +XC +YQ +YQ +YQ +YQ +YQ +YQ +cn +mY +MW +YQ +YQ +YQ +Mp +SV +Jd +kn +Gl +xS +kq +Tm +tK +IK +ZV +YQ +OU +du +io +DL +hw +io +Ud +VJ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +EA +io +Hm +YQ +YQ +YQ +YQ +YQ +Pg +YQ +YQ +kr +OU +io +sQ +CN +Oe +Mp +Gl +FO +Mp +Mp +YQ +YQ +YQ +YQ +CN +ZV +kr +rF +YQ +YQ +YQ +Pg +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(103,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +Pg +YQ +YQ +YQ +YQ +aP +YQ +YQ +YQ +YQ +Pg +ZV +YQ +YQ +YQ +CN +YQ +YQ +CV +Ka +Ka +Ka +YQ +kr +YQ +YQ +YQ +CN +Wl +YQ +Wl +AF +rF +Mp +iE +eT +gL +Mp +wV +Ah +Tm +vN +Mp +YQ +YQ +Kr +io +io +DL +YQ +QO +du +io +uh +pQ +pQ +pQ +pQ +pQ +pQ +pQ +Hg +Kk +io +DL +rd +YQ +vK +Mp +Mp +Mp +Mp +Mp +YQ +OU +io +zA +YQ +YQ +Mp +pn +Jd +XV +Mp +Pg +YQ +YQ +MW +mY +YQ +rd +YQ +AF +YQ +cn +YQ +wH +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(104,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +Wl +YQ +kr +ZV +rd +wH +Wl +YQ +YQ +rd +MW +YQ +YQ +YQ +YQ +YQ +YQ +mE +io +du +io +PL +YQ +Pg +YQ +rd +YQ +YQ +YQ +YQ +CN +cn +Mp +Mp +Mp +Mp +Mp +Mp +Jj +IK +Mp +Mp +YQ +YM +YQ +uc +du +DL +VU +OU +io +du +VJ +pQ +pQ +pQ +pQ +pQ +pQ +pQ +Hg +du +io +DL +mY +Wl +YQ +Mp +zI +MJ +Ct +Mp +Ka +XB +io +du +DL +MW +Mp +Mp +Mp +Mp +Mp +rd +YQ +rF +cn +aP +YQ +YQ +CN +YQ +Wl +YQ +aP +rd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(105,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +AF +YQ +YQ +YQ +rd +AF +YQ +YQ +YQ +CN +YQ +mY +kr +rd +oj +YQ +ws +du +du +AT +du +du +yy +YQ +Wl +YQ +MW +YQ +YQ +YQ +YQ +YQ +nJ +vK +YQ +Wl +YQ +YQ +YQ +rd +YQ +nJ +YQ +YQ +OU +io +Vg +YQ +YQ +YQ +iU +du +Kk +uh +pQ +EA +no +VJ +pQ +pQ +EA +io +YE +AF +YQ +YQ +YQ +Mp +wv +Jd +Jd +HI +du +io +du +io +DL +YQ +YQ +YQ +AF +YQ +YQ +YQ +rd +YQ +Wl +YQ +YQ +YQ +YQ +YQ +YQ +CN +vK +ZV +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(106,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +CN +aP +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +Wl +vK +YQ +YQ +YQ +OU +io +io +uG +pQ +dF +io +io +HQ +YQ +kr +YQ +YQ +YQ +CN +Wl +YQ +YQ +YQ +CN +rF +YQ +YQ +YQ +YQ +kr +YQ +YQ +YQ +OU +io +du +DL +Pg +vK +MD +io +io +VJ +EA +du +io +du +VJ +EA +Ud +du +DL +YQ +YQ +YQ +El +Mp +af +Jd +bW +Mp +sQ +Jo +io +du +DL +YQ +aP +YQ +YM +YQ +YQ +YQ +YQ +CN +YQ +YQ +rd +Wl +YQ +YQ +YQ +YQ +YQ +cn +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(107,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +ZV +cn +rd +YQ +YQ +rd +YQ +cn +YQ +YQ +YQ +YQ +CN +YQ +YQ +YM +vy +du +uG +pQ +pQ +Hg +du +io +DL +rF +wH +YQ +YQ +YQ +wH +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YM +YQ +YQ +YQ +YQ +aP +OU +du +io +xH +YQ +YQ +jB +Fq +io +du +io +io +io +io +du +du +io +Hm +CV +YQ +YQ +wH +YQ +Mp +Mp +FO +Mp +Mp +wj +Pg +uc +io +MS +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +CN +Pg +wH +rd +YQ +YQ +YQ +CN +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(108,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +wH +YQ +YQ +YM +Pg +aP +YQ +YQ +YQ +YQ +YQ +AF +YQ +YQ +OU +io +uh +pQ +pQ +pQ +dF +du +uv +YQ +YQ +YQ +YQ +cn +YQ +YQ +YQ +CN +cn +YQ +kr +YQ +YQ +rF +YQ +AF +YQ +ZV +YQ +OU +du +io +du +DL +gU +Ko +wj +lr +sQ +nw +du +io +io +KO +sQ +sQ +YQ +CN +YQ +YQ +YQ +YQ +Mp +hU +Jd +lS +Mp +YQ +Yf +du +UH +YQ +rd +Mp +Mp +Mp +Mp +Mp +YQ +cn +YQ +YQ +ZV +YQ +cn +YQ +YM +YQ +YQ +YQ +YQ +AF +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(109,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +hv +YQ +vK +YQ +Wl +YQ +YQ +YQ +CN +YQ +Wl +YQ +cn +aP +OU +du +VJ +pQ +pQ +pQ +EA +io +DL +YQ +YQ +YQ +CN +rd +ZV +YQ +YQ +YQ +YQ +YQ +YQ +YQ +wH +YQ +vK +YQ +Pg +YQ +Wl +YQ +Jo +io +yu +Ka +Ka +nJ +cn +YQ +CV +YQ +IC +io +yu +YQ +Wl +YQ +YQ +YQ +YQ +YQ +YM +YQ +Mp +Mp +Mp +Mp +Mp +YQ +OU +io +io +xH +wH +Mp +Ct +MJ +zI +Mp +wH +YQ +rF +YQ +rd +YQ +YQ +AF +ZV +kr +MW +YQ +Pg +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(110,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +Wl +MW +YQ +cn +rd +YQ +VU +YQ +Pg +YQ +YQ +Dz +YQ +YQ +OU +du +io +VJ +pQ +Hg +io +du +DL +YQ +YQ +YQ +AF +Wl +YQ +YQ +kr +YQ +YQ +YQ +Tw +YQ +YQ +MW +Vm +cn +YQ +YQ +YQ +YQ +YQ +sQ +hw +io +du +xH +YQ +CN +YQ +MW +XB +io +yx +YQ +vK +YQ +kr +YQ +YQ +YQ +YQ +YQ +YQ +YQ +nJ +rd +ZV +YQ +OU +du +io +du +DL +IO +Jd +Jd +An +Mp +YQ +AF +YQ +YQ +YQ +Tw +cn +aP +YQ +YQ +YQ +YQ +CN +cn +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(111,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +rd +YQ +YQ +YQ +CN +YQ +wH +YQ +rd +kr +Wl +YQ +YQ +CN +YQ +Wl +iU +du +io +VJ +EA +du +io +CK +YQ +YQ +YQ +AF +YQ +YQ +YQ +CN +YQ +Wl +YQ +wH +ZV +YQ +Oe +Ko +wj +YQ +YQ +YQ +kr +YQ +YQ +OU +du +io +du +DL +Ka +Ka +XB +du +io +io +xH +YQ +YQ +YQ +YQ +rd +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +rQ +du +io +yu +YQ +Mp +TX +Jd +af +Mp +wj +YQ +YQ +YQ +YQ +MW +YQ +YQ +YM +rd +YQ +YQ +YQ +Wl +mY +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(112,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +kr +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +MW +YQ +YQ +ZV +YQ +YQ +YQ +YQ +QO +du +du +io +io +Hm +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +MW +rd +Wl +YQ +YQ +YQ +CN +YQ +nJ +YQ +YQ +CN +YQ +YQ +Pg +rd +wH +Jo +io +du +WE +du +du +io +io +du +io +du +Nd +rd +wH +YQ +ZV +YQ +MW +YQ +aP +YQ +Ka +Ka +Ka +YQ +XB +io +io +DL +mt +Mp +Mp +FO +Mp +Mp +YQ +YQ +YQ +CN +YQ +kr +YQ +YQ +vK +kr +Wl +YQ +YQ +YQ +rd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(113,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +ZV +AF +YQ +rd +YQ +YQ +ZV +AF +YQ +YQ +vK +YQ +rd +kr +YQ +YM +wH +YQ +sQ +sQ +uu +sQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +Wl +AF +vK +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +MW +YQ +Jo +io +io +hk +io +du +io +yu +CR +io +io +xH +Ka +cn +Ka +Ka +Ka +YQ +Ka +hC +du +io +io +MX +du +io +yu +YQ +YQ +Mp +pn +Jd +XV +Mp +YQ +YQ +YQ +YQ +wH +YQ +YQ +YQ +CN +YQ +YQ +YQ +aP +CN +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(114,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +aP +YQ +kr +Pg +mY +YQ +YQ +YQ +CN +cn +Pg +YQ +YQ +YQ +kr +Pg +rd +rF +YQ +YQ +YQ +YQ +CN +MW +YQ +kr +Wl +YQ +YM +YQ +YQ +YQ +CN +YQ +YQ +YM +YQ +Wl +YQ +mY +rF +Mp +Mp +Mp +Mp +Mp +YQ +Wl +Jo +du +ht +Jo +io +yu +YQ +OU +du +du +io +du +WE +io +io +du +WE +io +io +io +du +io +du +hk +io +DL +YQ +Wl +Mp +Mp +Mp +Mp +Mp +wH +AF +YQ +MW +kf +YQ +YQ +YQ +Pg +cn +YQ +Wl +YQ +YQ +ZV +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(115,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +CN +YQ +YQ +YQ +Wl +YQ +rd +aP +YQ +Wl +rd +YQ +YQ +YQ +CN +Wl +YQ +YQ +AF +YQ +YQ +YQ +YQ +YQ +YM +ZV +YQ +YQ +rd +YQ +YQ +YQ +ZV +AF +YQ +YQ +wH +YQ +YQ +cn +El +Mp +ml +Qt +ww +Mp +ZV +YQ +Tx +io +DL +uX +du +eJ +Wl +YQ +Jo +io +io +io +du +hk +du +io +io +du +du +io +yu +sQ +sQ +YQ +sQ +YQ +YQ +YQ +mY +YQ +nJ +YQ +vK +rd +YQ +YQ +YQ +td +YQ +YQ +cn +rd +YQ +wH +rd +AF +YQ +cV +Pg +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(116,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +Wl +YQ +YQ +YQ +CN +cn +ZV +YQ +YQ +YM +AF +YQ +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +Wl +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +Pg +YQ +YM +cn +YQ +YQ +YQ +CN +vK +YQ +Pg +YQ +Mp +QE +QE +eR +Mp +Mp +Jj +Mp +Ag +IK +Jj +Ag +Gl +IK +Mp +wj +sQ +sQ +JZ +sQ +YQ +sQ +sQ +sQ +sQ +sQ +sQ +wH +YQ +rd +YQ +YQ +ZV +kr +YQ +wH +YQ +YQ +YQ +CN +cn +aP +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +MW +CN +YQ +YQ +YQ +CN +Wl +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(117,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AF +cn +YQ +YQ +YQ +YQ +YQ +kr +YQ +YQ +YQ +YQ +Wl +YQ +nt +ZV +YQ +YQ +YQ +Wl +YQ +YQ +YQ +YQ +YQ +cn +Pg +YQ +YQ +YQ +AF +YQ +YQ +YQ +YQ +YQ +YQ +YQ +rF +MW +YQ +YQ +Mp +lV +Mp +Mp +Gl +Mp +Xm +CH +Jd +Jd +Jd +Jd +CH +Or +Mp +YQ +rd +YQ +YQ +YQ +og +YQ +rd +YQ +YQ +cn +YQ +Wl +YQ +YQ +YQ +Pg +YQ +YQ +aP +YQ +YQ +YQ +YQ +YQ +YQ +Pg +YQ +rd +YQ +YQ +YQ +YQ +aP +YQ +YQ +YQ +YQ +YQ +YQ +YQ +rF +rd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(118,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +vK +YQ +MW +AF +YQ +YQ +cn +Wl +YQ +kr +YQ +aP +YQ +YQ +CN +YQ +cn +YQ +YQ +YQ +YQ +CN +YQ +YQ +rd +YQ +YQ +YM +cn +Wl +YQ +YQ +CN +MW +YQ +YQ +YQ +YQ +Wl +wH +Mp +Jd +QE +OA +Ct +Mp +Jd +Jd +Jd +Jd +Jd +Jd +Jd +yF +Jj +AF +YQ +YQ +YM +Oe +Ko +wj +YQ +XC +aP +YQ +YQ +YQ +CN +MW +vK +YQ +rd +YQ +YQ +YQ +Wl +YQ +YQ +YQ +CN +Wl +YQ +YQ +CN +YQ +kr +rd +YQ +Wl +YQ +YQ +YM +wH +YQ +cn +YQ +ZV +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(119,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +hv +rd +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +rF +YQ +Pg +YQ +YQ +YM +rd +YQ +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +kr +YQ +YQ +YQ +Pg +YQ +YQ +YQ +CN +ZV +YQ +kr +Mp +hy +eB +uT +uy +yz +Jd +Jd +sR +Ei +Ve +Rn +Jd +yL +IK +YQ +YQ +YQ +YQ +Wl +nJ +YQ +kr +Yb +GU +YQ +YQ +YQ +YQ +YQ +YQ +YQ +Vm +YQ +YQ +CN +wH +YQ +AF +YQ +rd +YQ +YQ +cn +wH +aP +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +aP +YQ +CN +YQ +kr +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(120,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +Pg +YQ +YQ +YQ +YQ +YQ +Wl +YQ +YQ +YQ +rd +YQ +YQ +AF +YQ +Wl +YQ +YQ +YQ +CN +YQ +YM +aP +YQ +YQ +YQ +YQ +YQ +CN +MW +YQ +rd +kr +YQ +YQ +Wl +YQ +YQ +YQ +YQ +Mp +Jd +QE +wq +Jd +Gl +Jd +Jd +VK +XY +QE +Jv +Jd +Bq +IK +aP +YQ +wH +YQ +YQ +ZV +YQ +YQ +XC +YQ +YQ +YQ +Pg +YQ +rd +YQ +mt +Ko +wj +YQ +YQ +MW +YQ +YQ +cn +YQ +ZV +rd +YQ +YQ +mY +Wl +ZV +YQ +YQ +YQ +rF +kr +YQ +YQ +YQ +YQ +vK +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(121,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +rd +YQ +YQ +Wo +rd +MW +YQ +Wl +Pg +cn +YQ +YQ +YQ +CN +cn +cn +YQ +YQ +YQ +YQ +YQ +YQ +Pg +YQ +kr +YQ +YQ +YQ +YQ +vK +YQ +YQ +YQ +CN +YQ +cn +YQ +kr +YQ +jF +Mp +Mp +Jd +BB +Jd +Mp +KY +Jd +mu +QE +QE +yS +Jd +KY +Mp +YQ +Pg +mY +YQ +cn +YQ +rd +YQ +wH +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +nJ +rd +YQ +YQ +Wl +YQ +CN +YQ +YQ +YQ +CN +Wl +YQ +MW +CN +YQ +Pg +cn +rd +YQ +YQ +rd +YQ +YQ +Wl +rd +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(122,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +CN +vK +YQ +YQ +YQ +YQ +CN +AF +ZV +YQ +YQ +Wl +YQ +YQ +YQ +CN +cn +YQ +kr +YQ +YQ +YQ +CN +KM +cn +YQ +YQ +YQ +CN +VU +YQ +YQ +YQ +YQ +fH +rF +YQ +MW +AF +YQ +Mp +Mp +Mp +Mp +Mp +Mp +IK +IK +Mp +Mp +IK +Jj +Mp +Mp +mk +rd +YQ +YQ +ZV +YQ +vK +YQ +YQ +cn +YQ +YQ +YQ +MW +YQ +YQ +YQ +YQ +YM +Wl +aP +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +YQ +aP +YM +vK +MW +YQ +YQ +CN +YQ +MW +YQ +CN +AF +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(123,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +vK +YQ +YQ +cn +YQ +kr +YQ +YQ +YQ +YQ +YQ +YQ +YM +cn +vK +YQ +YQ +YQ +AF +vK +aP +YQ +VU +YQ +YQ +YQ +AF +mY +ZV +YQ +YQ +YQ +YQ +AF +aP +YQ +YQ +YQ +YQ +YQ +vK +cn +aP +YQ +nJ +YQ +CN +YQ +Pg +YQ +YQ +xD +YQ +cn +YQ +nJ +YQ +YQ +YQ +YQ +YQ +CN +YQ +kr +YQ +AF +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +CN +YQ +kr +YQ +cn +YQ +YQ +YM +wH +YQ +Sh +wH +wH +YQ +kr +YQ +Wl +YQ +YQ +YQ +cn +ZV +YQ +YQ +YQ +rF +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(124,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +Wl +ZV +YQ +YQ +AF +YQ +cn +rd +YQ +aP +YQ +AF +YQ +kr +MW +rd +Wl +YQ +YQ +cn +Wl +YQ +rd +YQ +YQ +YQ +cn +vK +YQ +wH +MW +ZV +YQ +rd +YQ +YQ +YQ +CN +rd +YQ +Pg +YQ +YQ +wH +YQ +AF +YQ +YQ +CN +YQ +kr +YQ +MW +YQ +YQ +CN +YQ +YQ +YQ +YQ +MW +YQ +rd +aP +YQ +YQ +YQ +YQ +wH +aP +YQ +YQ +YQ +wH +YQ +rd +vK +ZV +Wl +YQ +aP +vK +VU +rd +YQ +YM +YQ +YQ +rd +YQ +CN +YQ +rF +wH +rd +YQ +Pg +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(125,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +rF +rd +EV +YQ +YQ +YQ +YQ +CN +Wl +YQ +YQ +YQ +YQ +YQ +Tw +YQ +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +YQ +YQ +hv +rd +YQ +YQ +YQ +CN +YQ +kr +YQ +YQ +cn +YQ +YQ +YQ +YM +cn +ZV +rd +cn +YQ +YQ +YQ +wH +aP +YQ +rd +AF +YQ +YQ +cn +vK +wH +rd +YQ +YQ +Wl +YQ +rd +YQ +YQ +Wl +rd +YQ +ZV +YQ +rd +Wl +YQ +YQ +YQ +CN +YQ +YQ +YQ +KM +Pg +AF +ZV +YQ +YQ +cn +YQ +YQ +YQ +Pg +Wl +kr +YQ +YQ +aP +CN +rd +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(126,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +Wl +YQ +Pg +cn +YQ +YQ +YQ +YQ +YQ +CN +wH +YQ +YQ +aP +YQ +YQ +YQ +CN +YQ +YQ +YQ +wH +MW +YQ +YQ +YQ +YQ +YQ +Wl +Pg +YQ +YQ +YQ +YQ +cn +YQ +Pg +ZV +YQ +mY +wH +YQ +AF +YQ +kr +YQ +Wl +MW +YQ +kr +YQ +YQ +YQ +YQ +wH +YQ +Wl +rF +AF +kr +YQ +YQ +YQ +CN +YQ +YQ +YQ +CN +AF +YQ +YQ +YQ +CN +YQ +YM +Pg +YQ +YQ +YQ +YQ +YQ +YQ +Oz +YQ +YQ +MW +CN +rd +aP +YQ +YQ +AF +YQ +YQ +YM +YQ +YQ +cn +wH +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(127,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +CN +rd +KM +kr +YQ +YQ +YQ +YQ +YQ +YQ +mY +AF +YQ +YQ +YQ +ZV +YQ +kr +cn +YQ +Pg +Wl +YQ +kr +ZV +rd +YQ +AF +Wl +YQ +kr +YQ +PB +YQ +Wl +YQ +YQ +YQ +CN +aP +YQ +YQ +YQ +YQ +CN +YQ +YQ +ZV +AF +YQ +aP +YQ +CN +Pg +YQ +rd +YQ +cn +YQ +YQ +Pg +YQ +YQ +YQ +cn +ZV +YQ +aP +YQ +YQ +YQ +YQ +Pg +AF +MW +kr +wH +YQ +YQ +YQ +YQ +YQ +YQ +YQ +Wl +YQ +YQ +YQ +YQ +CN +YQ +wH +rd +YQ +YQ +YQ +Wl +vK +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(128,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +Wl +YQ +YQ +YQ +rd +YQ +YQ +YQ +YQ +CN +cn +YQ +Wl +YQ +kr +YQ +AF +YQ +YQ +YQ +YQ +CN +YQ +YQ +MW +YQ +YQ +YQ +CN +YQ +YQ +YQ +YQ +YQ +hv +YQ +MW +rF +YQ +vK +Wl +YQ +YQ +KM +YQ +YQ +YQ +CN +rF +YQ +YQ +YQ +YQ +YQ +YQ +YQ +CN +YQ +AF +rd +YQ +wH +kr +YQ +YQ +mY +vl +Pg +YQ +YQ +aP +CN +cn +YQ +YQ +YQ +CN +AF +YQ +YQ +YQ +CN +YQ +Pg +YQ +wH +YQ +AF +YQ +YQ +aP +cn +YQ +YQ +MW +CN +YQ +rF +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(129,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +rd +wH +ZV +mY +YQ +YQ +YQ +CN +Wl +YQ +YQ +YQ +MW +vK +YQ +YQ +rd +YQ +wH +kf +rd +YQ +aP +Wl +YQ +YQ +YQ +CN +Wl +YQ +vK +YQ +YQ +YM +wH +YQ +YQ +YQ +AF +YQ +YQ +rd +YQ +YQ +Pg +AF +vK +rd +YQ +wH +Pg +rd +YQ +YQ +YM +AF +YQ +YQ +YQ +wH +YQ +YQ +YQ +CN +Wl +aP +YQ +YQ +CN +VU +dY +YQ +YQ +aP +YQ +Wl +YQ +YQ +YQ +YQ +rd +YQ +MW +YQ +Wl +YQ +YQ +YQ +Oz +YQ +YQ +vK +YQ +YQ +YM +Wl +YQ +YQ +rd +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(130,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +kr +MW +rd +YQ +vK +YQ +YQ +YM +Pg +kr +YQ +YQ +YQ +YQ +CN +Pg +YQ +YQ +YQ +CN +Pg +rd +YQ +YQ +cn +YQ +YQ +rd +YQ +YQ +YQ +MW +YQ +YQ +YQ +cn +YQ +YQ +YM +YQ +YQ +YQ +CN +YQ +aP +YQ +aP +cn +YQ +Wl +YQ +YQ +vK +YQ +kr +cn +aP +MW +YQ +YQ +YQ +rF +ZV +PB +YQ +YQ +YQ +vK +YQ +rd +wH +cn +kr +YQ +aP +YQ +rd +kf +YQ +Wl +YQ +cn +YQ +YQ +YQ +YQ +YQ +Wl +YQ +YQ +CN +YQ +YQ +AF +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(131,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +CN +YQ +Xh +Pg +YQ +aP +YQ +YQ +YQ +YQ +ZV +rd +YQ +YQ +YQ +rd +YQ +YQ +YQ +vK +YQ +kr +YQ +AF +wH +YQ +kr +YQ +YQ +YQ +CN +rd +aP +YQ +YQ +CN +YQ +YQ +Pg +YQ +YQ +YQ +ZV +MW +YQ +YQ +YM +YQ +kr +YQ +YQ +YQ +CN +ZV +YQ +Wl +YQ +YQ +YQ +YM +cn +rd +YQ +vK +YQ +YQ +YM +aP +YQ +YQ +CN +ZV +YQ +YQ +YQ +CN +ZV +YQ +YQ +YQ +CN +YQ +YQ +YM +wH +YQ +Ak +YQ +cn +YQ +YQ +wH +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(132,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +YQ +YQ +YQ +CN +cn +wH +YQ +YQ +YQ +CN +wH +YQ +YQ +aP +YM +YQ +kr +AF +cn +YQ +YQ +YQ +YQ +YQ +CN +YQ +AF +YQ +YQ +YQ +YQ +YQ +kr +YQ +rd +wH +ZV +aP +vK +kr +wH +YQ +YQ +YQ +AF +Pg +YQ +YQ +YQ +YQ +rd +YQ +cn +YQ +YQ +YQ +CN +AF +YQ +YQ +kr +YQ +YQ +CN +wH +AF +YQ +YQ +YQ +YQ +Wl +wG +YQ +YQ +YQ +wH +YQ +YQ +YQ +YQ +kr +vK +aP +rd +YQ +YQ +YQ +rd +Pg +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(133,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +Pg +vl +YQ +YQ +YQ +YQ +YQ +rd +AF +YQ +YQ +YQ +YQ +kr +YQ +Wl +YQ +cn +MW +ZV +YQ +YQ +YQ +CN +YQ +YQ +MW +YQ +YQ +aP +YQ +YQ +YM +YQ +cn +Pg +YQ +Wl +YQ +AF +YQ +cn +YQ +YQ +YQ +CN +rd +YQ +YQ +YQ +CN +rF +wH +MW +Pg +YQ +YQ +YQ +YQ +Wl +mY +aP +YQ +YQ +YQ +YQ +YQ +cn +Pg +YQ +YQ +YM +YQ +AF +rd +AR +AR +AR +AR +AR +AR +Pg +YQ +mY +Wl +YQ +YQ +CN +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(134,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +CN +vK +YQ +YQ +YQ +CN +YQ +Pg +YQ +aP +AF +YQ +YQ +AR +AR +AR +AR +AR +YQ +Pg +YQ +YQ +EV +cn +YQ +YQ +YQ +CN +ZV +YQ +Wl +YQ +AF +YQ +AR +AR +AR +AR +AR +AR +rF +YQ +YQ +YQ +YQ +Wl +YQ +YQ +YQ +YQ +YQ +YQ +YM +YQ +aP +rd +YQ +YQ +YQ +CN +YQ +YQ +YM +MW +YQ +YQ +YQ +CN +wH +rd +Pg +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(135,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +cn +cn +Pv +YQ +YQ +Wl +YM +vK +cn +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +vK +YQ +kr +YQ +YQ +YQ +YQ +cn +rd +Pg +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +ZV +rF +wH +cn +mY +Pv +YQ +YQ +YQ +YQ +AF +vK +YQ +YQ +YQ +KM +AF +YQ +Pg +rd +YQ +YQ +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(136,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +wH +rd +YQ +AF +ZV +YQ +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +rd +Wl +YQ +wH +mY +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +YQ +CN +cn +YQ +kr +YQ +wH +Wl +YQ +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(137,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +ZV +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +YQ +YQ +YQ +ZV +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(138,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(139,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(140,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(141,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(142,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(143,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(144,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(145,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(146,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(147,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(148,1,1) = {" +bG +bG +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +AR +bG +bG +"} +(149,1,1) = {" +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +"} +(150,1,1) = {" +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +bG +"} diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index d24a6fbae2..df4ab2bc72 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -1491,6 +1491,10 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/solar/starboard/fore) +"adu" = ( +/obj/effect/landmark/barthpot, +/turf/open/floor/wood, +/area/library) "adw" = ( /obj/structure/cable, /obj/structure/lattice/catwalk, @@ -105452,7 +105456,7 @@ aIt aPd aIt aPb -aIt +adu aXu aYW bat diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index ffa75eb200..245f67833e 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -19127,7 +19127,7 @@ /area/maintenance/disposal/incinerator) "aFL" = ( /obj/machinery/atmospherics/pipe/layer_manifold, -/turf/closed/wall, +/turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) "aFM" = ( /obj/structure/grille, @@ -19140,7 +19140,7 @@ /area/maintenance/disposal/incinerator) "aFO" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, -/turf/closed/wall, +/turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) "aFP" = ( /obj/machinery/door/firedoor, @@ -19196,7 +19196,7 @@ "aFU" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/machinery/meter, -/turf/closed/wall, +/turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) "aFV" = ( /obj/structure/cable{ @@ -20074,6 +20074,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, +/obj/effect/spawner/structure/window/reinforced, /turf/closed/wall, /area/engine/atmos) "aHy" = ( @@ -20930,7 +20931,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, -/turf/closed/wall, +/turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) "aIM" = ( /obj/effect/turf_decal/bot, @@ -20949,13 +20950,14 @@ /turf/closed/wall, /area/maintenance/central) "aIO" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/layer_manifold, /turf/closed/wall, /area/engine/atmos) "aIP" = ( @@ -21204,7 +21206,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/turf/closed/wall, +/turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) "aJm" = ( /obj/effect/decal/cleanable/dirt, @@ -21443,6 +21445,7 @@ /area/engine/atmos) "aJI" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/effect/spawner/structure/window/reinforced, /turf/closed/wall, /area/engine/atmos) "aJJ" = ( @@ -21839,13 +21842,6 @@ dir = 1 }, /area/hallway/primary/fore) -"aKm" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/closed/wall, -/area/engine/atmos) "aKn" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -52340,6 +52336,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/spawner/structure/window/reinforced, /turf/closed/wall, /area/engine/atmos) "bGp" = ( @@ -53442,6 +53439,7 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, +/obj/effect/spawner/structure/window/reinforced, /turf/closed/wall, /area/engine/atmos) "bIc" = ( @@ -53455,10 +53453,11 @@ }, /area/engine/atmos) "bIe" = ( -/obj/machinery/atmospherics/pipe/simple/purple/visible, /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/layer_manifold, /turf/closed/wall, /area/engine/atmos) "bIf" = ( @@ -61567,10 +61566,11 @@ /turf/open/space/basic, /area/space/nearstation) "bUM" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/layer_manifold{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/engine/atmos) "bUN" = ( @@ -63743,9 +63743,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"bYf" = ( -/turf/closed/mineral/random/labormineral, -/area/maintenance/starboard/aft) "bYg" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -67199,7 +67196,6 @@ /area/maintenance/port/aft) "cdS" = ( /obj/structure/sign/warning/securearea, -/obj/item/multitool, /turf/closed/wall/r_wall, /area/security/nuke_storage) "cdT" = ( @@ -75350,7 +75346,9 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/obj/machinery/airalarm, +/obj/machinery/airalarm{ + pixel_y = 22 + }, /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ @@ -78583,6 +78581,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/spawner/structure/window/reinforced, /turf/closed/wall, /area/engine/atmos) "cxU" = ( @@ -80395,7 +80394,7 @@ /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/space, -/area/engine/atmos) +/area/space/nearstation) "cCY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -84951,7 +84950,7 @@ /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 }, -/turf/closed/wall, +/turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) "jOz" = ( /obj/structure/sign/warning/electricshock, @@ -112894,9 +112893,9 @@ cvg aMP aFL aIL -aFI +aEh aFW -aFI +aEh cko cko aaa @@ -113153,9 +113152,9 @@ aFO cwc aFO cwA -aFI -aFI -aFI +aEh +aEh +aEh aaa aaa aaa @@ -113667,9 +113666,9 @@ aFU cwd jHJ cwH -aFI -aFI -aFI +aEh +aEh +aEh aaa aaa aaa @@ -113922,9 +113921,9 @@ cFF cFF cFF aJl -aFI -aFI -aFI +aEh +aEh +aEh cko cko aaa @@ -114177,7 +114176,7 @@ cBz aHd aMZ aFc -cFF +aFM acm aaa aaQ @@ -114691,7 +114690,7 @@ cBB aHf bDR aFc -cFF +aFM acm aaa cow @@ -115205,7 +115204,7 @@ cBz aHg aNa aFd -cFF +aFM acm aaa cow @@ -115719,7 +115718,7 @@ cBB aHi bFG aFd -cFF +aFM acm aaa acm @@ -116233,7 +116232,7 @@ cBz aHj aNb aVG -cFF +aFM acm aaa cow @@ -116741,13 +116740,13 @@ cpK cqL cph bwy -aKm +bIe clu cBB aHl bId aFe -cFF +aFM acm aaa aaQ @@ -124436,7 +124435,7 @@ koc dbY dlg bWx -bYf +bPJ ceU cgI cDp diff --git a/code/__DEFINES/dynamic.dm b/code/__DEFINES/dynamic.dm index da8a76e71e..6a15834ed8 100644 --- a/code/__DEFINES/dynamic.dm +++ b/code/__DEFINES/dynamic.dm @@ -1,7 +1,7 @@ #define CURRENT_LIVING_PLAYERS 1 #define CURRENT_LIVING_ANTAGS 2 #define CURRENT_DEAD_PLAYERS 3 -#define CURRENT_OBSERVERS 4 +#define CURRENT_OBSERVERS 4 #define NO_ASSASSIN (1<<0) #define WAROPS_ALWAYS_ALLOWED (1<<1) @@ -9,9 +9,11 @@ #define FORCE_IF_WON (1<<3) #define USE_PREV_ROUND_WEIGHTS (1<<4) -#define ONLY_RULESET (1<<0) -#define HIGHLANDER_RULESET (1<<1) -#define TRAITOR_RULESET (1<<2) -#define MINOR_RULESET (1<<3) +#define ONLY_RULESET (1<<0) +#define HIGHLANDER_RULESET (1<<1) +#define TRAITOR_RULESET (1<<2) +#define MINOR_RULESET (1<<3) +#define FAKE_ANTAG_RULESET (1<<4) +#define ALWAYS_MAX_WEIGHT_RULESET (1<<5) #define RULESET_STOP_PROCESSING 1 diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 3407b3342b..ffcb5ac231 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -125,7 +125,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isbot(A) (istype(A, /mob/living/simple_animal/bot)) -#define isshade(A) (istype(A, /mob/living/simple_animal/shade)) +#define isshade(A) (istype(A, /mob/living/simple_animal/hostile/construct/shade)) #define ismouse(A) (istype(A, /mob/living/simple_animal/mouse)) diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index aef77e7b57..cd13510366 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -78,7 +78,9 @@ #define EXP_TYPE_ADMIN "Admin" //Flags in the players table in the db -#define DB_FLAG_EXEMPT 1 +#define DB_FLAG_EXEMPT (1<<0) +#define DB_FLAG_AGE_CONFIRMATION_INCOMPLETE (1<<1) +#define DB_FLAG_AGE_CONFIRMATION_COMPLETE (1<<2) #define DEFAULT_CYBORG_NAME "Default Cyborg Name" diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 5775e128f8..57484ae85b 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -76,8 +76,14 @@ #define LINGHIVE_LINK 3 //whether the emote is visible or audible. +// Requires sight #define EMOTE_VISIBLE 1 +// Requires hearing #define EMOTE_AUDIBLE 2 +// Requires sight or hearing +#define EMOTE_BOTH 3 +// Always able to be seen +#define EMOTE_OMNI 4 //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam #define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen? @@ -89,4 +95,4 @@ // Audio/Visual Flags. Used to determine what sense are required to notice a message. #define MSG_VISUAL (1<<0) -#define MSG_AUDIBLE (1<<1) \ No newline at end of file +#define MSG_AUDIBLE (1<<1) diff --git a/code/__DEFINES/species.dm b/code/__DEFINES/species.dm index 3b4c674079..efd715b85a 100644 --- a/code/__DEFINES/species.dm +++ b/code/__DEFINES/species.dm @@ -34,6 +34,7 @@ #define SPECIES_SYNTH "synth" #define SPECIES_SYNTH_MIL "military_synth" #define SPECIES_VAMPIRE "vampire" + #define SPECIES_VAMPIRE_WEAK "vampire_roundstart" #define SPECIES_XENOHYBRID "xeno" #define SPECIES_ZOMBIE "zombie" diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index 7c0811ec59..a0a5df4290 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "5.2.1" +#define TGS_DMAPI_VERSION "5.2.7" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -95,6 +95,8 @@ #define TGS_EVENT_WATCHDOG_SHUTDOWN 15 /// Before the watchdog detaches for a TGS update/restart. No parameters. #define TGS_EVENT_WATCHDOG_DETACH 16 +// We don't actually implement this value as the DMAPI can never receive it +// #define TGS_EVENT_WATCHDOG_LAUNCH 17 // OTHER ENUMS @@ -127,6 +129,7 @@ * Call this when your initializations are complete and your game is ready to play before any player interactions happen. * * This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running. + * Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184 * Before this point, note that any static files or directories may be in use by another server. Your code should account for this. * This function should not be called before ..() in [/world/proc/New]. */ diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index dc3a7fae17..4d75e247a0 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -209,10 +209,9 @@ #define TRAIT_FAST_PUMP "fast_pump" #define TRAIT_NO_PROCESS_FOOD "no-process-food" // You don't get benefits from nutriment, nor nutrition from reagent consumables #define TRAIT_NICE_SHOT "nice_shot" //hnnnnnnnggggg..... you're pretty good... -/// Prevents stamina buffer regeneration -#define TRAIT_NO_STAMINA_BUFFER_REGENERATION "block_stamina_buffer_regen" -/// Prevents stamina regeneration -#define TRAIT_NO_STAMINA_REGENERATION "block_stamina_regen" +#define TRAIT_NO_STAMINA_BUFFER_REGENERATION "block_stamina_buffer_regen" /// Prevents stamina buffer regeneration +#define TRAIT_NO_STAMINA_REGENERATION "block_stamina_regen" /// Prevents stamina regeneration +#define TRAIT_ARMOR_BROKEN "armor_broken" //acts as if you are wearing no clothing when taking damage, does not affect non-clothing sources of protection // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) @@ -326,3 +325,4 @@ /// This trait is added by the parry system. #define ACTIVE_PARRY_TRAIT "active_parry" #define STICKY_NODROP "sticky-nodrop" //sticky nodrop sounds like a bad soundcloud rapper's name +#define TRAIT_SACRIFICED "sacrificed" //Makes sure that people cant be cult sacrificed twice. diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index f981ec3595..510eeebdce 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -13,6 +13,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NEARSIGHT" = TRAIT_NEARSIGHT, "TRAIT_FAT" = TRAIT_FAT, "TRAIT_HUSK" = TRAIT_HUSK, + "TRAIT_SACRIFICED" = TRAIT_SACRIFICED, "TRAIT_NOCLONE" = TRAIT_NOCLONE, "TRAIT_CLUMSY" = TRAIT_CLUMSY, "TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS, diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index fdf7ffd663..67e4a97894 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -509,21 +509,21 @@ //Body size configs, the feature will be disabled if both min and max have the same value. /datum/config_entry/number/body_size_min - config_entry_value = RESIZE_DEFAULT_SIZE + config_entry_value = 0.9 min_val = 0.1 //to avoid issues with zeros and negative values. max_val = RESIZE_DEFAULT_SIZE integer = FALSE /datum/config_entry/number/body_size_max - config_entry_value = RESIZE_DEFAULT_SIZE + config_entry_value = 1.25 min_val = RESIZE_DEFAULT_SIZE integer = FALSE -//Pun-Pun movement slowdown given to characters with a body size smaller than this value, +//Penalties given to characters with a body size smaller than this value, //to compensate for their smaller hitbox. //To disable, just make sure the value is lower than 'body_size_min' -/datum/config_entry/number/threshold_body_size_slowdown - config_entry_value = RESIZE_DEFAULT_SIZE * 0.85 +/datum/config_entry/number/threshold_body_size_penalty + config_entry_value = RESIZE_DEFAULT_SIZE min_val = 0 max_val = RESIZE_DEFAULT_SIZE integer = FALSE @@ -531,8 +531,8 @@ //multiplicative slowdown multiplier. See 'dna.update_body_size' for the operation. //doesn't apply to floating or crawling mobs /datum/config_entry/number/body_size_slowdown_multiplier - config_entry_value = 0.25 - min_val = 0.1 //To encourage folks to disable the slowdown through the above config instead. + config_entry_value = 0 + min_val = 0 integer = FALSE //Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones. diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 48b159baa1..90ec3bc289 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -327,6 +327,9 @@ /datum/config_entry/number/notify_new_player_account_age // how long do we notify admins of a new byond account min_val = 0 +/datum/config_entry/flag/age_verification //are we using the automated age verification which asks users if they're 18+? + config_entry_value = TRUE + /datum/config_entry/flag/irc_first_connection_alert // do we notify the irc channel when somebody is connecting for the first time? /datum/config_entry/flag/check_randomizer diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 47b93928d4..9a0665e91f 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -52,7 +52,7 @@ SUBSYSTEM_DEF(traumas) "doctors" = typecacheof(list(/mob/living/simple_animal/bot/medbot)), "the supernatural" = typecacheof(list(/mob/living/simple_animal/hostile/construct, /mob/living/simple_animal/hostile/clockwork, /mob/living/simple_animal/drone/cogscarab, - /mob/living/simple_animal/revenant, /mob/living/simple_animal/shade)), + /mob/living/simple_animal/revenant, /mob/living/simple_animal/hostile/construct/shade)), "aliens" = typecacheof(list(/mob/living/carbon/alien, /mob/living/simple_animal/slime)), "conspiracies" = typecacheof(list(/mob/living/simple_animal/bot/secbot, /mob/living/simple_animal/bot/ed209, /mob/living/simple_animal/drone, /mob/living/simple_animal/pet/penguin)), diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm index b8191a377b..0552a791ea 100644 --- a/code/datums/components/squeak.dm +++ b/code/datums/components/squeak.dm @@ -46,6 +46,21 @@ if(isnum(use_delay_override)) use_delay = use_delay_override +/datum/component/squeak/UnregisterFromParent() + if(!isatom(parent)) + return + UnregisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY)) + if(ismovable(parent)) + UnregisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT, + COMSIG_MOVABLE_CROSSED, COMSIG_ITEM_WEARERCROSSED, COMSIG_MOVABLE_CROSS, + COMSIG_CROSS_SQUEAKED, COMSIG_MOVABLE_DISPOSING)) + if(isitem(parent)) + UnregisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK_SELF, + COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) + if(istype(parent, /obj/item/clothing/shoes)) + UnregisterSignal(parent, COMSIG_SHOES_STEP_ACTION) + return ..() + /datum/component/squeak/proc/play_squeak() do_play_squeak() diff --git a/code/datums/dna.dm b/code/datums/dna.dm index cd90b554ac..fe041c41ff 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -5,7 +5,7 @@ var/uni_identity var/blood_type var/datum/species/species = new /datum/species/human //The type of mutant race the player is if applicable (i.e. potato-man) - var/list/features = list("FFF") //first value is mutant color + var/list/features = list("FFF", "body_size" = RESIZE_DEFAULT_SIZE) //first value is mutant color var/real_name //Stores the real name of the person who originally got this dna datum. Used primarely for changelings, var/nameless = FALSE var/custom_species //siiiiigh I guess this is important @@ -696,11 +696,19 @@ /datum/dna/proc/update_body_size(old_size) if(!holder || features["body_size"] == old_size) return + //new size detected holder.resize = features["body_size"] / old_size holder.update_transform() - var/danger = CONFIG_GET(number/threshold_body_size_slowdown) - if(features["body_size"] < danger) - var/slowdown = (1 - round(features["body_size"] / danger, 0.1)) * CONFIG_GET(number/body_size_slowdown_multiplier) - holder.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/small_stride, TRUE, slowdown) - else if(old_size < danger) - holder.remove_movespeed_modifier(/datum/movespeed_modifier/small_stride) + if(iscarbon(holder)) + var/mob/living/carbon/C = holder + var/penalty_threshold = CONFIG_GET(number/threshold_body_size_penalty) + if(features["body_size"] < penalty_threshold && old_size >= penalty_threshold) + C.maxHealth -= 10 //reduce the maxhealth + var/slowdown = (1 - round(features["body_size"] / penalty_threshold, 0.1)) * CONFIG_GET(number/body_size_slowdown_multiplier) + holder.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/small_stride, TRUE, slowdown) + else + if(old_size < penalty_threshold && features["body_size"] >= penalty_threshold) + C.maxHealth += 10 //give the maxhealth back + holder.remove_movespeed_modifier(/datum/movespeed_modifier/small_stride) //remove the slowdown + + diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index e1147df225..14f3eae689 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -66,8 +66,12 @@ if(emote_type == EMOTE_AUDIBLE) user.audible_message(msg) - else + else if(emote_type == EMOTE_VISIBLE) user.visible_message(msg) + else if(emote_type == EMOTE_BOTH) + user.visible_message(msg, blind_message = msg) + else if(emote_type == EMOTE_OMNI) + user.visible_message(msg, omni = TRUE) /datum/emote/proc/replace_pronoun(mob/user, message) if(findtext(message, "their")) diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm index 3bddfdaa63..b72874c329 100644 --- a/code/datums/mutations/_mutations.dm +++ b/code/datums/mutations/_mutations.dm @@ -150,7 +150,6 @@ overlays_standing[CM.layer_used] = mut_overlay apply_overlay(CM.layer_used) - /datum/mutation/human/proc/modify() //called when a genome is applied so we can properly update some stats without having to remove and reapply the mutation from someone if(modified || !power || !owner) return diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index fbc433a8a0..836b00250f 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -72,6 +72,8 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) var/list/threat_log_verbose = list() /// List of roundstart rules used for selecting the rules. var/list/roundstart_rules = list() + /// List of minor roundstart rules used for selecting the rules. + var/list/minor_rules = list() /// List of latejoin rules used for selecting the rules. var/list/latejoin_rules = list() /// List of midround rules used for selecting the rules. @@ -121,10 +123,12 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) var/pop_last_updated = 0 /// How many percent of the rounds are more peaceful. var/peaceful_percentage = 50 - /// If a highlander executed. + /// If a highlander executed. No other highlander rulesets will be run. var/highlander_executed = FALSE - /// If a only ruleset has been executed. + /// If a only ruleset has been executed. No other rulesets will be run. var/only_ruleset_executed = FALSE + /// If the first picked ruleset was a minor ruleset. Minor antagonists will be weighted higher. + var/minor_ruleset_start = FALSE /// Antags rolled by rules so far, to keep track of and discourage scaling past a certain ratio of crew/antags especially on lowpop. var/antags_rolled = 0 // Arbitrary threat addition, for fudging purposes. @@ -372,6 +376,8 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) if(ruleset.name == "") continue switch(ruleset.ruletype) + if("Minor") + minor_rules += ruleset if("Roundstart") roundstart_rules += ruleset if ("Latejoin") @@ -396,21 +402,47 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) rigged_roundstart() else roundstart() - - var/starting_rulesets = "" - for (var/datum/dynamic_ruleset/roundstart/DR in executed_rules) - starting_rulesets += "[DR.name], " - log_game("DYNAMIC: Picked the following roundstart rules: [starting_rulesets]") + if(minor_ruleset_start) + log_game("DYNAMIC: Starting a minor ruleset round.") + else + var/starting_rulesets = "" + for (var/datum/dynamic_ruleset/roundstart/DR in executed_rules) + starting_rulesets += "[DR.name], " + log_game("DYNAMIC: Picked the following roundstart rules: [starting_rulesets]") candidates.Cut() return TRUE /datum/game_mode/dynamic/post_setup(report) update_playercounts() - - for(var/datum/dynamic_ruleset/roundstart/rule in executed_rules) - addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/execute_roundstart_rule, rule), rule.delay) + if(minor_ruleset_start) + addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/minor_roundstart),rand(1 MINUTES,5 MINUTES)) + else + for(var/datum/dynamic_ruleset/roundstart/rule in executed_rules) + addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/execute_roundstart_rule, rule), rule.delay) ..() +/datum/game_mode/dynamic/proc/minor_roundstart() + message_admins("Dynamic beginning minor antag roundstart rolls.") + var/list/potential_minor_rulesets = storyteller.minor_rule_draft() + var/iterations = 0 + var/num_rulesets_executed = 0 + while(threat < threat_level && potential_minor_rulesets.len && (!CHECK_TICK || iterations < 100)) + var/datum/dynamic_ruleset/minor/rule = pickweight(potential_minor_rulesets) + rule.candidates = current_players[CURRENT_LIVING_PLAYERS].Copy() + rule.trim_candidates() + if(!check_blocking(rule.blocking_rules, executed_rules) && rule.ready()) + rule.execute() + executed_rules |= rule + log_threat("[rule.ruletype] - [rule.name] [rule.cost] threat", verbose = TRUE) + num_rulesets_executed++ + else + potential_minor_rulesets -= rule + update_playercounts() + iterations++ + message_admins("Minor antag roundstart rolls completed, with [num_rulesets_executed] antags or antag teams made.") + log_game("DYNAMIC: Minor antag roundstart made [num_rulesets_executed] antags or antag teams.") + + /// A simple roundstart proc used when dynamic_forced_roundstart_ruleset has rules in it. /datum/game_mode/dynamic/proc/rigged_roundstart() message_admins("[GLOB.dynamic_forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.") @@ -429,12 +461,17 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) if (GLOB.dynamic_forced_extended) log_game("DYNAMIC: Starting a round of forced extended.") return TRUE + if(prob(storyteller.minor_start_chance())) + minor_ruleset_start = TRUE + message_admins("Dynamic has initialized a minor antag start. Antags will be assigned in 1-5 minutes.") + log_game("DYNAMIC: Minor start initialized.") + return TRUE var/list/drafted_rules = storyteller.roundstart_draft() if(!drafted_rules.len) - message_admins("Not enough threat level for roundstart antags!") - log_game("DYNAMIC: Not enough threat level for roundstart antags!") - midround_injection_cooldown = round((midround_injection_cooldown + world.time) / 2, 1) - latejoin_injection_cooldown = round((latejoin_injection_cooldown + world.time) / 2, 1) + message_admins("No roundstart antags drafted! Falling back to minor ruleset start.") + log_game("DYNAMIC: No roundstart antags drafted! Falling back to minor ruleset start.") + minor_ruleset_start = TRUE + return FALSE var/indice_pop = min(10,round(roundstart_pop_ready/pop_per_requirement)+1) extra_rulesets_amount = 0 if (GLOB.dynamic_classic_secret) @@ -468,8 +505,9 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) else if(threat_level >= 50) - message_admins("DYNAMIC: Picking first roundstart ruleset failed. You should report this.") + message_admins("DYNAMIC: Picking first roundstart ruleset failed. You should report this. Falling back to minor antag start.") log_game("DYNAMIC: Picking first roundstart ruleset failed. drafted_rules.len = [drafted_rules.len] and threat = [threat]/[threat_level]") + minor_ruleset_start = TRUE return FALSE return TRUE @@ -513,7 +551,6 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) drafted_rules -= starting_rule starting_rule.trim_candidates() - starting_rule.scale_up(extra_rulesets_amount, threat_level-added_threat) if (starting_rule.pre_execute()) log_threat("[starting_rule.ruletype] - [starting_rule.name] [starting_rule.cost + starting_rule.scaled_times * starting_rule.scaling_cost] threat", verbose = TRUE) if(starting_rule.flags & HIGHLANDER_RULESET) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/game/gamemodes/dynamic/dynamic_rulesets.dm index eb7da2144f..3e7e504130 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets.dm @@ -50,8 +50,12 @@ /// Used for the roundend report var/total_cost = 0 /// A flag that determines how the ruleset is handled + /// ONLY_RULESET are rulesets that prevent ALL other rulesets from rolling. /// HIGHLANDER_RULESET are rulesets can end the round. - /// TRAITOR_RULESET and MINOR_RULESET can't end the round and have no difference right now. + /// TRAITOR_RULESET are the "default" ruleset--they should always be addable to a round, if the round type allows antags and dynamic thinks there should be another. + /// MINOR_RULESET is for rulesets whose antags can have multiple instances without causing too much issue. As roundstarts, they have their weights reduced based on the storyteller's minor-antag-round chance. + /// FAKE_ANTAG_RULESET is for rulesets whose antags aren't actually antagonistic--essentially just flavor meant to spice the round up. + /// ALWAYS_MAX_WEIGHT_RULESET means that the ruleset doesn't have its weight reduced based on recency. var/flags = 0 /// Pop range per requirement. If zero defaults to mode's pop_per_requirement. var/pop_per_requirement = 0 @@ -82,9 +86,6 @@ var/delay = 0 /// List of tags for use in storytellers. var/list/property_weights = list() - /// Whether or not recent-round weight values are taken into account for this ruleset. - /// Weight reduction uses the same values as secret's recent-round mode weight reduction. - var/always_max_weight = FALSE /// Weight reduction by recent-rounds. Saved on new. var/weight_mult = 1 @@ -100,7 +101,7 @@ var/high_population_requirements = CONFIG_GET(keyed_list/dynamic_high_population_requirement) var/list/repeated_mode_adjust = CONFIG_GET(number_list/repeated_mode_adjust) if(config_tag in weights) - if(!always_max_weight && SSpersistence.saved_dynamic_rules.len == 3 && repeated_mode_adjust.len == 3) + if(!(flags & ALWAYS_MAX_WEIGHT_RULESET) && SSpersistence.saved_dynamic_rules.len == 3 && repeated_mode_adjust.len == 3) var/saved_dynamic_rules = SSpersistence.saved_dynamic_rules for(var/i in 1 to 3) if(config_tag in saved_dynamic_rules[i]) @@ -119,6 +120,9 @@ /datum/dynamic_ruleset/roundstart // One or more of those drafted at roundstart ruletype = "Roundstart" +/datum/dynamic_ruleset/minor // drafted at roundstart in minor rounds, one antag at a time, for a "mixed" round + ruletype = "Minor" + // Can be drafted when a player joins the server /datum/dynamic_ruleset/latejoin ruletype = "Latejoin" @@ -175,7 +179,7 @@ /// This is called if persistent variable is true everytime SSTicker ticks. /datum/dynamic_ruleset/proc/rule_process() return TRUE - + /// Called on game mode pre_setup for roundstart rulesets. /// Do everything you need to do before job is assigned here. /// IMPORTANT: ASSIGN special_role HERE diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm index d2fa8bcc70..7842c6e0f7 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm @@ -70,9 +70,8 @@ requirements = list(40,30,20,15,15,15,15,15,15,15) high_population_requirement = 15 repeatable = TRUE - flags = TRAITOR_RULESET + flags = TRAITOR_RULESET | MINOR_RULESET | ALWAYS_MAX_WEIGHT_RULESET property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 1) - always_max_weight = TRUE ////////////////////////////////////////////// // // @@ -207,6 +206,7 @@ weight = 4 cost = 25 requirements = list(60,60,60,55,50,50,50,50,50,50) + flags = MINOR_RULESET high_population_requirement = 50 property_weights = list("story_potential" = 1, "trust" = -1, "chaos" = 2, "extended" = -1, "valid" = 2) repeatable = TRUE @@ -229,6 +229,7 @@ cost = 10 property_weights = list("story_potential" = 2, "extended" = 2, "trust" = -2, "valid" = 1) requirements = list(70,65,60,55,50,45,40,35,30,30) + flags = MINOR_RULESET high_population_requirement = 30 repeatable = TRUE @@ -258,6 +259,7 @@ required_candidates = 1 weight = 3 cost = 15 + flags = MINOR_RULESET requirements = list(101,101,101,101,101,101,101,101,101,101) property_weights = list("trust" = -2, "valid" = 2) high_population_requirement = 101 @@ -281,5 +283,5 @@ requirements = list(10,10,10,10,10,10,10,10,10,10) high_population_requirement = 10 repeatable = TRUE - flags = TRAITOR_RULESET | MINOR_RULESET - property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 2) + flags = TRAITOR_RULESET | MINOR_RULESET | FAKE_ANTAG_RULESET + property_weights = list("story_potential" = 1, "trust" = -1, "extended" = 2) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index b29584aa58..416721702b 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -207,9 +207,8 @@ requirements = list(30,25,20,15,15,15,15,15,15,15) repeatable = TRUE high_population_requirement = 15 - flags = TRAITOR_RULESET + flags = TRAITOR_RULESET | MINOR_RULESET | ALWAYS_MAX_WEIGHT_RULESET property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 1) - always_max_weight = TRUE /datum/dynamic_ruleset/midround/autotraitor/acceptable(population = 0, threat = 0) var/player_count = mode.current_players[CURRENT_LIVING_PLAYERS].len @@ -494,6 +493,7 @@ required_candidates = 1 weight = 3 cost = 10 + flags = MINOR_RULESET requirements = list(101,101,101,70,50,40,20,15,15,15) high_population_requirement = 50 repeatable_weight_decrease = 2 @@ -630,6 +630,7 @@ required_candidates = 1 weight = 4 cost = 15 + flags = MINOR_RULESET requirements = list(101,101,101,90,80,70,60,50,40,30) high_population_requirement = 30 property_weights = list("story_potential" = 1, "extended" = -2, "valid" = 2) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_minor.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_minor.dm new file mode 100644 index 0000000000..618befbaa7 --- /dev/null +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_minor.dm @@ -0,0 +1,212 @@ + +////////////////////////////////////////////// +// // +// SYNDICATE TRAITORS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/minor/traitor + name = "Traitors" + config_tag = "traitor" // these having identical config tags to the roundstart modes is 100% intentional, so that config edits are simpler + persistent = TRUE + antag_flag = ROLE_TRAITOR + antag_datum = /datum/antagonist/traitor/ + minimum_required_age = 0 + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster", "Cyborg") + restricted_roles = list("Cyborg", "AI") + required_candidates = 1 + weight = 5 + flags = TRAITOR_RULESET | ALWAYS_MAX_WEIGHT_RULESET + cost = 10 // Avoid raising traitor threat above 10, as it is the default low cost ruleset. + requirements = list(50,50,50,50,50,50,50,50,50,50) + high_population_requirement = 40 + property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 1, "valid" = 1) + +/datum/dynamic_ruleset/minor/traitor/execute() + var/mob/M = pick_n_take(candidates) + assigned += M + var/datum/antagonist/traitor/newTraitor = new + M.mind.add_antag_datum(newTraitor) + log_admin("[M] was made into a traitor by dynamic.") + message_admins("[M] was made into a traitor by dynamic.") + return TRUE + +////////////////////////////////////////// +// // +// BLOOD BROTHERS // +// // +////////////////////////////////////////// + +/datum/dynamic_ruleset/minor/traitorbro + name = "Blood Brothers" + config_tag = "traitorbro" + antag_flag = ROLE_BROTHER + antag_datum = /datum/antagonist/brother + restricted_roles = list("AI", "Cyborg") + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + required_candidates = 2 + weight = 4 + cost = 10 + requirements = list(101,101,101,101,101,101,101,101,101,101) + high_population_requirement = 101 + antag_cap = list(2,2,2,2,2,2,2,2,2,2) // Can pick 3 per team, but rare enough it doesn't matter. + property_weights = list("story_potential" = 1, "trust" = -1, "extended" = 1, "valid" = 1) + var/list/datum/team/brother_team/pre_brother_teams = list() + var/const/min_team_size = 2 + +/datum/dynamic_ruleset/minor/traitorbro/execute() + if(candidates.len < min_team_size || candidates.len < required_candidates) + return FALSE + var/datum/team/brother_team/team = new + var/team_size = prob(10) ? min(3, candidates.len) : 2 + for(var/k = 1 to team_size) + var/mob/bro = pick_n_take(candidates) + assigned += bro.mind + team.add_member(bro.mind) + bro.mind.special_role = "brother" + bro.mind.restricted_roles = restricted_roles + team.pick_meeting_area() + team.forge_brother_objectives() + for(var/datum/mind/M in team.members) + M.add_antag_datum(/datum/antagonist/brother, team) + team.update_name() + mode.brother_teams += team + +////////////////////////////////////////////// +// // +// CHANGELINGS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/minor/changeling + name = "Changelings" + config_tag = "changeling" + antag_flag = ROLE_CHANGELING + antag_datum = /datum/antagonist/changeling + restricted_roles = list("AI", "Cyborg") + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + required_candidates = 1 + weight = 3 + cost = 15 + scaling_cost = 15 + requirements = list(101,101,101,101,101,101,101,101,101,101) + property_weights = list("trust" = -2, "valid" = 2) + high_population_requirement = 10 + antag_cap = list(1,1,1,1,1,2,2,2,2,3) + var/team_mode_probability = 30 + +/datum/dynamic_ruleset/minor/changeling/execute() + var/mob/M = pick_n_take(candidates) + assigned += M.mind + M.mind.restricted_roles = restricted_roles + M.mind.special_role = ROLE_CHANGELING + var/datum/antagonist/changeling/new_antag = new antag_datum() + M.mind.add_antag_datum(new_antag) + return TRUE + +////////////////////////////////////////////// +// // +// ELDRITCH CULT // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/minor/heretics + name = "Heretic" + antag_flag = "heretic" + antag_datum = /datum/antagonist/heretic + protected_roles = list("Prisoner","Security Officer", "Warden", "Detective", "Head of Security", "Captain") + restricted_roles = list("AI", "Cyborg") + required_candidates = 1 + weight = 3 + cost = 25 + scaling_cost = 15 + requirements = list(60,60,60,55,50,50,50,50,50,50) + property_weights = list("story_potential" = 1, "trust" = -1, "chaos" = 2, "extended" = -1, "valid" = 2) + antag_cap = list(1,1,1,1,2,2,2,2,3,3) + high_population_requirement = 50 + + +/datum/dynamic_ruleset/minor/heretics/pre_execute() + var/mob/picked_candidate = pick_n_take(candidates) + assigned += picked_candidate.mind + picked_candidate.mind.restricted_roles = restricted_roles + picked_candidate.mind.special_role = ROLE_HERETIC + var/datum/antagonist/heretic/new_antag = new antag_datum() + picked_candidate.mind.add_antag_datum(new_antag) + return TRUE + +////////////////////////////////////////////// +// // +// DEVIL // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/minor/devil + name = "Devil" + config_tag = "devil" + antag_flag = ROLE_DEVIL + antag_datum = /datum/antagonist/devil + restricted_roles = list("Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI") + required_candidates = 1 + weight = 3 + cost = 0 + requirements = list(101,101,101,101,101,101,101,101,101,101) + high_population_requirement = 101 + antag_cap = list(1,1,1,2,2,2,3,3,3,4) + property_weights = list("extended" = 1) + +/datum/dynamic_ruleset/minor/devil/pre_execute() + var/mob/devil = pick_n_take(candidates) + assigned += devil.mind + devil.mind.special_role = ROLE_DEVIL + devil.mind.restricted_roles = restricted_roles + + log_game("[key_name(devil)] has been selected as a devil") + add_devil(devil, ascendable = TRUE) + add_devil_objectives(devil.mind,2) + return TRUE + +/datum/dynamic_ruleset/minor/devil/proc/add_devil_objectives(datum/mind/devil_mind, quantity) + var/list/validtypes = list(/datum/objective/devil/soulquantity, /datum/objective/devil/soulquality, /datum/objective/devil/sintouch, /datum/objective/devil/buy_target) + var/datum/antagonist/devil/D = devil_mind.has_antag_datum(/datum/antagonist/devil) + for(var/i = 1 to quantity) + var/type = pick(validtypes) + var/datum/objective/devil/objective = new type(null) + objective.owner = devil_mind + D.objectives += objective + if(!istype(objective, /datum/objective/devil/buy_target)) + validtypes -= type + else + objective.find_target() + +////////////////////////////////////////////// +// // +// BLOODSUCKERS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/minor/bloodsucker + name = "Bloodsuckers" + config_tag = "bloodsucker" + antag_flag = ROLE_BLOODSUCKER + antag_datum = ANTAG_DATUM_BLOODSUCKER + minimum_required_age = 0 + protected_roles = list("Chaplain", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + restricted_roles = list("Cyborg", "AI") + required_candidates = 1 + weight = 2 + cost = 15 + scaling_cost = 10 + property_weights = list("story_potential" = 1, "extended" = 1, "trust" = -2, "valid" = 1) + requirements = list(70,65,60,55,50,50,50,50,50,50) + high_population_requirement = 50 + +/datum/dynamic_ruleset/minor/bloodsucker/execute() + var/mob/M = pick_n_take(candidates) + assigned += M.mind + M.mind.special_role = ROLE_BLOODSUCKER + M.mind.restricted_roles = restricted_roles + mode.check_start_sunlight() + if(mode.make_bloodsucker(M.mind)) + mode.bloodsuckers += M.mind + return TRUE diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index db4ec99558..c5e0857461 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -15,6 +15,7 @@ protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster", "Cyborg") restricted_roles = list("Cyborg", "AI") required_candidates = 1 + flags = TRAITOR_RULESET | MINOR_RULESET | ALWAYS_MAX_WEIGHT_RULESET weight = 5 cost = 10 // Avoid raising traitor threat above 10, as it is the default low cost ruleset. scaling_cost = 10 @@ -22,7 +23,6 @@ high_population_requirement = 40 antag_cap = list(1,1,1,1,2,2,2,2,3,3) property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 1, "valid" = 1) - always_max_weight = TRUE var/autotraitor_cooldown = 450 // 15 minutes (ticks once per 2 sec) /datum/dynamic_ruleset/roundstart/traitor/pre_execute() @@ -57,6 +57,7 @@ restricted_roles = list("AI", "Cyborg") protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") required_candidates = 2 + flags = MINOR_RULESET weight = 4 cost = 10 requirements = list(101,101,101,101,101,101,101,101,101,101) @@ -106,6 +107,7 @@ restricted_roles = list("AI", "Cyborg") protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") required_candidates = 1 + flags = MINOR_RULESET weight = 3 cost = 15 scaling_cost = 15 @@ -156,6 +158,7 @@ protected_roles = list("Prisoner","Security Officer", "Warden", "Detective", "Head of Security", "Captain") restricted_roles = list("AI", "Cyborg") required_candidates = 1 + flags = MINOR_RULESET weight = 3 cost = 25 scaling_cost = 15 @@ -694,6 +697,7 @@ antag_datum = /datum/antagonist/devil restricted_roles = list("Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI") required_candidates = 1 + flags = MINOR_RULESET weight = 3 cost = 0 requirements = list(101,101,101,101,101,101,101,101,101,101) @@ -850,6 +854,7 @@ protected_roles = list("Chaplain", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") restricted_roles = list("Cyborg", "AI") required_candidates = 1 + flags = MINOR_RULESET weight = 2 cost = 15 scaling_cost = 10 diff --git a/code/game/gamemodes/dynamic/dynamic_storytellers.dm b/code/game/gamemodes/dynamic/dynamic_storytellers.dm index 04e295356a..d5766b287e 100644 --- a/code/game/gamemodes/dynamic/dynamic_storytellers.dm +++ b/code/game/gamemodes/dynamic/dynamic_storytellers.dm @@ -32,6 +32,9 @@ Property weights are added to the config weight of the ruleset. They are: "conversion" -- Basically a bool. Conversion antags, well, convert. It's in its own class 'cause people kinda hate conversion. */ +/datum/dynamic_storyteller/proc/minor_start_chance() + return clamp(60 - mode.threat_level,0,100) // by default higher threat = lower chance of minor round + /datum/dynamic_storyteller/proc/start_injection_cooldowns() var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_latejoin_delay_max + GLOB.dynamic_first_latejoin_delay_min) mode.latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_first_latejoin_delay_min, GLOB.dynamic_first_latejoin_delay_max)) + world.time @@ -104,8 +107,27 @@ Property weights are added to the config weight of the ruleset. They are: /datum/dynamic_storyteller/proc/roundstart_draft() var/list/drafted_rules = list() + var/minor_round_weight_mult = (100-minor_start_chance()) / 100 for (var/datum/dynamic_ruleset/roundstart/rule in mode.roundstart_rules) if (rule.acceptable(mode.roundstart_pop_ready, mode.threat_level)) // If we got the population and threat required + rule.candidates = mode.candidates.Copy() + rule.trim_candidates() + if (rule.ready() && rule.candidates.len > 0) + var/property_weight = 0 + for(var/property in property_weights) + if(property in rule.property_weights) // just treat it as 0 if it's not in there + property_weight += rule.property_weights[property] * property_weights[property] + var/calced_weight = (rule.get_weight() + property_weight) * rule.weight_mult + if(CHECK_BITFIELD(rule.flags, MINOR_RULESET)) + calced_weight *= minor_round_weight_mult + if(calced_weight > 0) // negatives in the list might cause problems + drafted_rules[rule] = calced_weight + return drafted_rules + +/datum/dynamic_storyteller/proc/minor_rule_draft() + var/list/drafted_rules = list() + for (var/datum/dynamic_ruleset/minor/rule in mode.minor_rules) + if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level)) rule.candidates = mode.candidates.Copy() rule.trim_candidates() if (rule.ready() && rule.candidates.len > 0) @@ -124,7 +146,7 @@ Property weights are added to the config weight of the ruleset. They are: // if there are antags OR the rule is an antag rule, antag_acceptable will be true. if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level)) // Classic secret : only autotraitor/minor roles - if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))) + if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET))) continue rule.trim_candidates() if (rule.ready()) @@ -133,7 +155,7 @@ Property weights are added to the config weight of the ruleset. They are: if(property in rule.property_weights) // just treat it as 0 if it's not in there property_weight += rule.property_weights[property] * property_weights[property] var/threat_weight = 1 - if(!(rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)) // makes the traitor rulesets always possible anyway + if(!(rule.flags & TRAITOR_RULESET)) // makes the traitor rulesets always possible anyway var/cost_difference = rule.cost-(mode.threat_level-mode.threat) /* Basically, the closer the cost is to the current threat-level-away-from-threat, the more likely it is to pick this particular ruleset. @@ -157,7 +179,7 @@ Property weights are added to the config weight of the ruleset. They are: for (var/datum/dynamic_ruleset/latejoin/rule in mode.latejoin_rules) if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level - mode.threat)) // Classic secret : only autotraitor/minor roles - if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))) + if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET))) continue // No stacking : only one round-ender, unless threat level > stacking_limit. if (mode.threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking) @@ -172,7 +194,7 @@ Property weights are added to the config weight of the ruleset. They are: if(property in rule.property_weights) property_weight += rule.property_weights[property] * property_weights[property] var/threat_weight = 1 - if(!(rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)) + if(!(rule.flags & TRAITOR_RULESET)) var/cost_difference = rule.cost-(mode.threat_level-mode.threat) threat_weight = 1-abs(1-(LOGISTIC_FUNCTION(2,0.05,abs(cost_difference),0))) if(cost_difference > 0) @@ -195,6 +217,9 @@ Property weights are added to the config weight of the ruleset. They are: min_players = 30 var/refund_cooldown = 0 +/datum/dynamic_storyteller/chaotic/minor_start_chance() + return 0 + /datum/dynamic_storyteller/chaotic/do_process() if(refund_cooldown < world.time) mode.create_threat(20) @@ -215,6 +240,9 @@ Property weights are added to the config weight of the ruleset. They are: flags = WAROPS_ALWAYS_ALLOWED | USE_PREV_ROUND_WEIGHTS property_weights = list("valid" = 3, "trust" = 5) +/datum/dynamic_storyteller/chaotic/minor_start_chance() + return 0 + /datum/dynamic_storyteller/team/should_inject_antag(dry_run = FALSE) return (mode.current_players[CURRENT_LIVING_ANTAGS].len ? FALSE : ..()) @@ -228,6 +256,9 @@ Property weights are added to the config weight of the ruleset. They are: flags = WAROPS_ALWAYS_ALLOWED property_weights = list("valid" = 1, "conversion" = 20) +/datum/dynamic_storyteller/chaotic/minor_start_chance() + return 0 + /datum/dynamic_storyteller/random name = "Random" config_tag = "random" @@ -244,6 +275,9 @@ Property weights are added to the config weight of the ruleset. They are: /datum/dynamic_storyteller/random/should_inject_antag() return prob(50) +/datum/dynamic_storyteller/chaotic/minor_start_chance() + return 20 + /datum/dynamic_storyteller/random/roundstart_draft() var/list/drafted_rules = list() for (var/datum/dynamic_ruleset/roundstart/rule in mode.roundstart_rules) @@ -254,12 +288,22 @@ Property weights are added to the config weight of the ruleset. They are: drafted_rules[rule] = 1 return drafted_rules +/datum/dynamic_storyteller/random/minor_rule_draft() + var/list/drafted_rules = list() + for (var/datum/dynamic_ruleset/minor/rule in mode.minor_rules) + if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level)) + rule.candidates = mode.candidates.Copy() + rule.trim_candidates() + if (rule.ready() && rule.candidates.len > 0) + drafted_rules[rule] = 1 + return drafted_rules + /datum/dynamic_storyteller/random/midround_draft() var/list/drafted_rules = list() for (var/datum/dynamic_ruleset/midround/rule in mode.midround_rules) if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level)) // Classic secret : only autotraitor/minor roles - if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))) + if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET))) continue rule.trim_candidates() if (rule.ready()) @@ -271,7 +315,7 @@ Property weights are added to the config weight of the ruleset. They are: for (var/datum/dynamic_ruleset/latejoin/rule in mode.latejoin_rules) if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level)) // Classic secret : only autotraitor/minor roles - if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))) + if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET))) continue // No stacking : only one round-ender, unless threat level > stacking_limit. if (mode.threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking) @@ -286,7 +330,7 @@ Property weights are added to the config weight of the ruleset. They are: /datum/dynamic_storyteller/story name = "Story" config_tag = "story" - desc = "Antags with options for loadouts and gimmicks. Traitor, wizard, nukies. Has a buildup-climax-falling action threat curve." + desc = "Antags with options for loadouts and gimmicks. Traitor, wizard, nukies." weight = 2 curve_width = 2 flags = USE_PREV_ROUND_WEIGHTS @@ -308,6 +352,19 @@ Property weights are added to the config weight of the ruleset. They are: flags = USE_PREV_ROUND_WEIGHTS property_weights = list("trust" = -2) +/datum/dynamic_storyteller/intrigue/minor_start_chance() + return 100 - mode.threat_level + +/datum/dynamic_storyteller/grabbag + name = "Grab Bag" + config_tag = "grabbag" + desc = "Crew antags (e.g. traitor, changeling, bloodsucker, heretic) only, all mixed together." + weight = 2 + flags = USE_PREF_WEIGHTS | USE_PREV_ROUND_WEIGHTS + +/datum/dynamic_storyteller/grabbag/minor_start_chance() + return 100 + /datum/dynamic_storyteller/liteextended name = "Calm" config_tag = "calm" @@ -319,6 +376,9 @@ Property weights are added to the config weight of the ruleset. They are: dead_player_weight = 5 property_weights = list("extended" = 2, "chaos" = -1, "valid" = -1, "conversion" = -10) +/datum/dynamic_storyteller/liteextended/minor_start_chance() + return 100 + /datum/dynamic_storyteller/no_antag name = "Extended" config_tag = "semiextended" diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index da82b0afc7..f46169f72e 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -114,7 +114,7 @@ GLOBAL_LIST_EMPTY(announcement_systems) . = ..() if(.) return - if(!usr.canUseTopic(src, !issilicon(usr))) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr))) return if(stat & BROKEN) visible_message("[src] buzzes.", "You hear a faint buzz.") @@ -147,7 +147,7 @@ GLOBAL_LIST_EMPTY(announcement_systems) . = attack_ai(user) /obj/machinery/announcement_system/attack_ai(mob/user) - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user))) return if(stat & BROKEN) to_chat(user, "[src]'s firmware appears to be malfunctioning!") @@ -167,7 +167,9 @@ GLOBAL_LIST_EMPTY(announcement_systems) act_up() /obj/machinery/announcement_system/emag_act() + . = ..() if(obj_flags & EMAGGED) return obj_flags |= EMAGGED act_up() + return TRUE diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 401d05da12..9b911e9c15 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -21,6 +21,9 @@ return if(R.scrambledcodes) return + if(hasSiliconAccessInArea(user) && !issilicon(user)) + if(!Adjacent(user)) + return return TRUE /obj/machinery/computer/robotics/ui_interact(mob/user, datum/tgui/ui) @@ -40,6 +43,10 @@ else if(IsAdminGhost(user)) data["can_hack"] = TRUE + data["can_convert"] = FALSE + if(isAI(user) && is_servant_of_ratvar(user)) + data["can_convert"] = TRUE + data["cyborgs"] = list() for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs) if(!can_control(user, R)) @@ -54,6 +61,7 @@ module = R.module ? "[R.module.name] Module" : "No Module Detected", synchronization = R.connected_ai, emagged = R.emagged, + servant = is_servant_of_ratvar(R), ref = REF(R) ) data["cyborgs"] += list(cyborg_data) @@ -110,6 +118,13 @@ log_game("[key_name(usr)] emagged [key_name(R)] using robotic console!") message_admins("[ADMIN_LOOKUPFLW(usr)] emagged cyborg [key_name_admin(R)] using robotic console!") R.SetEmagged(TRUE) + if("convert") + if(isAI(usr) && is_servant_of_ratvar(usr)) + var/mob/living/silicon/robot/R = locate(params["ref"]) in GLOB.silicon_mobs + if(istype(R) && !is_servant_of_ratvar(R) && R.connected_ai == usr) + log_game("[key_name(usr)] converted [key_name(R)] using robotic console!") + message_admins("[ADMIN_LOOKUPFLW(usr)] converted cyborg [key_name_admin(R)] using robotic console!") + add_servant_of_ratvar(R) if("killdrone") if(allowed(usr)) var/mob/living/simple_animal/drone/D = locate(params["ref"]) in GLOB.mob_list diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index e721e986d2..0dcb0e7235 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -32,6 +32,8 @@ . = ..() if(in_range(user, src) || isobserver(user)) . += "The status display reads: Radiation pulse accuracy increased by factor [precision_coeff**2].
Radiation pulse damage decreased by factor [damage_coeff**2].
" + if(scan_level >= 3) + . += "Scanner has been upgraded to support autoprocessing." /obj/machinery/dna_scannernew/update_icon_state() //no power or maintenance @@ -94,6 +96,13 @@ ..(user) +// search for ghosts, if the corpse is empty and the scanner is connected to a cloner + var/mob/living/mob_occupant = get_mob_or_brainmob(occupant) + if(istype(mob_occupant)) + if(locate_computer(/obj/machinery/computer/cloning)) + if(!mob_occupant.suiciding && !(HAS_TRAIT(mob_occupant, TRAIT_NOCLONE)) && !mob_occupant.hellbound) + mob_occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src) + // DNA manipulators cannot operate on severed heads or brains if(iscarbon(occupant)) if(linked_console) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 515a4672a5..9ef34390f6 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1457,6 +1457,16 @@ ui.open() return TRUE +/obj/machinery/door/airlock/ui_status(mob/user) + . = ..() + if (!issilicon(user) && hasSiliconAccessInArea(user)) + . = UI_INTERACTIVE + +/obj/machinery/door/airlock/can_interact(mob/user) + . = ..() + if (!issilicon(user) && hasSiliconAccessInArea(user)) + return TRUE + /obj/machinery/door/airlock/ui_data() var/list/data = list() diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index fe2bdf90b1..8941c540ae 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -508,7 +508,7 @@ /obj/machinery/door/airlock/cult/allowed(mob/living/L) if(!density) return 1 - if(friendly || iscultist(L) || istype(L, /mob/living/simple_animal/shade) || isconstruct(L)) + if(friendly || iscultist(L) || isshade(L) || isconstruct(L)) if(!stealthy) new openingoverlaytype(loc) return 1 diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 4777796331..ecc8f9187a 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -616,7 +616,7 @@ if(defib.healdisk) H.heal_overall_damage(25, 25) var/list/policies = CONFIG_GET(keyed_list/policyconfig) - var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) + var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds var/late = timelimit && (tplus > timelimit) var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT] if(policy) diff --git a/code/game/objects/items/gift.dm b/code/game/objects/items/gift.dm index 8054d8c6a4..35a68cecc6 100644 --- a/code/game/objects/items/gift.dm +++ b/code/game/objects/items/gift.dm @@ -8,6 +8,14 @@ * Gifts */ +/var/static/blacklisted_items = typecacheof(list( + /obj/effect, + /obj/belly, + /obj/mafia_game_board, + /obj/docking_port, + /obj/shapeshift_holder, + /obj/screen)) + GLOBAL_LIST_EMPTY(possible_gifts) /obj/item/a_gift @@ -95,7 +103,7 @@ GLOBAL_LIST_EMPTY(possible_gifts) var/list/gift_types_list = subtypesof(/obj/item) for(var/V in gift_types_list) var/obj/item/I = V - if((!initial(I.icon_state)) || (!initial(I.item_state)) || (initial(I.item_flags) & ABSTRACT)) + if((!initial(I.icon_state)) || (!initial(I.item_state)) || (initial(I.item_flags) & ABSTRACT) || (is_type_in_typecache(I, blacklisted_items))) gift_types_list -= V GLOB.possible_gifts = gift_types_list var/gift_type = pick(GLOB.possible_gifts) diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index 58146be20f..a15e1368d8 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -492,7 +492,7 @@ var/possessed = FALSE /obj/item/nullrod/scythe/talking/process() - for(var/mob/living/simple_animal/shade/S in contents) + for(var/mob/living/simple_animal/hostile/construct/shade/S in contents) if(S.mind) return else @@ -516,7 +516,7 @@ if(LAZYLEN(candidates)) var/mob/C = pick(candidates) - var/mob/living/simple_animal/shade/S = new(src) + var/mob/living/simple_animal/hostile/construct/shade/S = new(src) S.real_name = name S.name = name S.ckey = C.ckey @@ -537,7 +537,7 @@ possessed = FALSE /obj/item/nullrod/scythe/talking/Destroy() - for(var/mob/living/simple_animal/shade/S in contents) + for(var/mob/living/simple_animal/hostile/construct/shade/S in contents) to_chat(S, "You were destroyed!") qdel(S) return ..() diff --git a/code/game/objects/items/implants/implant_hijack.dm b/code/game/objects/items/implants/implant_hijack.dm index 36e58d8887..06d2df9272 100644 --- a/code/game/objects/items/implants/implant_hijack.dm +++ b/code/game/objects/items/implants/implant_hijack.dm @@ -92,10 +92,17 @@ /obj/item/implant/hijack/proc/hijack_remotely(obj/machinery/power/apc/apc) if (apc.hijacker || hijacking) return FALSE //can't remotely hijack an already hijacked APC + + if(apc.being_hijacked) + to_chat(imp_in, "This APC is already being hijacked!") + return FALSE + + apc.being_hijacked = TRUE hijacking = TRUE to_chat(imp_in, "Establishing remote connection with APC.") if (!do_after(imp_in, 4 SECONDS,target=apc)) to_chat(imp_in, "Aborting.") + apc.being_hijacked = FALSE hijacking = FALSE return TRUE if (LAZYLEN(imp_in.siliconaccessareas) >= HIJACK_APC_MAX_AMOUNT) @@ -118,6 +125,7 @@ toggle_eyes() else to_chat(imp_in, "Aborting.") + apc.being_hijacked = FALSE hijacking = FALSE imp_in.light_power = 0 imp_in.light_range = 0 diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index e2e0779b53..f15a4d00e1 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -150,8 +150,8 @@ item_state = "knife" desc = "A military combat utility survival knife." embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE) - force = 20 - throwforce = 20 + force = 16 + throwforce = 16 attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") bayonet = TRUE diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index 244b8c804b..476f35fe4c 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -198,7 +198,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", if(istype(A, /obj/item/cult_bastard)) for(var/obj/item/soulstone/SS in A.contents) SS.usability = TRUE - for(var/mob/living/simple_animal/shade/EX in SS) + for(var/mob/living/simple_animal/hostile/construct/shade/EX in SS) SSticker.mode.remove_cultist(EX.mind, 1, 0) EX.icon_state = "ghost1" EX.name = "Purified [EX.name]" @@ -217,7 +217,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", if(do_after(user, 40, target = SS)) playsound(src,'sound/effects/pray_chaplain.ogg',60,1) SS.usability = TRUE - for(var/mob/living/simple_animal/shade/EX in SS) + for(var/mob/living/simple_animal/hostile/construct/shade/EX in SS) SSticker.mode.remove_cultist(EX.mind, 1, 0) EX.icon_state = "ghost1" EX.name = "Purified [EX.name]" diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index d35dad9f08..8e4fb05d71 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -21,6 +21,9 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) resistance_flags = FIRE_PROOF + var/self_fueling = FALSE //Do we refill ourselves or not + var/nextrefueltick = 0 // How long it takes before we get a new fuel unit + custom_materials = list(/datum/material/iron=70, /datum/material/glass=30) var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2) var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower) @@ -82,12 +85,18 @@ //This is to start fires. process() is only called if the welder is on. open_flame() + //This handles refueling. Its looking at how much fuel the tool has and comparing that to how much it holds + //This then looks if the refuel tick has come based on world time. + //Then looks if we refuel ourselves or not. + + if(get_fuel() < max_fuel && nextrefueltick < world.time && self_fueling) + nextrefueltick = world.time + 10 + reagents.add_reagent(/datum/reagent/fuel, 1) /obj/item/weldingtool/suicide_act(mob/user) user.visible_message("[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide!") return (FIRELOSS) - /obj/item/weldingtool/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/screwdriver)) flamethrower_screwdriver(I, user) @@ -318,7 +327,6 @@ /obj/item/weldingtool/largetank/flamethrower_screwdriver() return - /obj/item/weldingtool/mini name = "emergency welding tool" desc = "A miniature welder used during emergencies." @@ -331,20 +339,6 @@ /obj/item/weldingtool/mini/flamethrower_screwdriver() return -/obj/item/weldingtool/abductor - name = "alien welding tool" - desc = "An alien welding tool. Whatever fuel it uses, it never runs out." - icon = 'icons/obj/abductor.dmi' - icon_state = "welder" - toolspeed = 0.1 - light_intensity = 0 - change_icons = 0 - -/obj/item/weldingtool/abductor/process() - if(get_fuel() <= max_fuel) - reagents.add_reagent(/datum/reagent/fuel, 1) - ..() - /obj/item/weldingtool/hugetank name = "upgraded industrial welding tool" desc = "An upgraded welder based of the industrial welder." @@ -353,27 +347,6 @@ max_fuel = 80 custom_materials = list(/datum/material/iron=70, /datum/material/glass=120) -/obj/item/weldingtool/experimental - name = "experimental welding tool" - desc = "An experimental welder capable of self-fuel generation and less harmful to the eyes." - icon_state = "exwelder" - item_state = "exwelder" - max_fuel = 40 - custom_materials = list(/datum/material/iron=70, /datum/material/glass=120) - var/last_gen = 0 - change_icons = 0 - can_off_process = 1 - light_intensity = 1 - toolspeed = 0.5 - var/nextrefueltick = 0 - -/obj/item/weldingtool/experimental/brass - name = "brass welding tool" - desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch." - resistance_flags = FIRE_PROOF | ACID_PROOF - icon_state = "clockwelder" - item_state = "brasswelder" - /obj/item/weldingtool/bronze name = "bronze plated welding tool" desc = "A bronze plated welder." @@ -382,24 +355,46 @@ icon_state = "brasswelder" item_state = "brasswelder" -/obj/item/weldingtool/experimental/process() - ..() - if(get_fuel() < max_fuel && nextrefueltick < world.time) - nextrefueltick = world.time + 10 - reagents.add_reagent(/datum/reagent/fuel, 1) +//Self filling welders below + +/obj/item/weldingtool/experimental + name = "experimental welding tool" + desc = "An experimental welder capable of self-fuel generation and less harmful to the eyes." + icon_state = "exwelder" + item_state = "exwelder" + max_fuel = 40 + custom_materials = list(/datum/material/iron=70, /datum/material/glass=120) + change_icons = 0 + self_fueling = TRUE + can_off_process = 1 + light_intensity = 1 + toolspeed = 0.5 + +/obj/item/weldingtool/experimental/brass + name = "brass welding tool" + desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch." + resistance_flags = FIRE_PROOF | ACID_PROOF + icon_state = "clockwelder" + item_state = "brasswelder" + +/obj/item/weldingtool/abductor + name = "alien welding tool" + desc = "An alien welding tool. Whatever fuel it uses, it never runs out." + icon = 'icons/obj/abductor.dmi' + icon_state = "welder" + self_fueling = TRUE + toolspeed = 0.1 + light_intensity = 0 + change_icons = 0 /obj/item/weldingtool/advanced name = "advanced welding tool" desc = "A modern welding tool combined with an alien welding tool, it never runs out of fuel and works almost as fast." icon = 'icons/obj/advancedtools.dmi' icon_state = "welder" + self_fueling = TRUE toolspeed = 0.2 light_intensity = 0 change_icons = 0 -/obj/item/weldingtool/advanced/process() - if(get_fuel() <= max_fuel) - reagents.add_reagent(/datum/reagent/fuel, 1) - ..() - #undef WELDER_FUEL_BURN_INTERVAL diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 03376df905..ad8dd168eb 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -508,7 +508,7 @@ if("constructwraith") M.change_mob_type( /mob/living/simple_animal/hostile/construct/wraith , null, null, delmob ) if("shade") - M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob ) + M.change_mob_type( /mob/living/simple_animal/hostile/construct/shade , null, null, delmob ) /////////////////////////////////////new ban stuff diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 05c265bc15..7a227ebc4e 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -684,10 +684,10 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 35, "bio" = 35, "rad" = 35, "fire" = 0, "acid" = 0) - enhancement = 9 // first, do harm. all of it. all of the harm. just fuck em up. - wound_enhancement = 9 - var/fast_enhancement = 9 - var/fast_wound_enhancement = 9 + enhancement = 6 // first, do harm. all of it. all of the harm. just fuck em up. + wound_enhancement = 6 + var/fast_enhancement = 6 + var/fast_wound_enhancement = 6 var/slow_enhancement = 20 var/slow_wound_enhancement = 20 silent = TRUE diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm index 454870d1e1..ebb6ff5b83 100644 --- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm +++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm @@ -216,6 +216,14 @@ else if(get_clockwork_power()) to_chat(L, "You feel a slight, static shock.") +/obj/effect/clockwork/sigil/transmission/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + +/obj/effect/clockwork/sigil/transmission/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + /obj/effect/clockwork/sigil/transmission/process() var/power_drained = 0 var/power_mod = 0.005 diff --git a/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm b/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm index 1d65cf9209..76738ab1de 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm @@ -1,41 +1,57 @@ -//horrifying power drain proc made for clockcult's power drain in lieu of six istypes or six for(x in view) loops -/atom/movable/proc/power_drain(clockcult_user, drain_weapons = FALSE) //This proc as of now is only in use for void volt +/* +horrifying power drain proc made for clockcult's power drain in lieu of six istypes or six for(x in view) loops +args: +clockcult_user: If the user / source has to do with clockcult stuff +drain_weapons: If this drains weaponry, such as batons and guns +recursive: If this recurses through mob / storage contents. ONLY USE THIS IF IT'S NOT CALLED TOO FREQUENTLY, or I'm not liable for any lag / functional issues caused +drain_amount: How much is drained by default; Influenced by a multiplier on most things depending on how much power they usually hold. +*/ +/atom/movable/proc/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER) //This proc as of now is only in use for void volt and transmission sigils + if(recursive) + var/succ = 0 + for(var/V in contents) + var/atom/movable/target = V + succ += target.power_drain(clockcult_user, drain_weapons, recursive, drain_amount) + return succ var/obj/item/stock_parts/cell/cell = get_cell() if(cell) - return cell.power_drain(clockcult_user) + return cell.power_drain(clockcult_user, drain_weapons, recursive, drain_amount) return 0 //Returns 0 instead of FALSE to symbolise it returning the power amount in other cases, not TRUE aka 1 -/obj/item/melee/baton/power_drain(clockcult_user, drain_weapons = FALSE) //balance memes +/obj/item/melee/baton/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER) //balance memes if(!drain_weapons) return 0 - return ..() + var/obj/item/stock_parts/cell/cell = get_cell() + if(cell) + return cell.power_drain(clockcult_user, drain_weapons, recursive, drain_amount) + return 0 //No need to recurse further in batons -/obj/item/gun/power_drain(clockcult_user, drain_weapons = FALSE) //balance memes +/obj/item/gun/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER) //balance memes if(!drain_weapons) return 0 var/obj/item/stock_parts/cell/cell = get_cell() if(!cell) return 0 if(cell.charge) - . = min(cell.charge, MIN_CLOCKCULT_POWER*4) //Done snowflakey because guns have far smaller cells than batons / other equipment + . = min(cell.charge, drain_amount*4) //Done snowflakey because guns have far smaller cells than batons / other equipment, also no need to recurse further in guns cell.use(.) update_icon() -/obj/machinery/power/apc/power_drain(clockcult_user, drain_weapons = FALSE) +/obj/machinery/power/apc/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER) if(cell && cell.charge) playsound(src, "sparks", 50, 1) flick("apc-spark", src) - . = min(cell.charge, MIN_CLOCKCULT_POWER*4) - cell.use(.) //Better than a power sink! + . = min(cell.charge, drain_amount*4) + cell.use(min(cell.charge, . * 4)) //Better than a power sink! if(!cell.charge && !shorted) shorted = 1 visible_message("The [name]'s screen blurs with static.") update() update_icon() -/obj/machinery/power/smes/power_drain(clockcult_user, drain_weapons = FALSE) +/obj/machinery/power/smes/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER) if(charge) - . = min(charge, MIN_CLOCKCULT_POWER*4) + . = min(charge, drain_amount*4) charge -= . * 50 if(!charge && !panel_open) panel_open = TRUE @@ -44,20 +60,26 @@ visible_message("[src]'s panel flies open with a flurry of sparks!") update_icon() -/obj/item/stock_parts/cell/power_drain(clockcult_user, drain_weapons = FALSE) +/obj/item/stock_parts/cell/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER) if(charge) - . = min(charge, MIN_CLOCKCULT_POWER * 4) //Done like this because normal cells are usually quite a bit bigger than the ones used in guns / APCs + . = min(charge, drain_amount * 4) //Done like this because normal cells are usually quite a bit bigger than the ones used in guns / APCs use(min(charge, . * 10)) //Usually cell-powered equipment that is not a gun has at least ten times the capacity of a gun / 5 times the amount of an APC. This adjusts the drain to account for that. update_icon() -/mob/living/silicon/robot/power_drain(clockcult_user, drain_weapons = FALSE) +/mob/living/silicon/robot/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER) if((!clockcult_user || !is_servant_of_ratvar(src)) && cell && cell.charge) - . = min(cell.charge, MIN_CLOCKCULT_POWER*4) + . = min(cell.charge, drain_amount*8) //Silicons are very susceptible to Ratvar's might cell.use(.) spark_system.start() -/obj/mecha/power_drain(clockcult_user, drain_weapons = FALSE) - if((!clockcult_user || (occupant && !is_servant_of_ratvar(occupant))) && cell && cell.charge) - . = min(cell.charge, MIN_CLOCKCULT_POWER*4) - cell.use(.) - spark_system.start() +/obj/mecha/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER) + if(!clockcult_user || (occupant && !is_servant_of_ratvar(occupant))) + if(recursive) + var/succ = 0 + for(var/atom/movable/target in contents) //Hiding in your mech won't save you. + succ += target.power_drain(clockcult_user, drain_weapons, recursive, drain_amount) + . = succ + else if(cell && cell.charge) + . = min(cell.charge, drain_amount*4) + cell.use(.) + spark_system.start() diff --git a/code/modules/antagonists/clockcult/clock_scripture.dm b/code/modules/antagonists/clockcult/clock_scripture.dm index a85245e9d0..aa0f7f03fa 100644 --- a/code/modules/antagonists/clockcult/clock_scripture.dm +++ b/code/modules/antagonists/clockcult/clock_scripture.dm @@ -167,7 +167,7 @@ Judgement 5 converts set waitfor = FALSE chanting = TRUE for(var/invocation in invocations) - sleep(channel_time / invocations.len) + sleep(channel_time / (invocations.len + 1)) //So it always finishes the invocation if(QDELETED(src) || QDELETED(slab) || !chanting) return if(multiple_invokers_used) diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm index eaec652f68..b559b34d5e 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm @@ -393,45 +393,49 @@ Left-click a target to fire, quickly!" timeout_time = 20 -/datum/clockwork_scripture/channeled/void_volt - descname = "Channeled, Power Drain" +/datum/clockwork_scripture/void_volt + descname = "Pulse, Power Drain" name = "Void Volt" - desc = "A channeled spell that quickly drains any powercells in a radius of eight tiles, but burns the invoker. \ - Can be channeled with more cultists to increase range and split the caused damage evenly over all invokers. \ + desc = "A spell that releases a pulse which drains the power of anything in a radius of eight tiles, but burns the invoker. \ + Can be used with more servants to increase range and split the caused damage evenly among all invokers. \ Also charges clockwork power by a small percentage of the drained power amount, which can help offset this scriptures powercost." - invocations = list("Channel their energy through my body... ", "... so it may fuel Engine!") - chant_invocations = list("Make their lights fall dark!", "They shall be powerless!", "Rob them of their power!") - chant_amount = 20 - chant_interval = 10 //100KW drain per pulse for guns / APCs / 1MW for other cells = 10 chants / 100ds / 10s to drain a charged weapon or a baton with a nonupgraded cell - channel_time = 50 - power_cost = 300 + invocations = list("Take the energy...", "...of their inventions...", "...and grant it to Engine...", "...for they already live in utter darkness!") + channel_time = 130 //You need alot of time, but it pays off. - ten times as powerful as a regular drain (done by transmission sigils) and recurses + affects weapons - incredibly useful if you can pull this off before a big fight. + power_cost = 500 //Relatively medium powercost, but can be offset due to it adding a part of drained power to the power pool. multiple_invokers_used = TRUE multiple_invokers_optional = TRUE - usage_tip = "It may be useful to end channelling early if the burning becomes too much to handle.." + usage_tip = "Be sure to not be injured when using this, or the power channeled through you may overwhelm your body." tier = SCRIPTURE_SCRIPT primary_component = GEIS_CAPACITOR sort_priority = 11 quickbind = TRUE - quickbind_desc = "Quickly drains power in an area around the invoker, causing burns proportional to the amount of energy drained.
Maximum of 20 chants." + quickbind_desc = "Quickly drains power in an area around the invoker, causing burns proportional to the amount of energy drained." -/datum/clockwork_scripture/channeled/void_volt/scripture_effects() +/datum/clockwork_scripture/void_volt/chant() invoker.visible_message("[invoker] glows in a brilliant golden light!") invoker.add_atom_colour("#FFD700", ADMIN_COLOUR_PRIORITY) invoker.light_power = 2 invoker.light_range = 4 invoker.light_color = LIGHT_COLOR_FIRE invoker.update_light() - return ..() + addtimer(CALLBACK(invoker, /mob.proc/stop_void_volt_glow), channel_time) + ..()//Do the timer & Chant +/mob/proc/stop_void_volt_glow() //Needed so the scripture being qdel()d doesn't prevent it. + visible_message("[src] stops glowing...") + remove_atom_colour(ADMIN_COLOUR_PRIORITY) + light_power = 0 + light_range = 0 + update_light() -/datum/clockwork_scripture/channeled/void_volt/chant_effects(chant_number) +/datum/clockwork_scripture/void_volt/scripture_effects() var/power_drained = 0 var/power_mod = 0.005 //Amount of power drained (generally) is multiplied with this, and subsequently dealt in damage to the invoker, then 15 times that is added to the clockwork cult's power reserves. - var/drain_range = 8 + var/drain_range = 12 var/additional_chanters = 0 var/list/chanters = list() chanters += invoker - for(var/mob/living/L in range(1, invoker)) + for(var/mob/living/L in orange(1, invoker)) if(!L.stat && is_servant_of_ratvar(L)) additional_chanters++ chanters += L @@ -440,22 +444,14 @@ var/turf/T = t for(var/M in T) var/atom/movable/A = M - power_drained += A.power_drain(TRUE, TRUE) //Yes, this absolutely does drain weaponry. 10 pulses to drain guns / batons, though of course they can just be recharged. + power_drained += A.power_drain(TRUE, TRUE, TRUE, MIN_CLOCKCULT_POWER * 10) //Yes, this absolutely does drain weaponry, aswell as recurse through objects. No more hiding in lockers / mechs to avoid it. new /obj/effect/temp_visual/ratvar/sigil/transgression(invoker.loc, 1 + (power_drained * power_mod)) var/datum/effect_system/spark_spread/S = new S.set_up(round(1 + (power_drained * power_mod), 1), 0, get_turf(invoker)) S.start() adjust_clockwork_power(power_drained * power_mod * 15) for(var/mob/living/L in chanters) - L.adjustFireLoss(round(clamp(power_drained * power_mod / (1 + additional_chanters), 0, 20), 0.1)) //No you won't just immediately melt if you do this in a very power-rich area + L.adjustFireLoss(round(clamp(power_drained * power_mod / (1 + additional_chanters), 0, 70), 0.1)) //No you won't just immediately melt if you do this in a very power-rich area, but it'll be close. return TRUE - -/datum/clockwork_scripture/channeled/void_volt/chant_end_effects() - invoker.visible_message("[invoker] stops glowing...") - invoker.remove_atom_colour(ADMIN_COLOUR_PRIORITY) - invoker.light_power = 0 - invoker.light_range = 0 - invoker.update_light() - return ..() diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 6e3fcfae2a..a2ec4a47a4 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -295,6 +295,8 @@ ++cultplayers else ++alive + if(!alive) + return var/ratio = cultplayers/alive if(ratio > CULT_RISEN && !cult_risen) for(var/datum/mind/B in members) diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 6cc2fb94b8..276729b359 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -82,7 +82,7 @@ Runes can either be invoked by one's self or with many different cultists. Each fail_invoke() /obj/effect/rune/attack_animal(mob/living/simple_animal/M) - if(istype(M, /mob/living/simple_animal/shade) || istype(M, /mob/living/simple_animal/hostile/construct)) + if(isshade(M) || istype(M, /mob/living/simple_animal/hostile/construct)) if(construct_invoke || !iscultist(M)) //if you're not a cult construct we want the normal fail message attack_hand(M) else @@ -191,7 +191,7 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/convert/do_invoke_glow() return -/obj/effect/rune/convert/invoke(var/list/invokers) +/obj/effect/rune/convert/invoke(list/invokers) if(rune_in_use) return var/list/myriad_targets = list() @@ -203,11 +203,16 @@ structure_check() searches for nearby cultist structures required for the invoca fail_invoke() log_game("Offer rune failed - no eligible targets") return + var/mob/living/L = pick(myriad_targets) + if(HAS_TRAIT(L, TRAIT_SACRIFICED)) + fail_invoke() + log_game("Offer rune failed - target has already been sacrificed") + to_chat(invokers, "[L] has already been sacrificed!") + return rune_in_use = TRUE visible_message("[src] pulses blood red!") var/oldcolor = color color = RUNE_COLOR_DARKRED - var/mob/living/L = pick(myriad_targets) var/is_clock = is_servant_of_ratvar(L) var/mob/living/F = invokers[1] @@ -264,7 +269,7 @@ structure_check() searches for nearby cultist structures required for the invoca H.uncuff() H.stuttering = 0 H.cultslurring = 0 - return 1 + return TRUE /obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers) var/mob/living/first_invoker = invokers[1] @@ -308,12 +313,16 @@ structure_check() searches for nearby cultist structures required for the invoca stone.invisibility = 0 if(sacrificial) + ADD_TRAIT(sacrificial, TRAIT_SACRIFICED, "sacrificed") if(iscyborg(sacrificial)) - playsound(sacrificial, 'sound/magic/disable_tech.ogg', 100, 1) - sacrificial.dust() //To prevent the MMI from remaining - else - playsound(sacrificial, 'sound/magic/disintegrate.ogg', 100, 1) - sacrificial.gib() + var/mob/living/silicon/robot/bot = sacrificial + playsound(sacrificial, 'sound/magic/disable_tech.ogg', 100, TRUE) + bot.deconstruct() + + else if(ishuman(sacrificial)) + playsound(sacrificial, 'sound/magic/disintegrate.ogg', 100, TRUE) + var/mob/living/carbon/human/H = sacrificial + H.spew_organ(2, 6) return TRUE /obj/effect/rune/empower diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 46961c0caf..abef18ade0 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -36,7 +36,7 @@ /obj/item/soulstone/examine(mob/user) . = ..() - if(usability || iscultist(user, TRUE) || iswizard(user) || isobserver(user)) + if(usability || iscultist(user) || iswizard(user) || isobserver(user)) if (old_shard) . += "A soulstone, used to capture a soul, either from dead humans or from freed shades." else @@ -46,7 +46,7 @@ . += "This shard is spent; it is now just a creepy rock." /obj/item/soulstone/Destroy() //Stops the shade from being qdel'd immediately and their ghost being sent back to the arrival shuttle. - for(var/mob/living/simple_animal/shade/A in src) + for(var/mob/living/simple_animal/hostile/construct/shade/A in src) A.death() return ..() @@ -58,7 +58,7 @@ to_chat(user, "Your body is wracked with debilitating pain!") return if(spent) - to_chat(user, "There is no power left in the shard.") + to_chat(user, "There is no power left in [src].") return if(!ishuman(M))//If target is not a human. return ..() @@ -81,7 +81,7 @@ release_shades(user) /obj/item/soulstone/proc/release_shades(mob/user) - for(var/mob/living/simple_animal/shade/A in src) + for(var/mob/living/simple_animal/hostile/construct/shade/A in src) A.status_flags &= ~GODMODE A.forceMove(get_turf(user)) A.mobility_flags = MOBILITY_FLAGS_DEFAULT @@ -103,12 +103,12 @@ /obj/structure/constructshell/examine(mob/user) . = ..() - if(iscultist(user, TRUE) || iswizard(user) || user.stat == DEAD) - . += "A construct shell, used to house bound souls from a soulstone." - . += "Placing a soulstone with a soul into this shell allows you to produce your choice of the following:" - . += "An Artificer, which can produce more shells and soulstones, as well as fortifications." - . += "A Wraith, which does high damage and can jaunt through walls, though it is quite fragile." - . += "A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow." + if(iscultist(user) || iswizard(user) || user.stat == DEAD) + . += {"A construct shell, used to house bound souls from a soulstone.\n + Placing a soulstone with a soul into this shell allows you to produce your choice of the following:\n + An Artificer, which can produce more shells and soulstones, as well as fortifications.\n + A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.\n + A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."} /obj/structure/constructshell/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/soulstone)) @@ -145,14 +145,14 @@ if("VICTIM") var/mob/living/carbon/human/T = target var/datum/antagonist/cult/C = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(C && C.cult_team?.is_sacrifice_target(T.mind)) + if(C?.cult_team.is_sacrifice_target(T.mind)) if(iscultist(user)) to_chat(user, "\"This soul is mine. SACRIFICE THEM!\"") else - to_chat(user, "The soulstone seems to reject this soul.") + to_chat(user, "[src] seems to reject this soul.") return FALSE if(contents.len) - to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.") + to_chat(user, "Capture failed!: [src] is full! Free an existing soul to make room.") else if((!old_shard && T.stat != CONSCIOUS) || (old_shard && T.stat == DEAD)) if(T.client == null) @@ -167,7 +167,7 @@ to_chat(user, "Capture failed!: Kill or maim the victim first!") if("SHADE") - var/mob/living/simple_animal/shade/T = target + var/mob/living/simple_animal/hostile/construct/shade/T = target if(contents.len) to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.") else @@ -177,13 +177,13 @@ T.health = T.maxHealth icon_state = "soulstone2" name = "soulstone: Shade of [T.real_name]" - to_chat(T, "Your soul has been captured by the soulstone. Its arcane energies are reknitting your ethereal form.") + to_chat(T, "Your soul has been captured by [src]. Its arcane energies are reknitting your ethereal form.") if(user != T) - to_chat(user, "Capture successful!: [T.real_name]'s soul has been captured and stored within the soulstone.") + to_chat(user, "Capture successful!: [T.real_name]'s soul has been captured and stored within [src].") if("CONSTRUCT") var/obj/structure/constructshell/T = target - var/mob/living/simple_animal/shade/A = locate() in src + var/mob/living/simple_animal/hostile/construct/shade/A = locate() in src if(A) var/construct_class = alert(user, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer") if(!T || !T.loc) @@ -199,8 +199,8 @@ if(iscultist(user) || iswizard(user)) makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder, A, user, 0, T.loc) - else - makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder/noncult, A, user, 0, T.loc) + else + return for(var/datum/mind/B in SSticker.mode.cult) if(B == A.mind) SSticker.mode.cult -= A.mind @@ -208,19 +208,24 @@ qdel(T) qdel(src) else - to_chat(user, "Creation failed!: The soul stone is empty! Go kill someone!") + to_chat(user, "Creation failed!: [src] is empty! Go kill someone!") /proc/makeNewConstruct(mob/living/simple_animal/hostile/construct/ctype, mob/target, mob/stoner = null, cultoverride = 0, loc_override = null) + if(QDELETED(target)) + return var/mob/living/simple_animal/hostile/construct/newstruct = new ctype((loc_override) ? (loc_override) : (get_turf(target))) if(stoner) newstruct.faction |= "[REF(stoner)]" newstruct.master = stoner var/datum/action/innate/seek_master/SM = new() SM.Grant(newstruct) - target.transfer_ckey(newstruct) + newstruct.key = target.key + if(target.type == /mob/living/simple_animal/hostile/construct/shade) //Make sure we remember which body belonged to the shade + var/mob/living/simple_animal/hostile/construct/shade/shade = target + newstruct.original_mind = shade.original_mind var/obj/screen/alert/bloodsense/BS - if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && SSticker && SSticker.mode) + if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && SSticker?.mode) SSticker.mode.add_cultist(newstruct.mind, 0) if(iscultist(stoner) || cultoverride) to_chat(newstruct, "You are still bound to serve the cult[stoner ? " and [stoner]":""], follow [stoner ? stoner.p_their() : "their"] orders and help [stoner ? stoner.p_them() : "them"] complete [stoner ? stoner.p_their() : "their"] goals at all costs.") @@ -234,19 +239,18 @@ /obj/item/soulstone/proc/init_shade(mob/living/carbon/human/T, mob/user, vic = 0) - new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton + if(HAS_TRAIT_FROM(T, TRAIT_SACRIFICED, "sacrificed")) + if(user) + to_chat(user, "This body has already been harvested!") + return + ADD_TRAIT(T, TRAIT_SACRIFICED, "sacrificed") T.stop_sound_channel(CHANNEL_HEARTBEAT) - T.invisibility = INVISIBILITY_ABSTRACT - T.dust_animation() - QDEL_IN(T, 5) - var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src) - S.status_flags |= GODMODE //So they won't die inside the stone somehow - S.mobility_flags = NONE //Can't move out of the soul stone + var/mob/living/simple_animal/hostile/construct/shade/S = new /mob/living/simple_animal/hostile/construct/shade(src) S.name = "Shade of [T.real_name]" S.real_name = "Shade of [T.real_name]" T.transfer_ckey(S) + S.original_mind = T.mind.current S.copy_languages(T, LANGUAGE_MIND)//Copies the old mobs languages into the new mob holder. - S.copy_languages(user, LANGUAGE_MASTER) S.update_atom_languages() grant_all_languages(FALSE, FALSE, TRUE) //Grants omnitongue if(user) @@ -264,7 +268,7 @@ to_chat(user, "Capture successful!: [T.real_name]'s soul has been ripped from [T.p_their()] body and stored within the soul stone.") -/obj/item/soulstone/proc/getCultGhost(mob/living/carbon/human/T, mob/U) +/obj/item/soulstone/proc/getCultGhost(mob/living/carbon/human/T, mob/user) var/mob/dead/observer/chosen_ghost for(var/mob/dead/observer/ghost in GLOB.player_list) //We put them back in their body @@ -279,13 +283,12 @@ if(!T) return FALSE if(!chosen_ghost) - to_chat(U, "There were no spirits willing to become a shade.") + to_chat(user, "There were no spirits willing to become a shade.") return FALSE if(contents.len) //If they used the soulstone on someone else in the meantime return FALSE T.ckey = chosen_ghost.ckey for(var/obj/item/W in T) T.dropItemToGround(W) - init_shade(T, U) - qdel(T) + init_shade(T, user) return TRUE diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index a2a55ee6b1..6049ee965e 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -237,12 +237,21 @@ . += "Alt-click to [locked ? "unlock" : "lock"] the interface." /obj/machinery/airalarm/ui_status(mob/user) - if(hasSiliconAccessInArea(user) && aidisabled) - to_chat(user, "AI control has been disabled.") - else if(!shorted) + if(hasSiliconAccessInArea(user)) + if(aidisabled) + to_chat(user, "AI control has been disabled") + return UI_CLOSE + else if(!issilicon(user)) //True sillycones use ..() + return UI_INTERACTIVE + if(!shorted) return ..() return UI_CLOSE +/obj/machinery/airalarm/can_interact(mob/user) + . = ..() + if (!issilicon(user) && hasSiliconAccessInArea(user)) + return TRUE + /obj/machinery/airalarm/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index a07f131d62..9aa3c8c16d 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -196,8 +196,8 @@ icon_state = "inje_map-1" /obj/machinery/atmospherics/components/unary/outlet_injector/layer3 - piping_layer = 2 - icon_state = "inje_map-2" + piping_layer = 3 + icon_state = "inje_map-3" /obj/machinery/atmospherics/components/unary/outlet_injector/on on = TRUE @@ -207,8 +207,8 @@ icon_state = "inje_map-1" /obj/machinery/atmospherics/components/unary/outlet_injector/on/layer3 - piping_layer = 2 - icon_state = "inje_map-2" + piping_layer = 3 + icon_state = "inje_map-3" /obj/machinery/atmospherics/components/unary/outlet_injector/atmos frequency = FREQ_ATMOS_STORAGE diff --git a/code/modules/awaymissions/mission_code/jungleresort.dm b/code/modules/awaymissions/mission_code/jungleresort.dm new file mode 100644 index 0000000000..6f66f1135a --- /dev/null +++ b/code/modules/awaymissions/mission_code/jungleresort.dm @@ -0,0 +1,44 @@ +// welcome to the jungle, we got fun and games + +//areas + +/area/awaymission/jungleresort + name = "Jungle Resort" + icon_state = "awaycontent30" + +//objects + +/obj/item/paper/crumpled/awaymissions/jungleresort/notice + name = "Resort Notice" + info = "Due to unforeseen circumstances and the disappearance of several resort employees and visitors, the resort shall be closed to the public until further notice. - Resort Manager Joe Lawrence" + +/obj/item/melee/chainofcommand/jungle + name = "treasure hunter's whip" + desc = "The tool of a fallen treasure hunter, old and outdated, it still stings like hell to be hit by." + hitsound = 'sound/weapons/whip.ogg' + icon_state = "whip" + +//turfs + +/turf/open/water/jungle + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + +/turf/open/floor/plating/dirt/jungle + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + +/turf/open/floor/plating/dirt/dark/jungle + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + +/turf/closed/mineral/random/labormineral/jungle + baseturfs = /turf/open/floor/plating/asteroid + turf_type = /turf/open/floor/plating/asteroid + +//mobs + +/mob/living/carbon/monkey/punpun/curiousgorge + name = "Curious Gorge" + pet_monkey_names = list("Curious Gorge", "Jungle Gorge", "Jungah Joe", "Mr. Monke") + rare_pet_monkey_names = list("Sun Mukong", "Monkey Kong") + +/mob/living/simple_animal/hostile/jungle/leaper/boss + health = 450 \ No newline at end of file diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 7d33a87111..c581e402a6 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -268,7 +268,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( else prefs = new /datum/preferences(src) GLOB.preferences_datums[ckey] = prefs - + addtimer(CALLBACK(src, .proc/ensure_keys_set), 10) //prevents possible race conditions prefs.last_ip = address //these are gonna be used for banning @@ -561,36 +561,49 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(!query_client_in_db.Execute()) qdel(query_client_in_db) return - if(!query_client_in_db.NextRow()) - if (CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey] && !(ckey in GLOB.bunker_passthrough)) - log_access("Failed Login: [key] - New account attempting to connect during panic bunker") - message_admins("Failed Login: [key] - New account attempting to connect during panic bunker") - to_chat(src, "You must first join the Discord to verify your account before joining this server.
To do so, read the rules and post a request in the #station-access-requests channel under the \"Main server\" category in the Discord server linked here: https://discord.gg/E6SQuhz
If you have already done so, wait a few minutes then try again; sometimes the server needs to fully load before you can join.
") //CIT CHANGE - makes the panic bunker disconnect message point to the discord - var/list/connectiontopic_a = params2list(connectiontopic) - var/list/panic_addr = CONFIG_GET(string/panic_server_address) - if(panic_addr && !connectiontopic_a["redirect"]) - var/panic_name = CONFIG_GET(string/panic_server_name) - to_chat(src, "Sending you to [panic_name ? panic_name : panic_addr].") - winset(src, null, "command=.options") - src << link("[panic_addr]?redirect=1") - qdel(query_client_in_db) - qdel(src) - return + if(!query_client_in_db.NextRow()) //new user detected + if(!holder && !GLOB.deadmins[ckey]) + if(CONFIG_GET(flag/panic_bunker) && !(ckey in GLOB.bunker_passthrough)) + log_access("Failed Login: [key] - New account attempting to connect during panic bunker") + message_admins("Failed Login: [key] - New account attempting to connect during panic bunker") + to_chat(src, "You must first join the Discord to verify your account before joining this server.
To do so, read the rules and post a request in the #station-access-requests channel under the \"Main server\" category in the Discord server linked here: https://discord.gg/E6SQuhz
If you have already done so, wait a few minutes then try again; sometimes the server needs to fully load before you can join.
") //CIT CHANGE - makes the panic bunker disconnect message point to the discord + var/list/connectiontopic_a = params2list(connectiontopic) + var/list/panic_addr = CONFIG_GET(string/panic_server_address) + if(panic_addr && !connectiontopic_a["redirect"]) + var/panic_name = CONFIG_GET(string/panic_server_name) + to_chat(src, "Sending you to [panic_name ? panic_name : panic_addr].") + winset(src, null, "command=.options") + src << link("[panic_addr]?redirect=1") + qdel(query_client_in_db) + qdel(src) + return - new_player = 1 - account_join_date = sanitizeSQL(findJoinDate()) - var/sql_key = sanitizeSQL(key) - var/datum/DBQuery/query_add_player = SSdbcore.NewQuery("INSERT INTO [format_table_name("player")] (`ckey`, `byond_key`, `firstseen`, `firstseen_round_id`, `lastseen`, `lastseen_round_id`, `ip`, `computerid`, `lastadminrank`, `accountjoindate`) VALUES ('[sql_ckey]', '[sql_key]', Now(), '[GLOB.round_id]', Now(), '[GLOB.round_id]', INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]', [account_join_date ? "'[account_join_date]'" : "NULL"])") - if(!query_add_player.Execute()) - qdel(query_client_in_db) + new_player = 1 + account_join_date = sanitizeSQL(findJoinDate()) + var/sql_key = sanitizeSQL(key) + var/datum/DBQuery/query_add_player = SSdbcore.NewQuery("INSERT INTO [format_table_name("player")] (`ckey`, `byond_key`, `firstseen`, `firstseen_round_id`, `lastseen`, `lastseen_round_id`, `ip`, `computerid`, `lastadminrank`, `accountjoindate`) VALUES ('[sql_ckey]', '[sql_key]', Now(), '[GLOB.round_id]', Now(), '[GLOB.round_id]', INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]', [account_join_date ? "'[account_join_date]'" : "NULL"])") + if(!query_add_player.Execute()) + qdel(query_client_in_db) + qdel(query_add_player) + return qdel(query_add_player) - return - qdel(query_add_player) - if(!account_join_date) - account_join_date = "Error" - account_age = -1 - else if(ckey in GLOB.bunker_passthrough) - GLOB.bunker_passthrough -= ckey + if(!account_join_date) + account_join_date = "Error" + account_age = -1 + else if(ckey in GLOB.bunker_passthrough) + GLOB.bunker_passthrough -= ckey + if(CONFIG_GET(flag/age_verification)) //setup age verification + if(!set_db_player_flags()) + message_admins(usr, "ERROR: Unable to read player flags from database. Please check logs.") + return + else + var/dbflags = prefs.db_flags + if(!(dbflags & DB_FLAG_AGE_CONFIRMATION_COMPLETE)) //they have not completed age verification + if((ckey in GLOB.bunker_passthrough)) //they're verified in the panic bunker though + update_flag_db(DB_FLAG_AGE_CONFIRMATION_COMPLETE, TRUE) + else + update_flag_db(DB_FLAG_AGE_CONFIRMATION_INCOMPLETE, TRUE) + qdel(query_client_in_db) var/datum/DBQuery/query_get_client_age = SSdbcore.NewQuery("SELECT firstseen, DATEDIFF(Now(),firstseen), accountjoindate, DATEDIFF(Now(),accountjoindate) FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") if(!query_get_client_age.Execute()) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index d817cc3a53..196c1ce0ed 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -482,7 +482,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "    Change
" mutant_colors = TRUE - if (CONFIG_GET(number/body_size_min) != CONFIG_GET(number/body_size_max)) dat += "Sprite Size: [features["body_size"]*100]%
" if(!(NOEYES in pref_species.species_traits)) @@ -2245,21 +2244,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) gender = chosengender if("body_size") - var/min = CONFIG_GET(number/body_size_min) - var/max = CONFIG_GET(number/body_size_max) - var/danger = CONFIG_GET(number/threshold_body_size_slowdown) - var/new_body_size = input(user, "Choose your desired sprite size: ([min*100]%-[max*100]%)\nWarning: This may make your character look distorted[danger > min ? "! Additionally, a proportional movement speed penalty will be applied to characters smaller than [danger*100]%." : "!"]", "Character Preference", features["body_size"]*100) as num|null - if (new_body_size) - new_body_size = clamp(new_body_size * 0.01, min, max) - var/dorfy - if((new_body_size + 0.01) < danger) // Adding 0.01 as a dumb fix to prevent the warning message from appearing when exactly at threshold... Not sure why that happens in the first place. - dorfy = alert(user, "You have chosen a size below the slowdown threshold of [danger*100]%. For balancing purposes, the further you go below this percentage, the slower your character will be. Do you wish to keep this size?", "Speed Penalty Alert", "Yes", "Move it to the threshold", "No") - if(dorfy == "Move it to the threshold") - new_body_size = danger - if(!dorfy) //Aborts if this var is somehow empty - return - if(dorfy != "No") - features["body_size"] = new_body_size + var/new_body_size = input(user, "Choose your desired sprite size: (90-125%)\nWarning: This may make your character look distorted. Additionally, any size under 100% takes a 10% maximum health penalty", "Character Preference", features["body_size"]*100) as num|null + if(new_body_size) + features["body_size"] = clamp(new_body_size * 0.01, CONFIG_GET(number/body_size_min), CONFIG_GET(number/body_size_max)) + if("tongue") var/selected_custom_tongue = input(user, "Choose your desired tongue (none means your species tongue)", "Character Preference") as null|anything in GLOB.roundstart_tongues if(selected_custom_tongue) @@ -2653,6 +2641,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) else if(firstspace == name_length) real_name += "[pick(GLOB.last_names)]" + //reset size if applicable + if(character.dna.features["body_size"]) + var/initial_old_size = character.dna.features["body_size"] + character.dna.features["body_size"] = RESIZE_DEFAULT_SIZE + character.dna.update_body_size(initial_old_size) + character.real_name = nameless ? "[real_name] #[rand(10000, 99999)]" : real_name character.name = character.real_name character.nameless = nameless @@ -2695,8 +2689,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) pref_species = new /datum/species/human save_character() - var/old_size = character.dna.features["body_size"] - character.dna.features = features.Copy() character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE) character.dna.species.eye_type = eye_type @@ -2706,6 +2698,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.dna.nameless = character.nameless character.dna.custom_species = character.custom_species + var/old_size = RESIZE_DEFAULT_SIZE + if(isdwarf(character)) + character.dna.features["body_size"] = RESIZE_DEFAULT_SIZE + if((parent && parent.can_have_part("meat_type")) || pref_species.mutant_bodyparts["meat_type"]) character.type_of_meat = GLOB.meat_types[features["meat_type"]] diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm index b88bef1c87..40ce543d31 100644 --- a/code/modules/events/_event.dm +++ b/code/modules/events/_event.dm @@ -68,8 +68,8 @@ triggering = TRUE if (alert_observers) - message_admins("Random Event triggering in 10 seconds: [name] (CANCEL)") - sleep(100) + message_admins("Random Event triggering in 30 seconds: [name] (CANCEL)") + sleep(300) var/gamemode = SSticker.mode.config_tag var/players_amt = get_active_player_count(alive_check = TRUE, afk_check = TRUE, human_check = TRUE) if(!canSpawnEvent(players_amt, gamemode)) diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm index 394294db37..1b0c19274b 100644 --- a/code/modules/events/anomaly.dm +++ b/code/modules/events/anomaly.dm @@ -44,7 +44,13 @@ priority_announce("Localized energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert") /datum/round_event/anomaly/start() - var/turf/T = pick(get_area_turfs(impact_area)) + var/list/turf/valid = list() + for(var/i in get_area_turfs(impact_area)) + var/turf/T = i + if(T.density) + continue + valid += T + var/turf/T = pick(valid) var/newAnomaly if(T) newAnomaly = new anomaly_path(T) diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm index 3bcec9f471..8bada6da77 100644 --- a/code/modules/events/pirates.dm +++ b/code/modules/events/pirates.dm @@ -219,7 +219,7 @@ suit_type = /obj/item/clothing/suit/space helmet_type = /obj/item/clothing/head/helmet/space mask_type = /obj/item/clothing/mask/breath - storage_type = /obj/item/tank/internals/oxygen + storage_type = /obj/item/tank/jetpack/void /obj/machinery/loot_locator @@ -275,6 +275,7 @@ /obj/machinery/computer/piratepad_control name = "cargo hold control terminal" + resistance_flags = INDESTRUCTIBLE ui_x = 600 ui_y = 230 var/status_report = "Ready for delivery." diff --git a/code/modules/holiday/halloween/halloween.dm b/code/modules/holiday/halloween/halloween.dm index d3b9b92b4f..d44b94aaf3 100644 --- a/code/modules/holiday/halloween/halloween.dm +++ b/code/modules/holiday/halloween/halloween.dm @@ -86,7 +86,7 @@ else if(trapped == HOWLING_GHOST) visible_message("[pick("OooOOooooOOOoOoOOooooOOOOO", "BooOOooOooooOOOO", "BOO!", "WoOOoOoooOooo")]") playsound(loc, 'sound/spookoween/ghosty_wind.ogg', 300, 1) - new /mob/living/simple_animal/shade/howling_ghost(loc) + new /mob/living/simple_animal/hostile/construct/shade/howling_ghost(loc) trapped = 0 else if(trapped == SCARY_BATS) @@ -123,7 +123,7 @@ //Spookoween Ghost// //////////////////// -/mob/living/simple_animal/shade/howling_ghost +/mob/living/simple_animal/hostile/construct/shade/howling_ghost name = "ghost" real_name = "ghost" icon = 'icons/mob/mob.dmi' @@ -137,13 +137,13 @@ layer = 4 var/timer = 0 -/mob/living/simple_animal/shade/howling_ghost/Initialize() +/mob/living/simple_animal/hostile/construct/shade/howling_ghost/Initialize() . = ..() icon_state = pick("ghost","ghostian","ghostian2","ghostking","ghost1","ghost2") icon_living = icon_state timer = rand(1,15) -/mob/living/simple_animal/shade/howling_ghost/Life() +/mob/living/simple_animal/hostile/construct/shade/howling_ghost/Life() ..() timer-- if(prob(20)) @@ -152,16 +152,16 @@ spooky_ghosty() timer = rand(1,15) -/mob/living/simple_animal/shade/howling_ghost/proc/EtherealMove(direction) +/mob/living/simple_animal/hostile/construct/shade/howling_ghost/proc/EtherealMove(direction) forceMove(get_step(src, direction)) setDir(direction) -/mob/living/simple_animal/shade/howling_ghost/proc/roam() +/mob/living/simple_animal/hostile/construct/shade/howling_ghost/proc/roam() if(prob(80)) var/direction = pick(NORTH,SOUTH,EAST,WEST,NORTHEAST,NORTHWEST,SOUTHEAST,SOUTHWEST) EtherealMove(direction) -/mob/living/simple_animal/shade/howling_ghost/proc/spooky_ghosty() +/mob/living/simple_animal/hostile/construct/shade/howling_ghost/proc/spooky_ghosty() if(prob(20)) //haunt playsound(loc, pick('sound/spookoween/ghosty_wind.ogg','sound/spookoween/ghost_whisper.ogg','sound/spookoween/chain_rattling.ogg'), 300, 1) if(prob(10)) //flickers @@ -175,7 +175,7 @@ step(I,direction) return -/mob/living/simple_animal/shade/howling_ghost/CanPass(atom/movable/mover, turf/target) +/mob/living/simple_animal/hostile/construct/shade/howling_ghost/CanPass(atom/movable/mover, turf/target) return 1 /////////////////////////// diff --git a/code/modules/holiday/halloween/jacqueen.dm b/code/modules/holiday/halloween/jacqueen.dm index 16151c4191..90016954fc 100644 --- a/code/modules/holiday/halloween/jacqueen.dm +++ b/code/modules/holiday/halloween/jacqueen.dm @@ -50,6 +50,13 @@ var/cached_z /// I'm busy, don't move. var/busy = FALSE + var/static/blacklisted_items = typecacheof(list( + /obj/effect, + /obj/belly, + /obj/mafia_game_board, + /obj/docking_port, + /obj/shapeshift_holder, + /obj/screen)) /mob/living/simple_animal/jacq/Initialize() ..() @@ -112,7 +119,7 @@ /mob/living/simple_animal/jacq/proc/jacqrunes(message, mob/living/carbon/C) //Displays speechtext over Jacq for the user only. var/atom/hearer = C - var/list/spans = list("spooky") + var/list/spans = list("spooky") new /datum/chatmessage(message, src, hearer, spans) @@ -228,10 +235,13 @@ return var/new_obj = pick(subtypesof(/obj)) - //for(var/item in blacklist) - // if(new_obj == item) - // panic() + for(var/item in blacklisted_items) + if(is_type_in_typecache(new_obj, blacklisted_items)) + new_obj = /obj/item/reagent_containers/food/snacks/special_candy var/reward = new new_obj(C.loc) + if(new_obj == /obj/item/reagent_containers/food/snacks/special_candy) + new new_obj(C.loc) + new new_obj(C.loc) //Giving them back their candies in case it's something from the blacklist or if the game literally rolled candies. What rotten luck. C.put_in_hands(reward) visible_message("[src] waves her hands, magicking up a [reward] from thin air, \"There ye are [gender], enjoy! \"") jacqrunes("There ye are [gender], enjoy!", C) diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 429dc98e8a..2ca4d5fd2e 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -109,9 +109,12 @@ GLOBAL_LIST(labor_sheet_values) qdel(src) /obj/machinery/mineral/labor_claim_console/emag_act(mob/user) - if(!(obj_flags & EMAGGED)) - obj_flags |= EMAGGED - to_chat(user, "PZZTTPFFFT") + . = ..() + if((obj_flags & EMAGGED)) + return + obj_flags |= EMAGGED + to_chat(user, "PZZTTPFFFT") + return TRUE /**********************Prisoner Collection Unit**************************/ diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 1fdf3102a9..91123c0c7f 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -78,6 +78,28 @@ popup.set_content(output) popup.open(FALSE) +/mob/dead/new_player/proc/age_verify() + if(CONFIG_GET(flag/age_verification) && !check_rights_for(client, R_ADMIN) && !(client.ckey in GLOB.bunker_passthrough)) //make sure they are verified + if(!client.set_db_player_flags()) + message_admins("Blocked [src] from new player panel because age gate could not access player database flags.") + return FALSE + else + var/dbflags = client.prefs.db_flags + if(dbflags & DB_FLAG_AGE_CONFIRMATION_INCOMPLETE) //they have not completed age gate + var/age_verification = askuser(src, "Are you 18+", "Age Gate", "I am 18+", "I am not 18+", null, TRUE, null) + if(age_verification != 1) + client.add_system_note("Automated-Age-Gate", "Failed automatic age gate process") + qdel(client) //kick the user + return FALSE + else + //they claim to be of age, so allow them to continue and update their flags + client.update_flag_db(DB_FLAG_AGE_CONFIRMATION_COMPLETE, TRUE) + client.update_flag_db(DB_FLAG_AGE_CONFIRMATION_INCOMPLETE, FALSE) + //log this + message_admins("[ckey] has joined through the automated age gate process.") + return TRUE + return TRUE + /mob/dead/new_player/Topic(href, href_list[]) if(src != usr) return 0 @@ -85,6 +107,9 @@ if(!client) return 0 + if(!age_verify()) + return + //Determines Relevent Population Cap var/relevant_cap var/hpc = CONFIG_GET(number/hard_popcap) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 26486f255a..ebe5372e63 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -611,7 +611,7 @@ update_mobility() UpdateStaminaBuffer() update_health_hud() - + /mob/living/carbon/update_sight() if(!client) return diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 710d49c075..3aa26de5cf 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -212,6 +212,7 @@ // called when something steps onto a human // this could be made more general, but for now just handle mulebot /mob/living/carbon/human/Crossed(atom/movable/AM) + SEND_SIGNAL(src, COMSIG_MOVABLE_CROSSED, AM) var/mob/living/simple_animal/bot/mulebot/MB = AM if(istype(MB)) MB.RunOver(src) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 76a9c00ed1..10295a7de4 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -1,4 +1,6 @@ /mob/living/carbon/human/getarmor(def_zone, type) + if(HAS_TRAIT(src, TRAIT_ARMOR_BROKEN)) //trait that makes it act as if you have no armor at all, you take natural damage from all sources + return 0 var/armorval = 0 var/organnum = 0 @@ -18,7 +20,6 @@ organnum++ return (armorval/max(organnum, 1)) - /mob/living/carbon/human/proc/checkarmor(obj/item/bodypart/def_zone, d_type) if(!d_type || !def_zone) return 0 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 8b78a9212d..74675a03f0 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1451,9 +1451,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) target.apply_damage(damage*1.5, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus) target.apply_damage(damage*0.5, STAMINA, affecting, armor_block) log_combat(user, target, "kicked") - else if(HAS_TRAIT(user, TRAIT_MAULER)) // mauler punches deal 1.3x raw damage + 1x stam damage, and have some armor pierce - target.apply_damage(damage*1.3, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus) - target.apply_damage(damage, STAMINA, affecting, armor_block) + else if(HAS_TRAIT(user, TRAIT_MAULER)) // mauler punches deal 1.1x raw damage + 1.3x stam damage, and have some armor pierce + target.apply_damage(damage*1.1, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus) + target.apply_damage(damage*1.3, STAMINA, affecting, armor_block) log_combat(user, target, "punched (mauler)") else //other attacks deal full raw damage + 2x in stamina damage target.apply_damage(damage, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index a87c92bdb9..ecac5fda10 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -714,18 +714,25 @@ return FALSE /datum/action/innate/slime_puddle/Activate() + var/mob/living/carbon/human/H = owner + //if they have anything stuck to their hands, we immediately say 'no' and return + for(var/obj/item/I in H.held_items) + if(HAS_TRAIT(I, TRAIT_NODROP)) + to_chat(owner, "There's something stuck to your hand, stopping you from transforming!") + return if(isjellyperson(owner) && IsAvailable()) transforming = TRUE UpdateButtonIcon() - var/mob/living/carbon/human/H = owner var/mutcolor = "#" + H.dna.features["mcolor"] if(!is_puddle) - if(CHECK_MOBILITY(H, MOBILITY_USE)) - is_puddle = TRUE - owner.cut_overlays() + if(CHECK_MOBILITY(H, MOBILITY_USE)) //if we can use items, we can turn into a puddle + is_puddle = TRUE //so we know which transformation to use when its used + owner.cut_overlays() //we dont show our normal sprite, we show a puddle sprite var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) puddle_effect.color = mutcolor - H.Stun(in_transformation_duration, ignore_canstun = TRUE) + H.Stun(in_transformation_duration, ignore_canstun = TRUE) //cant move while transforming + + //series of traits that make up the puddle behaviour ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) @@ -733,19 +740,30 @@ ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT) + H.update_disabled_bodyparts(silent = TRUE) //silently update arms to be paralysed + H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) - H.update_disabled_bodyparts(silent = TRUE) + H.layer -= 1 //go one layer down so people go over you - ENABLE_BITFIELD(H.pass_flags, PASSMOB) - squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) - sleep(in_transformation_duration) + ENABLE_BITFIELD(H.pass_flags, PASSMOB) //this actually lets people pass over you + squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) //blorble noise when people step on you + + //if the user is a changeling, retract their sting + H.unset_sting() + + sleep(in_transformation_duration) //wait for animation to end + + //set the puddle overlay up var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) puddle_overlay.color = mutcolor tracked_overlay = puddle_overlay owner.add_overlay(puddle_overlay) + transforming = FALSE UpdateButtonIcon() else + //like the above, but reverse everything done! owner.cut_overlay(tracked_overlay) var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) puddle_effect.color = mutcolor @@ -758,6 +776,7 @@ REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT) H.update_disabled_bodyparts(silent = TRUE) H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) H.layer += 1 //go one layer back above! diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index 676248c463..558fdc6594 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -15,8 +15,13 @@ skinned_type = /obj/item/stack/sheet/animalhide/human var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability." species_category = SPECIES_CATEGORY_UNDEAD + var/batform_enabled = TRUE -/datum/species/vampire/check_roundstart_eligible() +/datum/species/vampire/roundstart + id = SPECIES_VAMPIRE_WEAK + batform_enabled = FALSE + +/datum/species/vampire/roundstart/check_roundstart_eligible() if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) return TRUE return FALSE @@ -27,8 +32,9 @@ if(!C.dna.skin_tone_override) C.skin_tone = "albino" C.update_body(0) - var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/B = new - C.AddSpell(B) + if(batform_enabled) + var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/B = new + C.AddSpell(B) /datum/species/vampire/on_species_loss(mob/living/carbon/C) . = ..() diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 4ee52a08a6..ce8bbc5dab 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -443,6 +443,7 @@ key = "me" key_third_person = "custom" message = null + emote_type = EMOTE_BOTH /datum/emote/living/custom/proc/check_invalid(mob/user, input) if(stop_bad_mime.Find(input, 1, 1)) @@ -462,24 +463,12 @@ else if(!params) var/custom_emote = stripped_multiline_input_or_reflect(user, "Choose an emote to display.", "Custom Emote", null, MAX_MESSAGE_LEN) if(custom_emote && !check_invalid(user, custom_emote)) - var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable") - switch(type) - if("Visible") - emote_type = EMOTE_VISIBLE - if("Hearable") - emote_type = EMOTE_AUDIBLE - else - alert("Unable to use this emote, must be either hearable or visible.") - return message = custom_emote else message = params - if(type_override) - emote_type = type_override message = user.say_emphasis(message) . = ..() message = null - emote_type = EMOTE_VISIBLE /datum/emote/living/custom/replace_pronoun(mob/user, message) return message diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 95bd8d8991..af8382a82b 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -44,6 +44,7 @@ var/can_repair_constructs = FALSE var/can_repair_self = FALSE var/runetype + var/original_mind /mob/living/simple_animal/hostile/construct/Initialize() . = ..() @@ -66,6 +67,11 @@ CR.button.screen_loc = "6:[pos],4:-2" CR.button.moved = "6:[pos],4:-2" +/mob/living/simple_animal/hostile/construct/death() + if(original_mind) + transfer_ckey(original_mind) + ..() + /mob/living/simple_animal/hostile/construct/Login() ..() to_chat(src, playstyle_string) @@ -107,7 +113,7 @@ return /mob/living/simple_animal/hostile/construct/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) - return 0 + return FALSE /mob/living/simple_animal/hostile/construct/adjustHealth(amount, updating_health = TRUE, forced = FALSE) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index f0ab3fba4c..477483862b 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -87,7 +87,7 @@ Difficulty: Medium return FALSE return ..() -/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message) +/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message, omni = FALSE) if(swooping & SWOOP_INVULNERABLE) //to suppress attack messages without overriding every single proc that could send a message saying we got hit return return ..() diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 75182b85e5..b46b56f472 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -1,53 +1,33 @@ -/mob/living/simple_animal/shade +/mob/living/simple_animal/hostile/construct/shade name = "Shade" real_name = "Shade" desc = "A bound spirit." - gender = PLURAL - icon = 'icons/mob/mob.dmi' icon_state = "shade" icon_living = "shade" mob_biotypes = MOB_SPIRIT maxHealth = 40 health = 40 - spacewalk = TRUE - healable = 0 - speak_emote = list("hisses") emote_hear = list("wails.","screeches.") response_help_continuous = "puts their hand through" response_help_simple = "put your hand through" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - speak_chance = 1 melee_damage_lower = 5 melee_damage_upper = 12 attack_verb_continuous = "metaphysically strikes" attack_verb_simple = "metaphysically strike" - minbodytemp = 0 - maxbodytemp = INFINITY - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - stop_automated_movement = 1 - status_flags = 0 - faction = list("cult") - status_flags = CANPUSH - movement_type = FLYING + speed = -1 //they don't have to lug a body made of runed metal around loot = list(/obj/item/ectoplasm) - del_on_death = TRUE - initial_language_holder = /datum/language_holder/construct - blood_volume = 0 - has_field_of_vision = FALSE //we are a spoopy ghost + playstyle_string = "You are a shade! Your job is to survive until you are granted a shell, and help out cultists with casting runes!" -/mob/living/simple_animal/shade/death() +/mob/living/simple_animal/hostile/construct/shade/death() deathmessage = "lets out a contented sigh as [p_their()] form unwinds." ..() -/mob/living/simple_animal/shade/canSuicide() +/mob/living/simple_animal/hostile/construct/shade/canSuicide() if(istype(loc, /obj/item/soulstone)) //do not suicide inside the soulstone - return 0 + return FALSE return ..() -/mob/living/simple_animal/shade/attack_animal(mob/living/simple_animal/M) +/mob/living/simple_animal/hostile/construct/shade/attack_animal(mob/living/simple_animal/M) if(isconstruct(M)) var/mob/living/simple_animal/hostile/construct/C = M if(!C.can_repair_constructs) @@ -62,7 +42,7 @@ else if(src != M) return ..() -/mob/living/simple_animal/shade/attackby(obj/item/O, mob/user, params) //Marker -Agouri +/mob/living/simple_animal/hostile/construct/shade/attackby(obj/item/O, mob/user, params) //Marker -Agouri if(istype(O, /obj/item/soulstone)) var/obj/item/soulstone/SS = O SS.transfer_soul("SHADE", src, user) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ab2556abb5..3416a8b337 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -127,8 +127,9 @@ * * ignored_mobs (optional) doesn't show any message to any given mob in the list. * * target (optional) is the other mob involved with the visible message. For example, the attacker in many combat messages. * * target_message (optional) is what the target mob will see e.g. "[src] does something to you!" + * * omni (optional) if TRUE, will show to users no matter what. */ -/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, ignored_mobs, mob/target, target_message) +/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, ignored_mobs, mob/target, target_message, omni = FALSE) var/turf/T = get_turf(src) if(!T) return @@ -139,20 +140,26 @@ if(target_message && target && istype(target) && target.client) hearers -= target - //This entire if/else chain could be in two lines but isn't for readibilties sake. - var/msg = target_message - if(target.see_invisible[user.say_emphasis(message)]
" - if(emote_type == EMOTE_AUDIBLE) - user.audible_message(message=message,hearing_distance=1, ignored_mobs = GLOB.dead_mob_list) - else - user.visible_message(message=message,self_message=message,vision_distance=1, ignored_mobs = GLOB.dead_mob_list) + user.visible_message(message = message, self_message = message, vision_distance = 1, ignored_mobs = GLOB.dead_mob_list, omni = TRUE) ///////////////// VERB CODE /mob/living/verb/subtle() diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 7de30a7095..3a7e270567 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -617,7 +617,7 @@ return 1 if(ispath(MP, /mob/living/simple_animal/hostile/mushroom)) return 1 - if(ispath(MP, /mob/living/simple_animal/shade)) + if(ispath(MP, /mob/living/simple_animal/hostile/construct/shade)) return 1 if(ispath(MP, /mob/living/simple_animal/hostile/killertomato)) return 1 diff --git a/code/modules/movespeed/modifiers/innate.dm b/code/modules/movespeed/modifiers/innate.dm index 946d93e96b..f5a599f940 100644 --- a/code/modules/movespeed/modifiers/innate.dm +++ b/code/modules/movespeed/modifiers/innate.dm @@ -20,5 +20,6 @@ flags = IGNORE_NOSLOW /datum/movespeed_modifier/slime_puddle - multiplicative_slowdown = 2 + multiplicative_slowdown = 4.5 flags = IGNORE_NOSLOW + variable = TRUE diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 1a96f36ccd..7f7c02f457 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -111,6 +111,7 @@ var/obj/machinery/computer/apc_control/remote_control = null var/mob/living/carbon/hijacker var/hijackerlast = TRUE + var/being_hijacked = FALSE /obj/machinery/power/apc/unlocked locked = FALSE @@ -902,7 +903,7 @@ if(H && !H.stealthmode && H.toggled) abilitiesavail = TRUE var/list/data = list( - "locked" = locked, + "locked" = locked && !(integration_cog && is_servant_of_ratvar(user)) && !area.hasSiliconAccessInArea(user, PRIVILEDGES_SILICON|PRIVILEDGES_DRONE), "failTime" = failure_timer, "isOperating" = operating, "externalPower" = main_status, @@ -1119,10 +1120,14 @@ /obj/machinery/power/apc/proc/hijack(mob/living/L) if (!istype(L)) return + if(being_hijacked) + to_chat(L, "This APC is already being hijacked!") + return if (hijacker && hijacker != L) var/obj/item/implant/hijack/H = L.getImplant(/obj/item/implant/hijack) to_chat(L, "Someone already has control of this APC. Beginning counter-hijack.") H.hijacking = TRUE + being_hijacked = TRUE if (do_after(L,20 SECONDS,target=src)) hijacker.toggleSiliconAccessArea(area) if (L.toggleSiliconAccessArea(area)) @@ -1130,23 +1135,28 @@ update_icon() set_hijacked_lighting() H.hijacking = FALSE + being_hijacked = FALSE return else to_chat(L, "Aborting.") H.hijacking = FALSE + being_hijacked = FALSE return to_chat(L, "Beginning hijack of APC.") var/obj/item/implant/hijack/H = L.getImplant(/obj/item/implant/hijack) H.hijacking = TRUE + being_hijacked = TRUE if (do_after(L,H.stealthmode ? 12 SECONDS : 5 SECONDS,target=src)) if (L.toggleSiliconAccessArea(area)) hijacker = L update_icon() set_hijacked_lighting() H.hijacking = FALSE + being_hijacked = FALSE else to_chat(L, "Aborting.") H.hijacking = FALSE + being_hijacked = FALSE return /obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf) diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index e775fdc05a..9ed9630f2f 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -54,11 +54,10 @@ /obj/item/gun/ballistic/automatic/pistol/m1911 name = "\improper M1911" - desc = "A classic .45 handgun with a small magazine capacity." + desc = "A classic .45 handgun with a small magazine capacity. Has a threaded barrel for suppressors." icon_state = "m1911" w_class = WEIGHT_CLASS_NORMAL mag_type = /obj/item/ammo_box/magazine/m45 - can_suppress = FALSE /obj/item/gun/ballistic/automatic/pistol/m1911/no_mag spawnwithmagazine = FALSE @@ -67,6 +66,7 @@ name = "\improper Kitchen Gun (TM)" desc = "Say goodbye to dirt with Kitchen Gun (TM)! Laser sight and night vision accessories sold separately." icon_state = "kitchengun" + can_suppress = FALSE mag_type = /obj/item/ammo_box/magazine/m45/kitchengun /obj/item/gun/ballistic/automatic/pistol/deagle @@ -98,11 +98,10 @@ /obj/item/gun/ballistic/automatic/pistol/APS name = "stechkin APS pistol" - desc = "The original Russian version of a widely used Syndicate sidearm. Uses 9mm ammo." + desc = "The original Russian version of a widely used Syndicate sidearm. Uses 9mm ammo. Has a threaded barrel for suppressors." icon_state = "aps" w_class = WEIGHT_CLASS_SMALL mag_type = /obj/item/ammo_box/magazine/pistolm9mm - can_suppress = FALSE burst_size = 3 fire_delay = 2 actions_types = list(/datum/action/item_action/toggle_firemode) @@ -136,7 +135,7 @@ mag_type = /obj/item/ammo_box/magazine/sniper_rounds fire_delay = 50 burst_size = 1 - can_suppress = 0 + can_suppress = FALSE w_class = WEIGHT_CLASS_NORMAL actions_types = list() fire_sound = 'sound/weapons/blastcannon.ogg' diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 99c1cf97a6..8c3b9c7f99 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -83,6 +83,16 @@ updateUsrDialog() update_icon() return + + if(beaker) + if(istype(I, /obj/item/reagent_containers/dropper)) + var/obj/item/reagent_containers/dropper/D = I + D.afterattack(beaker, user, 1) + return + if(istype(I, /obj/item/reagent_containers/syringe)) + var/obj/item/reagent_containers/syringe/S = I + S.afterattack(beaker, user, 1) + return return ..() /obj/machinery/chem_heater/on_deconstruction() diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index f3d299cce5..0d91e37ca0 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -970,7 +970,7 @@ M.emote("gasp") log_combat(M, M, "revived", src) var/list/policies = CONFIG_GET(keyed_list/policyconfig) - var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) + var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds var/late = timelimit && (tplus > timelimit) var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT] if(policy) @@ -1321,7 +1321,7 @@ pH = 11 value = REAGENT_VALUE_COMMON //not any higher. Ambrosia is a milestone for hydroponics already. - + //Earthsblood is still a wonderdrug. Just... don't expect to be able to mutate something that makes plants so healthy. /datum/reagent/medicine/earthsblood/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) . = ..() @@ -1335,7 +1335,7 @@ myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 1)) myseed.adjust_endurance(round(chems.get_reagent_amount(src.type) * 0.5)) myseed.adjust_production(-round(chems.get_reagent_amount(src.type) * 0.5)) - + /datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-3 * REM, FALSE) M.adjustFireLoss(-3 * REM, FALSE) diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index 11518b236f..3d54c7130c 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -132,7 +132,7 @@ lich.real_name = mind.name mind.transfer_to(lich) mind.grab_ghost(force=TRUE) - lich.hardset_dna(null,null,null,lich.real_name,null, new /datum/species/skeleton) + lich.hardset_dna(null,null,null,lich.real_name,null, new /datum/species/skeleton/space) to_chat(lich, "Your bones clatter and shudder as you are pulled back into this world!") var/turf/body_turf = get_turf(old_body) lich.DefaultCombatKnockdown(200 + 200*resurrections) diff --git a/code/modules/surgery/advanced/revival.dm b/code/modules/surgery/advanced/revival.dm index c61ee330e6..0b864958a0 100644 --- a/code/modules/surgery/advanced/revival.dm +++ b/code/modules/surgery/advanced/revival.dm @@ -70,7 +70,7 @@ if(O.organ_flags & ORGAN_FAILING) O.applyOrganDamage(-5) var/list/policies = CONFIG_GET(keyed_list/policyconfig) - var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) + var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds var/late = timelimit && (tplus > timelimit) var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT] if(policy) diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index ef6d3a4fe5..4d37ed662d 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -50,7 +50,7 @@ TGS_PROTECT_DATUM(/datum/tgs_api) /datum/tgs_api/proc/ChatTargetedBroadcast(message, admin_only) return TGS_UNIMPLEMENTED -/datum/tgs_api/proc/ChatPrivateMessage(message, admin_only) +/datum/tgs_api/proc/ChatPrivateMessage(message, datum/tgs_chat_user/user) return TGS_UNIMPLEMENTED /datum/tgs_api/proc/SecurityLevel() diff --git a/code/modules/tgs/v3210/api.dm b/code/modules/tgs/v3210/api.dm index e0d00ad15d..5b41e6a89d 100644 --- a/code/modules/tgs/v3210/api.dm +++ b/code/modules/tgs/v3210/api.dm @@ -39,7 +39,7 @@ var/warned_custom_commands = FALSE /datum/tgs_api/v3210/ApiVersion() - return new /datum/tgs_version("3.2.1.0") + return new /datum/tgs_version("3.2.1.3") /datum/tgs_api/v3210/proc/trim_left(text) for (var/i = 1 to length(text)) @@ -180,7 +180,7 @@ ExportService(SERVICE_REQUEST_KILL_PROCESS) /datum/tgs_api/v3210/ChatChannelInfo() - return list() + return list() // :omegalul: /datum/tgs_api/v3210/ChatBroadcast(message, list/channels) if(channels) diff --git a/code/modules/tgs/v3210/commands.dm b/code/modules/tgs/v3210/commands.dm index a1949da444..4ccfc1a8a6 100644 --- a/code/modules/tgs/v3210/commands.dm +++ b/code/modules/tgs/v3210/commands.dm @@ -42,5 +42,11 @@ var/datum/tgs_chat_command/stc = new command_type var/datum/tgs_chat_user/user = new user.friendly_name = sender + + // Discord hack, fix the mention if it's only numbers (fuck you IRC trolls) + var/regex/discord_id_regex = regex(@"^[0-9]+$") + if(findtext(sender, discord_id_regex)) + sender = "<@[sender]>" + user.mention = sender return stc.Run(user, params) || TRUE diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm index 1dc98f811e..081543828e 100644 --- a/code/modules/tgs/v4/api.dm +++ b/code/modules/tgs/v4/api.dm @@ -114,13 +114,6 @@ /datum/tgs_api/v4/OnInitializationComplete() Export(TGS4_COMM_SERVER_PRIMED) - var/tgs4_secret_sleep_offline_sauce = 24051994 - var/old_sleep_offline = world.sleep_offline - world.sleep_offline = tgs4_secret_sleep_offline_sauce - sleep(1) - if(world.sleep_offline == tgs4_secret_sleep_offline_sauce) //if not someone changed it - world.sleep_offline = old_sleep_offline - /datum/tgs_api/v4/OnTopic(T) var/list/params = params2list(T) var/their_sCK = params[TGS4_INTEROP_ACCESS_IDENTIFIER] @@ -255,7 +248,7 @@ return instance_name /datum/tgs_api/v4/TestMerges() - return cached_test_merges + return cached_test_merges.Copy() /datum/tgs_api/v4/EndProcess() Export(TGS4_COMM_END_PROCESS) diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 8ca85faf05..466a986237 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -15,8 +15,10 @@ var/datum/tgs_revision_information/revision var/list/chat_channels + var/initialized = FALSE + /datum/tgs_api/v5/ApiVersion() - return new /datum/tgs_version("5.2.1") + return new /datum/tgs_version(TGS_DMAPI_VERSION) /datum/tgs_api/v5/OnWorldNew(minimum_required_security_level) server_port = world.params[DMAPI5_PARAM_SERVER_PORT] @@ -79,6 +81,7 @@ chat_channels = list() DecodeChannels(runtime_information) + initialized = TRUE return TRUE /datum/tgs_api/v5/proc/RequireInitialBridgeResponse() @@ -88,13 +91,6 @@ /datum/tgs_api/v5/OnInitializationComplete() Bridge(DMAPI5_BRIDGE_COMMAND_PRIME) - var/tgs4_secret_sleep_offline_sauce = 29051994 - var/old_sleep_offline = world.sleep_offline - world.sleep_offline = tgs4_secret_sleep_offline_sauce - sleep(1) - if(world.sleep_offline == tgs4_secret_sleep_offline_sauce) //if not someone changed it - world.sleep_offline = old_sleep_offline - /datum/tgs_api/v5/proc/TopicResponse(error_message = null) var/list/response = list() response[DMAPI5_RESPONSE_ERROR_MESSAGE] = error_message @@ -102,10 +98,13 @@ return json_encode(response) /datum/tgs_api/v5/OnTopic(T) + if(!initialized) + return FALSE //continue world/Topic + var/list/params = params2list(T) var/json = params[DMAPI5_TOPIC_DATA] if(!json) - return FALSE //continue world/Topic + return FALSE var/list/topic_parameters = json_decode(json) if(!topic_parameters) @@ -282,7 +281,7 @@ /datum/tgs_api/v5/TestMerges() RequireInitialBridgeResponse() - return test_merges + return test_merges.Copy() /datum/tgs_api/v5/EndProcess() Bridge(DMAPI5_BRIDGE_COMMAND_KILL) @@ -327,7 +326,7 @@ /datum/tgs_api/v5/ChatChannelInfo() RequireInitialBridgeResponse() - return chat_channels + return chat_channels.Copy() /datum/tgs_api/v5/proc/DecodeChannels(chat_update_json) var/list/chat_channels_json = chat_update_json[DMAPI5_CHAT_UPDATE_CHANNELS] diff --git a/config/awaymissionconfig.txt b/config/awaymissionconfig.txt index 768942c434..2663a206da 100644 --- a/config/awaymissionconfig.txt +++ b/config/awaymissionconfig.txt @@ -11,6 +11,7 @@ #_maps/RandomZLevels/away_mission/Academy.dmm #_maps/RandomZLevels/away_mission/wildwest.dmm #_maps/RandomZLevels/away_mission/challenge.dmm +_maps/RandomZLevels/away_mission/jungleresort.dmm #_maps/RandomZLevels/away_mission/moonoutpost19.dmm #_maps/RandomZLevels/away_mission/undergroundoutpost45.dmm #_maps/RandomZLevels/away_mission/caves.dmm diff --git a/config/config.txt b/config/config.txt index 7e2ff5da41..5be76972ab 100644 --- a/config/config.txt +++ b/config/config.txt @@ -375,6 +375,9 @@ NOTIFY_NEW_PLAYER_ACCOUNT_AGE 1 ##Name of the place to send people rejected by the bunker #PANIC_SERVER_NAME [Put the name here] +##Automated age verification, comment this out to not ask new users if they are 18+ +AGE_VERIFICATION + ## Uncomment to have the changelog file automatically open when a user connects and hasn't seen the latest changelog #AGGRESSIVE_CHANGELOG diff --git a/config/game_options.txt b/config/game_options.txt index bb6c5d8f01..bc5fdf940e 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -651,17 +651,17 @@ PENIS_MIN_INCHES_PREFS 1 PENIS_MAX_INCHES_PREFS 20 ## Body size configs, the feature will be disabled if both min and max have the same value. -BODY_SIZE_MIN 1 -BODY_SIZE_MAX 1 +BODY_SIZE_MIN 0.9 +BODY_SIZE_MAX 1.25 ## Pun-Pun movement slowdown given to characters with a body size smaller than this value, ## to compensate for their smaller hitbox. ## To disable, just make sure the value is lower than 'body_size_min' -THRESHOLD_BODY_SIZE_SLOWDOWN 0.85 +THRESHOLD_BODY_SIZE_PENALTY 1 ## Multiplier used in the smaller strides slowdown calculation. ## Doesn't apply to floating or crawling mobs. -BODY_SIZE_SLOWDOWN_MULTIPLIER 0.25 +BODY_SIZE_SLOWDOWN_MULTIPLIER 0 ## Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones. ALLOW_CUSTOM_SKINTONES diff --git a/html/changelogs/AutoChangeLog-pr-13521.yml b/html/changelogs/AutoChangeLog-pr-13521.yml new file mode 100644 index 0000000000..77aca8c363 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13521.yml @@ -0,0 +1,5 @@ +author: "DeltaFire15" +delete-after: True +changes: + - balance: "zeolites are now actual fermichems instead of being incredibly easy to make." + - bugfix: "Using syringes / droppers on chem heaters with beakers in them works again." diff --git a/html/changelogs/AutoChangeLog-pr-13567.yml b/html/changelogs/AutoChangeLog-pr-13567.yml new file mode 100644 index 0000000000..d51db8e3b8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13567.yml @@ -0,0 +1,8 @@ +author: "timothyteakettle" +delete-after: True +changes: + - tweak: "changeling stings retract upon turning into a slime puddle" + - tweak: "you cannot transform into a slime puddle with a no drop item in your hands" + - tweak: "slime puddles are now transparent and their colour looks more natural in comparison to the user" + - tweak: "slime puddles are now even slower" + - tweak: "slime puddles now get no protection from worn clothing" diff --git a/html/changelogs/AutoChangeLog-pr-13602.yml b/html/changelogs/AutoChangeLog-pr-13602.yml new file mode 100644 index 0000000000..24185b1792 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13602.yml @@ -0,0 +1,5 @@ +author: "Putnam3145" +delete-after: True +changes: + - rscadd: "A fallback for dynamic antag rolling that allows for it to just try between traitor, blood brothers, heretics, changeling, bloodsucker and devil until there are enough roundstart antags. This can also happen randomly anyway. Blood brothers and devil are disabled for now, but the code is there to enable them." + - rscadd: "A new storyteller, \"Grab Bag\", that forces the above round type." diff --git a/html/changelogs/AutoChangeLog-pr-13604.yml b/html/changelogs/AutoChangeLog-pr-13604.yml new file mode 100644 index 0000000000..2ac141215b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13604.yml @@ -0,0 +1,5 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - balance: "Brass welders are 50% faster at refueling" + - code_imp: "redoes self fueling welders in the code to be less speggie" diff --git a/html/changelogs/AutoChangeLog-pr-13618.yml b/html/changelogs/AutoChangeLog-pr-13618.yml new file mode 100644 index 0000000000..b301c39e6b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13618.yml @@ -0,0 +1,5 @@ +author: "Vynzill" +delete-after: True +changes: + - rscadd: "new gateway mission +mapadd: jungleresort map" diff --git a/html/changelogs/AutoChangeLog-pr-13629.yml b/html/changelogs/AutoChangeLog-pr-13629.yml new file mode 100644 index 0000000000..954f6972ec --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13629.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - rscdel: "anomalies no longer spawn in walls" diff --git a/html/changelogs/AutoChangeLog-pr-13630.yml b/html/changelogs/AutoChangeLog-pr-13630.yml new file mode 100644 index 0000000000..f7e80aaf9e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13630.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "you can now customize your size from 90% to 130%, going below 100% makes you have 10 less max health" diff --git a/html/changelogs/AutoChangeLog-pr-13632.yml b/html/changelogs/AutoChangeLog-pr-13632.yml new file mode 100644 index 0000000000..bf478ec97c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13632.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - bugfix: "time for memory loss message to show up when being revived is now correctly 300 seconds, instead of 30" diff --git a/html/changelogs/AutoChangeLog-pr-13633.yml b/html/changelogs/AutoChangeLog-pr-13633.yml new file mode 100644 index 0000000000..d9246cfff6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13633.yml @@ -0,0 +1,4 @@ +author: "ArchieBeepBoop" +delete-after: True +changes: + - bugfix: "Outlet Injector Mapping Asset Layer Fix" diff --git a/html/changelogs/AutoChangeLog-pr-13635.yml b/html/changelogs/AutoChangeLog-pr-13635.yml new file mode 100644 index 0000000000..21730d4cf5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13635.yml @@ -0,0 +1,4 @@ +author: "Hatterhat" +delete-after: True +changes: + - balance: "The bone gauntlets should be slightly less murderously punchy on the fast punches mode." diff --git a/html/changelogs/AutoChangeLog-pr-13639.yml b/html/changelogs/AutoChangeLog-pr-13639.yml new file mode 100644 index 0000000000..a511d0a909 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13639.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - tweak: "ASP 9mm and M1911 can now have suppressers added" diff --git a/html/changelogs/AutoChangeLog-pr-13641.yml b/html/changelogs/AutoChangeLog-pr-13641.yml new file mode 100644 index 0000000000..b0c429da75 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13641.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - balance: "Nerf combat knife damage" diff --git a/html/changelogs/AutoChangeLog-pr-13647.yml b/html/changelogs/AutoChangeLog-pr-13647.yml new file mode 100644 index 0000000000..b3211ee759 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13647.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - bugfix: "jacqueline spawns on boxstation" diff --git a/html/changelogs/AutoChangeLog-pr-13648.yml b/html/changelogs/AutoChangeLog-pr-13648.yml new file mode 100644 index 0000000000..4148230385 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13648.yml @@ -0,0 +1,13 @@ +author: "DeltaFire15" +delete-after: True +changes: + - bugfix: "The 'Your body is in a cloner' notification works again" + - bugfix: "Hijack implants should work properly again (or, at least better)" + - bugfix: "Liches are now good skeletons again instead of weak ones" + - bugfix: "The piratepad control cannot be destroyed again." + - bugfix: "Pirates have received new supplies of jetpacks instead of useless oxygen tanks" + - bugfix: "Ratvarian AIs are once again able to show their linked borgs Ratvar's light" + - bugfix: "Hijackers are once again unable to detonate borgs without being adjacent to the console" + - bugfix: "Automated annoucement systems and gulag ore consoles no longer waste emag charges" + - bugfix: "Automated announcement systems once again can be remote controlled by non-AIs with silicon access" + - bugfix: "APCs being hijacked multiple times at once is no longer possible, preventing some issues" diff --git a/html/changelogs/AutoChangeLog-pr-13653.yml b/html/changelogs/AutoChangeLog-pr-13653.yml new file mode 100644 index 0000000000..2f920da353 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13653.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - tweak: "Minor fixes to kilo" diff --git a/html/changelogs/AutoChangeLog-pr-13654.yml b/html/changelogs/AutoChangeLog-pr-13654.yml new file mode 100644 index 0000000000..cb67c6e6be --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13654.yml @@ -0,0 +1,4 @@ +author: "ArchieBeepBoop" +delete-after: True +changes: + - bugfix: "Jacqueen and the Christmas tree should no longer spawn abstract things that can cause shittons of runtimes." diff --git a/html/changelogs/AutoChangeLog-pr-13655.yml b/html/changelogs/AutoChangeLog-pr-13655.yml new file mode 100644 index 0000000000..6e48c84054 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13655.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - bugfix: "fixes held items proccing crossed when passing someone" diff --git a/html/changelogs/AutoChangeLog-pr-13656.yml b/html/changelogs/AutoChangeLog-pr-13656.yml new file mode 100644 index 0000000000..017f0d99c2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13656.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - admin: "Canceling events gives more time to stop from 10 to 30" diff --git a/html/changelogs/AutoChangeLog-pr-13657.yml b/html/changelogs/AutoChangeLog-pr-13657.yml new file mode 100644 index 0000000000..6f445f6b71 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13657.yml @@ -0,0 +1,4 @@ +author: "DeltaFire15" +delete-after: True +changes: + - bugfix: "The transmission sigil power drain works now" diff --git a/html/changelogs/AutoChangeLog-pr-13658.yml b/html/changelogs/AutoChangeLog-pr-13658.yml new file mode 100644 index 0000000000..09b22d38ad --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13658.yml @@ -0,0 +1,6 @@ +author: "DeltaFire15" +delete-after: True +changes: + - bugfix: "Scripture no longer sometimes eats part of its invocation." + - balance: "APCs and silicons are now more susceptible to powerdrains (by the power_drain() proc, which is rare)" + - balance: "Void Volt has been modified from a chant to a singular pulse." diff --git a/html/changelogs/AutoChangeLog-pr-13659.yml b/html/changelogs/AutoChangeLog-pr-13659.yml new file mode 100644 index 0000000000..85eee3b78d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13659.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - bugfix: "the load away mission verb won't crash the server now" diff --git a/html/changelogs/AutoChangeLog-pr-13661.yml b/html/changelogs/AutoChangeLog-pr-13661.yml new file mode 100644 index 0000000000..81b5a735dc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13661.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "added in-game age verification as an alternative to access requests" diff --git a/html/changelogs/AutoChangeLog-pr-13669.yml b/html/changelogs/AutoChangeLog-pr-13669.yml new file mode 100644 index 0000000000..c682500501 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13669.yml @@ -0,0 +1,4 @@ +author: "Arturlang" +delete-after: True +changes: + - tweak: "Being sacrificed by the cult no longer removes all hope of rescue." diff --git a/icons/mob/clothing/custom_w.dmi b/icons/mob/clothing/custom_w.dmi index 5b1fd0876c..10f7c5080a 100644 Binary files a/icons/mob/clothing/custom_w.dmi and b/icons/mob/clothing/custom_w.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 10b733bae4..3d1cbfa273 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi index e17d55dc85..77b2d114b9 100644 Binary files a/icons/obj/custom.dmi and b/icons/obj/custom.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 939ee0e009..d697c4619d 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index 35b6e08d0e..4a21fb41fd 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -529,3 +529,10 @@ path = /obj/item/clothing/under/custom/vest ckeywhitelist = list("maylowfox") +/datum/gear/donator/exo + name = "exo frame" + slot = SLOT_WEAR_SUIT + path = /obj/item/clothing/suit/custom/exo + ckeywhitelist = list("jesterz7") + + diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index bd928e75d5..4ef5a91a92 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -577,3 +577,11 @@ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi' mutantrace_variation = STYLE_DIGITIGRADE +/obj/item/clothing/suit/custom/exo + name = "Full ExoFrame" + desc = "A suit specially designed for those who live and breath hardware with custom tooled robotic manipulators for working with precision even on the most hazardous of jobs." + icon_state = "frame" + item_state = "frame" + icon = 'icons/obj/custom.dmi' + mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi' + mutantrace_variation = NONE diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm index a6a9d7a85f..de27723508 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm @@ -200,22 +200,23 @@ /datum/reagent/fermi/zeolites name = "Artificial Zeolites" - description = "Lab made Zeolite, used to clear radiation from people and items alike! Splashing just a small amount(5u) onto any item can clear away large amounts of contamination." + description = "Lab made Zeolite, used to clear radiation from people and items alike! Splashing just a small amount(5u) onto any item can clear away large amounts of contamination, as long as its purity is at least 0.7." pH = 8 color = "#FFDADA" - metabolization_rate = 8 * REAGENTS_METABOLISM //Metabolizes fast but heals a lot! - value = REAGENT_VALUE_COMMON + metabolization_rate = 8 * REAGENTS_METABOLISM //Metabolizes fast but heals a lot! Lasts far longer if more pure. + value = REAGENT_VALUE_RARE //Relatively hard to make now, might be fine with VERY_RARE instead depending on feedback. /datum/reagent/fermi/zeolites/on_mob_life(mob/living/carbon/M) + metabolization_rate = (4 / purity) * REAGENTS_METABOLISM //Metab rate directly influenced by purity. Linear. var/datum/component/radioactive/contamination = M.GetComponent(/datum/component/radioactive) - if(M.radiation > 0) - M.radiation -= min(M.radiation, 60) + if(M.radiation > 0) //hey so apparently pentetic literally purges 1/50 (2%) of the rad amount on someone per tick no matter the 'true' amount, sooo uhh time to tweak this some more.. + M.radiation -= clamp(round((M.radiation / 150) * (25 ** purity), 0.1), 0, M.radiation) //Purges between ~3% and ~16% of total rad amount, per tick, depending on purity. Exponential. if(contamination && contamination.strength > 0) - contamination.strength -= min(contamination.strength, 100) + contamination.strength -= min(contamination.strength, round(25 ** (0.5 + purity), 0.1)) //25 per tick at minimum purity; Tops out at ~125 per tick if purity is 1. Exponential. ..() /datum/reagent/fermi/zeolites/reaction_obj(obj/O, reac_volume) var/datum/component/radioactive/contamination = O.GetComponent(/datum/component/radioactive) - if(contamination && reac_volume >= 5) + if(contamination && reac_volume >= 5 && purity >= 0.7) //you need at least 0.7 purity to instantly purge all contam on an object. qdel(contamination) return diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index da9fd34cd6..f4b8850f55 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -591,19 +591,21 @@ /datum/chemical_reaction/fermi/zeolites name = "Zeolites" id = /datum/reagent/fermi/zeolites - results = list(/datum/reagent/fermi/zeolites = 5) //We make a lot! + results = list(/datum/reagent/fermi/zeolites = 5) //We make a lot! - But it's now somewhat dangerous, and needs a bit of uranium to catalyze the reaction required_reagents = list(/datum/reagent/medicine/potass_iodide = 1, /datum/reagent/aluminium = 1, /datum/reagent/silicon = 1, /datum/reagent/oxygen = 1) + required_catalysts = list(/datum/reagent/uranium = 5) //FermiChem vars: - OptimalTempMin = 300 - OptimalTempMax = 900 - ExplodeTemp = 1000 //check to see overflow doesn't happen! - OptimalpHMin = 4.0 - OptimalpHMax = 6.0 + OptimalTempMin = 500 + OptimalTempMax = 750 + ExplodeTemp = 850 + OptimalpHMin = 2.8 + OptimalpHMax = 5 //2.2 ph levels of optimal ph zone - centered at 3.9 - ph of ingredients mixed at equal values is 9.55; ph of result is 8. ReactpHLim = 4 //CatalystFact = 0 - CurveSharpT = 4 - CurveSharppH = 0 - ThermicConstant = 0 - HIonRelease = 0.01 - RateUpLim = 15 + CurveSharpT = 1.5 + CurveSharppH = 3 + ThermicConstant = 7 + HIonRelease = -0.15 + RateUpLim = 4 + PurityMin = 0.5 //Good luck. FermiChem = TRUE diff --git a/tgstation.dme b/tgstation.dme index 14a6a7cd10..2008f39c3d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -751,6 +751,7 @@ #include "code\game\gamemodes\dynamic\dynamic_rulesets.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_latejoin.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm" +#include "code\game\gamemodes\dynamic\dynamic_rulesets_minor.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm" #include "code\game\gamemodes\dynamic\dynamic_storytellers.dm" #include "code\game\gamemodes\eldritch_cult\eldritch_cult.dm" @@ -1804,6 +1805,7 @@ #include "code\modules\awaymissions\mission_code\caves.dm" #include "code\modules\awaymissions\mission_code\centcomAway.dm" #include "code\modules\awaymissions\mission_code\challenge.dm" +#include "code\modules\awaymissions\mission_code\jungleresort.dm" #include "code\modules\awaymissions\mission_code\moonoutpost19.dm" #include "code\modules\awaymissions\mission_code\murderdome.dm" #include "code\modules\awaymissions\mission_code\research.dm" diff --git a/tgui/packages/tgui/interfaces/RoboticsControlConsole.js b/tgui/packages/tgui/interfaces/RoboticsControlConsole.js index 746cb7ad9c..1520b4093b 100644 --- a/tgui/packages/tgui/interfaces/RoboticsControlConsole.js +++ b/tgui/packages/tgui/interfaces/RoboticsControlConsole.js @@ -8,6 +8,7 @@ export const RoboticsControlConsole = (props, context) => { const [tab, setTab] = useSharedState(context, 'tab', 1); const { can_hack, + can_convert, cyborgs = [], drones = [], } = data; @@ -34,7 +35,9 @@ export const RoboticsControlConsole = (props, context) => { {tab === 1 && ( - + )} {tab === 2 && ( @@ -45,7 +48,7 @@ export const RoboticsControlConsole = (props, context) => { }; const Cyborgs = (props, context) => { - const { cyborgs, can_hack } = props; + const { cyborgs, can_hack, can_convert } = props; const { act, data } = useBackend(context); if (!cyborgs.length) { return ( @@ -70,6 +73,15 @@ const Cyborgs = (props, context) => { ref: cyborg.ref, })} /> )} + {!!can_convert && !cyborg.servant && ( +