Merge remote-tracking branch 'upstream/master' into funnylore

This commit is contained in:
Dahlular
2021-07-06 08:17:26 -06:00
186 changed files with 9568 additions and 7332 deletions
+3 -6
View File
@@ -3,10 +3,7 @@
"./tgui"
],
"workbench.editorAssociations": [
{
"filenamePattern": "*.dmi",
"viewType": "imagePreview.previewEditor"
}
]
"workbench.editorAssociations": {
"*.dmi": "imagePreview.previewEditor"
}
}
@@ -523,7 +523,7 @@
/area/ruin/unpowered/xenonest)
"kp" = (
/obj/structure/alien/weeds,
/obj/item/reagent_containers/syringe/alien,
/obj/item/dnainjector/giant,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/xenonest)
"lG" = (
@@ -231,7 +231,7 @@
"eZ" = (/obj/effect/mob_spawn/human/lavaland_syndicate{dir = 4; icon_state = "sleeper_s"},/turf/open/floor/plasteel/grimy,/area/ruin/unpowered/syndicate_lava_base/dormitories)
"fa" = (/obj/structure/cable/yellow{icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 9},/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/main)
"fb" = (/obj/structure/bed,/obj/item/bedsheet,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/white/side{dir = 5},/area/ruin/unpowered/syndicate_lava_base/virology)
"fc" = (/obj/machinery/light/small{dir = 8},/obj/machinery/airalarm/syndicate{dir = 4; pixel_x = -24},/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 8},/obj/machinery/autolathe/hacked,/obj/item/stack/sheet/glass/fifty,/obj/item/stack/sheet/metal/fifty,/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
"fc" = (/obj/machinery/light/small{dir = 8},/obj/machinery/airalarm/syndicate{dir = 4; pixel_x = -24},/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 8},/obj/item/stack/sheet/glass/fifty,/obj/item/stack/sheet/metal/fifty,/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
"fe" = (/obj/effect/turf_decal/stripes/corner,/obj/machinery/firealarm{dir = 4; pixel_x = 26},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
"ff" = (/obj/structure/bed,/obj/item/bedsheet,/obj/machinery/light/small{dir = 1},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel/white/side{dir = 5},/area/ruin/unpowered/syndicate_lava_base/virology)
"fh" = (/obj/structure/grille,/obj/structure/window/plastitanium,/turf/open/floor/plating,/area/ruin/unpowered/syndicate_lava_base/virology)
@@ -0,0 +1,707 @@
"aa" = (/turf/closed/indestructible/riveted,/area/awaymission/stargate/building/mountain)
"ab" = (/turf/closed/mineral/random/labormineral/jungle,/area/awaymission/stargate/building/mountain)
"ac" = (/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain)
"ad" = (/obj/structure/table/wood,/obj/item/reagent_containers/food/drinks/trophy,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"ae" = (/obj/item/flashlight/lantern{icon_state = "lantern-on"},/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain)
"af" = (/obj/structure/flora/ausbushes/ywflowers,/mob/living/simple_animal/chicken,/turf/open/floor/grass,/area/awaymission/stargate)
"ag" = (/obj/structure/flora/rock/jungle,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate)
"ah" = (/obj/item/storage/firstaid/regular,/turf/open/floor/wood,/area/awaymission/stargate/building)
"ai" = (/obj/structure/rack/shelf,/obj/item/clothing/suit/armor/riot/knight/yellow,/obj/item/shield/riot/tower,/obj/item/clothing/head/helmet/knight/yellow,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aj" = (/turf/closed/indestructible/necropolis,/area/awaymission/stargate/building/flesh)
"ak" = (/turf/open/indestructible/necropolis/air,/area/awaymission/stargate/building/flesh)
"al" = (/obj/structure/destructible/cult/talisman,/obj/item/dragons_blood,/turf/open/indestructible/necropolis/air,/area/awaymission/stargate/building/flesh)
"am" = (/mob/living/simple_animal/hostile/carrion,/turf/open/indestructible/necropolis/air,/area/awaymission/stargate/building/flesh)
"an" = (/obj/structure/table/wood,/obj/item/nullrod/egyptian,/turf/open/floor/wood,/area/awaymission/stargate/building)
"ao" = (/obj/item/bedsheet/cult,/obj/effect/mob_spawn/human/villager,/turf/open/floor/wood,/area/awaymission/stargate/building)
"ap" = (/obj/structure/table/wood,/turf/open/floor/wood,/area/awaymission/stargate/building)
"aq" = (/obj/structure/table/wood,/obj/item/mop,/obj/item/reagent_containers/glass/bucket,/obj/item/soap,/obj/machinery/light,/turf/open/floor/wood,/area/awaymission/stargate/building)
"ar" = (/obj/item/bedsheet/orange,/obj/effect/mob_spawn/human/villager,/turf/open/floor/wood,/area/awaymission/stargate/building)
"as" = (/obj/item/bedsheet/brown,/obj/effect/mob_spawn/human/villager,/turf/open/floor/wood,/area/awaymission/stargate/building)
"at" = (/obj/item/bedsheet/black,/obj/effect/mob_spawn/human/villager,/turf/open/floor/wood,/area/awaymission/stargate/building)
"au" = (/obj/item/bedsheet/red,/obj/effect/mob_spawn/human/villager,/turf/open/floor/wood,/area/awaymission/stargate/building)
"av" = (/obj/machinery/aug_manipulator,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"aw" = (/mob/living/simple_animal/hostile/netherworld/migo,/turf/open/floor/plasteel/cult,/area/awaymission/stargate/building)
"ax" = (/obj/structure/rack/shelf,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"ay" = (/obj/structure/rack/shelf,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"az" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aA" = (/obj/item/clothing/mask/gas,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"aB" = (/obj/item/clothing/shoes/sneakers/black,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"aC" = (/obj/structure/closet/supplypod/centcompod,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"aD" = (/obj/item/clothing/gloves/color/fyellow/old,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"aE" = (/obj/item/clothing/under/color/grey,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"aF" = (/obj/item/twohanded/spear,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"aG" = (/obj/item/gun/ballistic/shotgun/riot,/obj/item/gun/ballistic/shotgun/riot{pixel_x = 3; pixel_y = -3},/obj/structure/rack/shelf,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aH" = (/obj/structure/table/wood,/obj/machinery/microwave,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aI" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aJ" = (/obj/structure/table/wood,/obj/item/kitchen/knife,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aK" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aL" = (/obj/structure/sink{dir = 8; pixel_x = -12; pixel_y = 2},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aM" = (/obj/machinery/door/airlock/wood,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aN" = (/obj/structure/dresser,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aO" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/cloth/thirty,/obj/item/stack/sheet/cloth/thirty,/turf/open/floor/wood,/area/awaymission/stargate/building)
"aP" = (/obj/structure/closet/crate/wooden,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aQ" = (/obj/machinery/light{dir = 8},/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aR" = (/obj/structure/bed,/obj/item/bedsheet/brown,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aS" = (/obj/structure/rack/shelf,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"aT" = (/turf/open/floor/cobble/corner{icon_state = "cobble_corner"; dir = 1},/area/awaymission/stargate)
"aU" = (/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate)
"aV" = (/turf/open/floor/cobble/corner,/area/awaymission/stargate)
"aW" = (/obj/structure/flora/rock,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"aX" = (/turf/open/floor/cobble,/area/awaymission/stargate)
"aY" = (/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate)
"aZ" = (/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate)
"ba" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/cobble,/area/awaymission/stargate)
"bb" = (/turf/open/floor/cobble/corner{icon_state = "cobble_corner"; dir = 8},/area/awaymission/stargate)
"bc" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas/clown_hat,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"bd" = (/turf/open/floor/cobble/side,/area/awaymission/stargate)
"be" = (/turf/open/floor/cobble/corner{icon_state = "cobble_corner"; dir = 4},/area/awaymission/stargate)
"bf" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate)
"bg" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble,/area/awaymission/stargate)
"bh" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate)
"bi" = (/obj/structure/flora/grass/jungle,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"bj" = (/mob/living/simple_animal/butterfly,/turf/open/floor/cobble,/area/awaymission/stargate)
"bk" = (/obj/effect/landmark/awaystart,/turf/open/floor/cobble,/area/awaymission/stargate)
"bl" = (/mob/living/simple_animal/butterfly,/turf/open/floor/cobble/side,/area/awaymission/stargate)
"bm" = (/obj/item/lighter,/turf/open/floor/cobble,/area/awaymission/stargate)
"bn" = (/obj/item/grown/log/tree,/turf/open/floor/cobble,/area/awaymission/stargate)
"bo" = (/mob/living/simple_animal/butterfly,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate)
"bp" = (/obj/structure/bonfire,/turf/open/floor/cobble,/area/awaymission/stargate)
"bq" = (/obj/structure/barricade/sandbags,/obj/structure/barricade/sandbags,/turf/open/floor/cobble,/area/awaymission/stargate)
"br" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble,/area/awaymission/stargate)
"bs" = (/obj/structure/fence{dir = 4},/turf/open/floor/plating/dirt,/area/awaymission/stargate/building/mountain)
"bt" = (/obj/structure/fence/door,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain)
"bu" = (/obj/structure/fence{dir = 4},/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain)
"bv" = (/obj/structure/falsewall/abductor,/turf/open/space/basic,/area/awaymission/stargate/building)
"bw" = (/obj/machinery/door/airlock/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"bx" = (/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"by" = (/turf/closed/wall/mineral/abductor,/area/awaymission/stargate/building)
"bz" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate)
"bA" = (/obj/effect/decal/cleanable/blood/gibs/human/body,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"bB" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate)
"bC" = (/obj/machinery/hydroponics/soil,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"bD" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate)
"bE" = (/mob/living/simple_animal/hostile/netherworld,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"bF" = (/obj/structure/fence{dir = 4},/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate)
"bG" = (/obj/structure/fence/door,/turf/open/floor/cobble,/area/awaymission/stargate)
"bH" = (/obj/structure/fence{dir = 4},/turf/open/floor/cobble,/area/awaymission/stargate)
"bI" = (/obj/structure/fence{dir = 4},/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate)
"bJ" = (/obj/machinery/light{dir = 8},/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"bK" = (/obj/structure/table/abductor,/obj/item/surgical_drapes,/obj/item/scalpel/alien,/obj/item/cautery/alien,/obj/item/circular_saw/alien,/obj/item/hemostat/alien,/obj/item/retractor/alien,/obj/item/surgicaldrill/alien,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"bL" = (/obj/structure/table/wood/fancy/blackred,/obj/machinery/chem_dispenser/drinks,/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/carpet/orange,/area/awaymission/stargate/building)
"bM" = (/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"bN" = (/obj/structure/chair/stool/alien,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"bO" = (/obj/structure/table/optable/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"bP" = (/obj/structure/chair/sofa{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"bQ" = (/obj/effect/decal/remains/robot,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"bR" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/open/floor/grass,/area/awaymission/stargate)
"bS" = (/obj/structure/flora/junglebush/large,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"bT" = (/obj/machinery/light{dir = 8},/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"bU" = (/obj/structure/door_assembly/door_assembly_abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"bV" = (/obj/effect/decal/remains/xeno,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"bW" = (/obj/effect/decal/cleanable/semen,/obj/structure/table/optable/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"bX" = (/obj/item/clothing/suit/space/hardsuit/lavaknight,/turf/open/indestructible/necropolis/air,/area/awaymission/stargate/building/flesh)
"bY" = (/obj/machinery/abductor/gland_dispenser,/turf/open/floor/plating/abductor{initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/awaymission/stargate/building)
"bZ" = (/obj/structure/reagent_dispensers/keg/semen,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building)
"ca" = (/obj/machinery/abductor/experiment{team_number = 100},/turf/open/floor/plating/abductor{initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/awaymission/stargate/building)
"cb" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/cobble,/area/awaymission/stargate)
"cc" = (/turf/open/floor/concrete,/area/awaymission/stargate)
"cd" = (/turf/open/floor/concrete/smooth,/area/awaymission/stargate)
"cf" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/cobble,/area/awaymission/stargate)
"cg" = (/obj/effect/decal/cleanable/blood/gibs/human,/turf/open/floor/cobble,/area/awaymission/stargate)
"ch" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate)
"ci" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate)
"cj" = (/obj/machinery/door/airlock/wood/glass,/obj/structure/barricade/wooden/crude,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"ck" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate)
"cl" = (/obj/effect/decal/remains/human,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate)
"cm" = (/obj/effect/decal/cleanable/blood/gibs,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate)
"cn" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate)
"co" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/cobble/corner,/area/awaymission/stargate)
"cp" = (/mob/living/simple_animal/hostile/hs13mimic,/turf/open/floor/grass,/area/awaymission/stargate)
"cq" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/cobble,/area/awaymission/stargate)
"cr" = (/obj/effect/decal/cleanable/blood/gibs/torso,/turf/open/floor/cobble,/area/awaymission/stargate)
"cs" = (/turf/open/floor/wood,/area/awaymission/stargate/building)
"ct" = (/obj/effect/decal/cleanable/blood/gibs,/turf/open/floor/cobble,/area/awaymission/stargate)
"cu" = (/obj/effect/decal/remains/human,/turf/open/floor/cobble,/area/awaymission/stargate)
"cv" = (/obj/structure/closet/crate,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/turf/open/floor/mineral/titanium/yellow,/area/awaymission/stargate/building)
"cw" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/cobble,/area/awaymission/stargate)
"cx" = (/obj/structure/table/reinforced,/obj/item/robot_module/clown,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"cy" = (/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/destroyer,/turf/open/floor/cobble,/area/awaymission/stargate)
"cz" = (/mob/living/simple_animal/hostile/netherworld/migo,/turf/open/floor/cobble,/area/awaymission/stargate)
"cB" = (/obj/structure/statue/bananium/clown,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate)
"cD" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble/side,/area/awaymission/stargate)
"cE" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side,/area/awaymission/stargate)
"cF" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/cobble/side,/area/awaymission/stargate)
"cG" = (/obj/effect/decal/remains/human,/turf/open/floor/cobble/side,/area/awaymission/stargate)
"cH" = (/obj/effect/decal/remains/xeno,/turf/open/floor/cobble/side,/area/awaymission/stargate)
"cI" = (/obj/structure/flora/tree/palm,/obj/structure/flora/ausbushes/ywflowers,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"cJ" = (/obj/effect/decal/cleanable/blood/gibs/torso,/turf/open/floor/cobble/side,/area/awaymission/stargate)
"cK" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/cobble/side,/area/awaymission/stargate)
"db" = (/obj/structure/table/wood,/obj/item/flashlight/lantern{icon_state = "lantern-on"},/turf/open/floor/wood,/area/awaymission/stargate/building)
"dt" = (/turf/closed/wall/mineral/bananium,/area/awaymission/stargate/building)
"dz" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/turf/open/floor/wood,/area/awaymission/stargate/building)
"dO" = (/obj/item/gun/ballistic/shotgun/riot,/obj/item/gun/ballistic/shotgun/riot,/obj/structure/rack/shelf,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"dQ" = (/obj/structure/flora/junglebush/c,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate)
"dT" = (/obj/machinery/vending/hydronutrients,/turf/open/floor/wood,/area/awaymission/stargate/building)
"ea" = (/obj/machinery/computer/rdconsole/core,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"ee" = (/obj/structure/chair/wood{dir = 1},/turf/open/floor/wood,/area/awaymission/stargate/building)
"el" = (/obj/structure/flora/rock/jungle,/turf/open/floor/grass,/area/awaymission/stargate)
"et" = (/obj/effect/decal/cleanable/blood/gibs/up,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"eJ" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/open/floor/wood,/area/awaymission/stargate/building)
"eL" = (/obj/structure/kitchenspike,/turf/open/floor/wood,/area/awaymission/stargate/building)
"eM" = (/obj/effect/decal/cleanable/blood/gibs/human,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"eQ" = (/obj/structure/table/wood,/obj/item/storage/toolbox/mechanical/old,/obj/item/shovel,/obj/item/pickaxe,/turf/open/floor/wood,/area/awaymission/stargate/building)
"eZ" = (/obj/machinery/light{dir = 4},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"fm" = (/obj/structure/table/plasmaglass,/obj/item/ashtray,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"fB" = (/obj/structure/table/wood,/obj/item/kitchen/rollingpin,/turf/open/floor/wood,/area/awaymission/stargate/building)
"fN" = (/obj/machinery/door/airlock/wood,/turf/open/floor/wood,/area/awaymission/stargate/building)
"fO" = (/obj/structure/flora/junglebush/b,/turf/open/floor/grass,/area/awaymission/stargate)
"fU" = (/obj/structure/table/wood,/obj/item/reagent_containers/glass/bottle/charcoal,/obj/item/reagent_containers/glass/bottle/charcoal,/turf/open/floor/wood,/area/awaymission/stargate/building)
"gC" = (/obj/structure/flora/grass/jungle/b,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate)
"gI" = (/obj/structure/mineral_door/woodrustic,/turf/open/floor/wood,/area/awaymission/stargate/building)
"hc" = (/obj/structure/chair/sofa/left{dir = 1},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"he" = (/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"hm" = (/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain)
"hs" = (/turf/closed/wall/mineral/cult/artificer,/area/awaymission/stargate/building)
"ht" = (/obj/structure/flora/rock/pile/largejungle,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate)
"hC" = (/obj/structure/flora/junglebush/b,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate)
"hK" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"hQ" = (/obj/structure/flora/junglebush,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate)
"ik" = (/obj/machinery/shower{dir = 8; pixel_y = -4},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"il" = (/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"iA" = (/obj/machinery/conveyor{dir = 10; id = "mining_internal"},/turf/open/floor/wood,/area/awaymission/stargate/building)
"iX" = (/obj/structure/flora/grass/jungle/b,/mob/living/simple_animal/butterfly,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"je" = (/obj/structure/bed,/obj/item/bedsheet,/turf/open/floor/wood,/area/awaymission/stargate/building)
"jf" = (/obj/structure/closet/crate/wooden,/obj/item/twohanded/fireaxe/boneaxe,/turf/open/floor/wood,/area/awaymission/stargate/building)
"jD" = (/turf/open/floor/carpet,/area/awaymission/stargate/building)
"jF" = (/obj/structure/table/wood/fancy/black,/obj/item/clothing/head/nemes,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building)
"jH" = (/obj/structure/flora/ausbushes/reedbush,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"jR" = (/obj/machinery/rnd/production/protolathe,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"jX" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/glass/fifty,/obj/item/stack/sheet/glass/fifty,/turf/open/floor/wood,/area/awaymission/stargate/building)
"jZ" = (/obj/structure/flora/grass/jungle,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate)
"ke" = (/obj/structure/flora/tree/desertdead,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"ki" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"kp" = (/obj/machinery/light,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"kM" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"kQ" = (/obj/machinery/autolathe,/turf/open/floor/wood,/area/awaymission/stargate/building)
"lg" = (/obj/structure/table/optable,/obj/effect/decal/cleanable/blood,/turf/open/floor/wood,/area/awaymission/stargate/building)
"ln" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/mineral/wood/fifty,/obj/item/stack/sheet/mineral/wood/fifty,/turf/open/floor/wood,/area/awaymission/stargate/building)
"lt" = (/obj/machinery/chem_heater,/turf/open/floor/wood,/area/awaymission/stargate/building)
"ma" = (/obj/structure/reagent_dispensers/water_cooler,/turf/open/floor/wood,/area/awaymission/stargate/building)
"mb" = (/obj/structure/rack/shelf,/obj/item/storage/box/lethalshot,/obj/item/storage/box/lethalshot,/obj/item/storage/box/lethalshot,/obj/item/storage/box/lethalshot,/obj/item/storage/box/lethalshot,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"md" = (/obj/structure/table/wood,/obj/item/reagent_containers/food/drinks/bottle/wine,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"me" = (/obj/structure/table/wood,/obj/item/storage/fancy/candle_box,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"mt" = (/obj/machinery/door/airlock/wood/glass,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"mv" = (/obj/machinery/chem_dispenser,/turf/open/floor/wood,/area/awaymission/stargate/building)
"mx" = (/obj/structure/table/wood,/obj/item/storage/box/drinkingglasses,/obj/item/storage/box/drinkingglasses,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"mB" = (/obj/machinery/gateway{dir = 6},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"mD" = (/mob/living/simple_animal/butterfly,/turf/open/water/jungle,/area/awaymission/stargate)
"mF" = (/obj/machinery/conveyor_switch/oneway{id = "mining_internal"; name = "mining conveyor"},/turf/open/floor/wood,/area/awaymission/stargate/building)
"mJ" = (/obj/structure/flora/tree/palm,/turf/open/floor/grass,/area/awaymission/stargate)
"mT" = (/turf/open/indestructible/cobble/side{dir = 1},/area/awaymission/stargate)
"na" = (/obj/structure/sink{dir = 8; pixel_x = -12; pixel_y = 2},/turf/open/floor/wood,/area/awaymission/stargate/building)
"nd" = (/obj/structure/flora/tree/palm,/obj/structure/flora/ausbushes/brflowers,/turf/open/floor/grass,/area/awaymission/stargate)
"nh" = (/obj/effect/decal/cleanable/blood/gibs,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"nm" = (/obj/structure/bonfire,/turf/open/floor/wood,/area/awaymission/stargate/building)
"nn" = (/obj/structure/table/wood/fancy/blackred,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building)
"nL" = (/obj/structure/table/reinforced,/obj/item/storage/backpack/duffelbag/med/surgery,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"nR" = (/obj/structure/table/wood/fancy/black,/obj/item/reagent_containers/food/drinks/trophy,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building)
"nX" = (/obj/machinery/light{dir = 8; light_color = "#e8eaff"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"nY" = (/obj/structure/flora/rock/pile/largejungle,/turf/open/floor/grass,/area/awaymission/stargate)
"of" = (/obj/effect/spawner/structure/window,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"oh" = (/obj/machinery/smartfridge/chemistry,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building)
"ox" = (/obj/structure/chair/sofa/left{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"oz" = (/obj/structure/chair/sofa{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"oQ" = (/mob/living/simple_animal/chicken,/turf/open/floor/grass,/area/awaymission/stargate)
"oS" = (/obj/machinery/gateway/centeraway,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"oX" = (/obj/machinery/light{dir = 8},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"pd" = (/obj/machinery/light{dir = 4},/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"pm" = (/obj/structure/table/wood,/obj/item/lighter,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"pu" = (/turf/closed/wall/mineral/cult,/area/awaymission/stargate/building)
"pV" = (/obj/structure/flora/junglebush/large,/turf/open/floor/grass,/area/awaymission/stargate)
"qf" = (/obj/structure/flora/rock/jungle,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"qw" = (/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate/building/mountain)
"qC" = (/obj/machinery/light{dir = 4},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"qD" = (/obj/structure/flora/ausbushes/brflowers,/turf/open/floor/grass,/area/awaymission/stargate)
"qK" = (/obj/structure/falsewall/sandstone,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"qS" = (/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain)
"qU" = (/obj/structure/sink/puddle,/turf/open/floor/grass,/area/awaymission/stargate)
"rh" = (/obj/effect/decal/cleanable/blood,/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"rt" = (/obj/machinery/light{dir = 8},/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"ry" = (/obj/structure/flora/junglebush/large,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate)
"rC" = (/obj/structure/flora/ausbushes/brflowers,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"rU" = (/obj/structure/table/wood/fancy/blackred,/obj/machinery/reagentgrinder,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building)
"rX" = (/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building)
"sn" = (/obj/machinery/door/airlock/wood/glass,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"sE" = (/obj/structure/flora/ausbushes/palebush,/turf/open/floor/grass,/area/awaymission/stargate)
"sL" = (/turf/closed/wall/mineral/wood/nonmetal,/area/awaymission/stargate/building)
"sM" = (/obj/structure/flora/ausbushes/ywflowers,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"sW" = (/obj/structure/flora/tree/palm,/obj/structure/flora/grass/jungle/b,/turf/open/floor/grass,/area/awaymission/stargate)
"tc" = (/obj/structure/flora/junglebush,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"tj" = (/obj/structure/falsewall/sandstone,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building)
"tz" = (/obj/structure/table/wood,/obj/item/twohanded/bonespear,/turf/open/floor/wood,/area/awaymission/stargate/building)
"tC" = (/obj/structure/chair/sofa/right{dir = 1},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"tI" = (/obj/machinery/light{dir = 4; light_color = "#c1caff"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"tN" = (/obj/structure/chair/wood{dir = 8},/turf/open/floor/wood,/area/awaymission/stargate/building)
"ua" = (/obj/structure/barricade/wooden,/obj/effect/decal/cleanable/blood/tracks{dir = 8},/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"uA" = (/obj/structure/chair/wood{dir = 8},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"uB" = (/obj/structure/flora/ausbushes/ppflowers,/turf/open/floor/grass,/area/awaymission/stargate)
"uI" = (/turf/open/indestructible/cobble/side{dir = 8},/area/awaymission/stargate)
"uO" = (/mob/living/simple_animal/cow,/turf/open/floor/grass,/area/awaymission/stargate)
"uR" = (/turf/open/indestructible/cobble/corner,/area/awaymission/stargate)
"vc" = (/obj/structure/table/wood,/obj/item/clothing/mask/surgical,/obj/item/clothing/suit/apron/surgical,/obj/item/clothing/gloves/color/latex,/turf/open/floor/wood,/area/awaymission/stargate/building)
"vf" = (/obj/structure/table/wood,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"vh" = (/obj/structure/mineral_door/wood,/obj/structure/barricade/wooden/crude,/turf/open/floor/wood,/area/awaymission/stargate/building)
"vu" = (/mob/living/simple_animal/hostile/hs13mimic,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"vv" = (/obj/effect/spawner/structure/window,/turf/open/floor/wood,/area/awaymission/stargate/building)
"vz" = (/obj/structure/table/wood/fancy/black,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building)
"vM" = (/obj/structure/closet/crate/wooden,/turf/open/floor/carpet/red,/area/awaymission/stargate/building)
"vO" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"wF" = (/obj/structure/rack/shelf,/obj/item/melee/classic_baton/telescopic,/obj/item/melee/classic_baton/telescopic,/obj/item/melee/classic_baton/telescopic,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"wL" = (/obj/structure/flora/ausbushes/palebush,/obj/structure/flora/ausbushes/ppflowers,/turf/open/floor/grass,/area/awaymission/stargate)
"wP" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"wZ" = (/obj/machinery/door/airlock/wood,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"xm" = (/obj/structure/table/wood/fancy,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"xn" = (/turf/open/indestructible/cobble,/area/awaymission/stargate)
"xG" = (/obj/structure/chair/wood{dir = 4},/turf/open/floor/wood,/area/awaymission/stargate/building)
"xK" = (/obj/structure/table/wood,/obj/item/shield/riot/buckler,/obj/item/shield/riot/buckler,/obj/item/shield/riot/buckler,/obj/item/shield/riot/buckler,/turf/open/floor/wood,/area/awaymission/stargate/building)
"xT" = (/obj/structure/chair/sofa/right{dir = 1},/obj/machinery/light,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"yv" = (/turf/open/indestructible/cobble/corner{dir = 1},/area/awaymission/stargate)
"yw" = (/obj/structure/reagent_dispensers/keg/aphro/strong,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"yA" = (/obj/structure/flora/junglebush/b,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"yC" = (/obj/structure/table/wood/fancy/blackred,/obj/structure/table/wood/fancy/blackred,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building)
"yF" = (/obj/structure/flora/junglebush,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"yM" = (/obj/structure/table/wood,/obj/item/kitchen/knife,/turf/open/floor/wood,/area/awaymission/stargate/building)
"yO" = (/obj/structure/table/wood/fancy/black,/obj/machinery/light{dir = 1; light_color = "#cee5d2"},/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building)
"yT" = (/obj/machinery/hydroponics/soil,/turf/open/floor/grass,/area/awaymission/stargate)
"yX" = (/obj/structure/fence{dir = 4},/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"yZ" = (/turf/open/water/jungle,/area/awaymission/stargate)
"zn" = (/obj/structure/chair/stool/bar,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"zD" = (/obj/structure/closet/crate/wooden,/obj/item/clothing/suit/armor/bone,/obj/item/clothing/head/helmet/skull,/obj/item/clothing/gloves/bracer,/obj/item/clothing/accessory/talisman,/turf/open/floor/wood,/area/awaymission/stargate/building)
"zW" = (/obj/effect/rune/apocalypse,/obj/structure/spawner/nether,/turf/open/floor/plasteel/cult,/area/awaymission/stargate/building)
"Aw" = (/obj/structure/table/wood,/obj/item/storage/toolbox/mechanical/old,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Az" = (/obj/structure/dresser,/turf/open/floor/wood,/area/awaymission/stargate/building)
"AA" = (/obj/structure/table/wood,/obj/item/stack/sheet/leather,/obj/item/stack/sheet/leather,/obj/item/stack/sheet/leather,/obj/item/stack/sheet/leather,/obj/item/stack/sheet/leather,/turf/open/floor/wood,/area/awaymission/stargate/building)
"AC" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"AO" = (/obj/machinery/door/airlock/wood/glass,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Be" = (/obj/effect/decal/cleanable/blood/gibs/up,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"BC" = (/obj/structure/flora/ausbushes/palebush,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"BI" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain)
"BP" = (/obj/machinery/light,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"BR" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"BZ" = (/obj/structure/table/wood/fancy/black,/obj/item/export/bottle/champagne,/obj/item/reagent_containers/food/drinks/drinkingglass,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"Cc" = (/obj/structure/table/wood/fancy/blackred,/obj/machinery/chem_dispenser/drinks/beer/fullupgrade,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building)
"Cp" = (/obj/structure/chair/sofa/right{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"Cq" = (/turf/open/floor/plasteel/cult,/area/awaymission/stargate/building)
"Ct" = (/obj/machinery/smartfridge/drying_rack,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Cy" = (/obj/machinery/computer/operating,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"Df" = (/obj/machinery/gateway{dir = 1},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"Di" = (/obj/structure/flora/ausbushes/ppflowers,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"Dj" = (/obj/machinery/light{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"Dk" = (/turf/open/floor/mineral/titanium/yellow,/area/awaymission/stargate/building)
"Dr" = (/obj/machinery/light{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"Dx" = (/obj/structure/chair/sofa/left{dir = 1},/obj/machinery/light,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"Dz" = (/obj/machinery/light{dir = 4},/obj/structure/bed,/obj/effect/decal/cleanable/semen,/turf/open/floor/carpet/red,/area/awaymission/stargate/building)
"DD" = (/obj/structure/table/wood/fancy/black,/obj/structure/table/wood/fancy/black,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building)
"DE" = (/mob/living/simple_animal/hostile/retaliate/clown/fleshclown,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"DF" = (/obj/machinery/smartfridge/food,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building)
"DM" = (/obj/effect/decal/remains/human,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain)
"Ed" = (/turf/open/floor/carpet/orange,/area/awaymission/stargate/building)
"Eh" = (/obj/effect/decal/remains/robot,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"En" = (/obj/machinery/chem_master,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Ey" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/glass/fifty,/obj/item/stack/sheet/metal/fifty,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"EI" = (/obj/machinery/door/airlock/shuttle,/turf/open/floor/mineral/titanium,/area/awaymission/stargate/building)
"ER" = (/obj/machinery/light{dir = 1},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"Fc" = (/obj/structure/table/wood,/obj/item/flashlight/lantern{icon_state = "lantern-on"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"Fg" = (/obj/structure/flora/grass/jungle,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"Fr" = (/obj/machinery/gateway,/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"FA" = (/obj/structure/ore_box,/turf/open/floor/wood,/area/awaymission/stargate/building)
"FI" = (/obj/machinery/gateway{dir = 5},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"FM" = (/obj/structure/table/wood,/obj/item/storage/firstaid/regular,/turf/open/floor/wood,/area/awaymission/stargate/building)
"FQ" = (/obj/machinery/conveyor{id = "mining_internal"},/turf/open/floor/wood,/area/awaymission/stargate/building)
"Gg" = (/obj/machinery/mecha_part_fabricator,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"GT" = (/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"GV" = (/obj/machinery/light{dir = 8},/obj/structure/closet/crate/wooden,/turf/open/floor/carpet/red,/area/awaymission/stargate/building)
"Hi" = (/obj/machinery/light{light_color = "#e8eaff"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"Ho" = (/obj/structure/flora/tree/palm,/obj/structure/flora/ausbushes/ywflowers,/turf/open/floor/grass,/area/awaymission/stargate)
"Hp" = (/obj/structure/flora/grass/jungle/b,/turf/open/floor/grass,/area/awaymission/stargate)
"HE" = (/obj/effect/decal/remains/xeno,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"Ia" = (/obj/structure/table/wood,/obj/item/storage/box/beakers,/obj/item/storage/box/syringes,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Ie" = (/obj/machinery/mineral/processing_unit{dir = 1},/turf/open/floor/wood,/area/awaymission/stargate/building)
"Ik" = (/obj/structure/chair/sofa{dir = 8},/obj/machinery/light{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"Im" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"Iv" = (/obj/machinery/gateway{dir = 8},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"IJ" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/metal/fifty,/obj/item/stack/sheet/metal/fifty,/turf/open/floor/wood,/area/awaymission/stargate/building)
"IP" = (/obj/structure/chair/wood,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"IQ" = (/obj/effect/decal/cleanable/semen,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"IU" = (/obj/machinery/door/airlock/bananium,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"IX" = (/obj/structure/flora/ausbushes/palebush,/obj/structure/flora/ausbushes/ywflowers,/turf/open/floor/grass,/area/awaymission/stargate)
"Jb" = (/obj/effect/decal/remains/human,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"Jc" = (/obj/effect/decal/remains/human,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"Jh" = (/obj/structure/rack/shelf,/obj/item/gun/ballistic/automatic/wt550,/obj/item/gun/ballistic/automatic/wt550,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"Jm" = (/obj/machinery/door/airlock/wood,/obj/structure/barricade/wooden/crude,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"Jp" = (/obj/structure/flora/junglebush/c,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"JB" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/awaymission/stargate/building)
"JX" = (/obj/machinery/sleeper{dir = 4; icon_state = "sleeper"},/turf/open/floor/wood,/area/awaymission/stargate/building)
"Kc" = (/mob/living/simple_animal/hostile/retaliate/clown/mutant,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"Km" = (/obj/structure/table/wood/fancy/blackred,/obj/item/storage/box/drinkingglasses,/obj/item/storage/box/drinkingglasses,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building)
"Kn" = (/turf/open/floor/mineral/titanium,/area/awaymission/stargate/building)
"KE" = (/obj/structure/flora/junglebush/c,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"KG" = (/obj/structure/chair/wood{dir = 1},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"KQ" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/wood,/area/awaymission/stargate/building)
"KY" = (/obj/structure/dresser,/turf/open/floor/carpet/red,/area/awaymission/stargate/building)
"KZ" = (/obj/structure/flora/grass/jungle/b,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"Lb" = (/obj/structure/loom,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Lf" = (/obj/structure/flora/junglebush/c,/turf/open/floor/grass,/area/awaymission/stargate)
"Lj" = (/obj/structure/bonfire,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate/building/mountain)
"Lp" = (/obj/machinery/gateway{dir = 4},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"Lq" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Ls" = (/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"Ly" = (/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"Lz" = (/obj/machinery/shower{dir = 4},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"LB" = (/obj/effect/decal/remains/human,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"LI" = (/obj/structure/flora/rock/pile,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"LJ" = (/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"LK" = (/obj/structure/flora/ausbushes/reedbush,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate)
"LO" = (/obj/structure/flora/tree/palm,/obj/structure/flora/junglebush/c,/turf/open/floor/grass,/area/awaymission/stargate)
"LP" = (/obj/structure/shuttle/engine/propulsion,/turf/open/floor/plating,/area/awaymission/stargate/building)
"LQ" = (/obj/structure/toilet,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Mk" = (/obj/item/kitchen/knife/combat/bone,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain)
"Mr" = (/turf/closed/wall/mineral/wood/nonmetal,/area/awaymission/stargate)
"Ms" = (/obj/structure/chair/comfy/shuttle{dir = 1},/turf/open/floor/mineral/titanium/blue,/area/awaymission/stargate/building)
"Mu" = (/obj/structure/mineral_door/woodrustic,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"Mx" = (/obj/machinery/light{dir = 8; light_color = "#e8eaff"},/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building)
"MC" = (/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"MD" = (/obj/structure/chair/sofa{dir = 4},/obj/machinery/light{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"MI" = (/obj/structure/flora/ausbushes/ywflowers,/turf/open/floor/grass,/area/awaymission/stargate)
"Nh" = (/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"Nk" = (/obj/structure/frame/computer,/obj/effect/decal/cleanable/glass,/obj/item/shard,/turf/open/floor/mineral/titanium/yellow,/area/awaymission/stargate/building)
"Nr" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building)
"Nv" = (/obj/machinery/light{dir = 4; light_color = "#c1caff"},/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building)
"ND" = (/obj/structure/mirror,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building)
"NN" = (/obj/effect/decal/cleanable/blood/gibs/torso,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"NR" = (/obj/machinery/processor,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Oi" = (/turf/closed/wall/mineral/titanium,/area/awaymission/stargate/building)
"On" = (/obj/structure/curtain,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Op" = (/obj/structure/closet/crate/wooden,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Ov" = (/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building)
"Ow" = (/obj/effect/decal/cleanable/blood/old,/obj/item/melee/cultblade,/obj/effect/decal/remains/human,/turf/open/floor/plasteel/cult,/area/awaymission/stargate/building)
"Oy" = (/obj/structure/table/optable,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"OE" = (/turf/open/floor/wood,/area/awaymission/stargate)
"OK" = (/obj/structure/rack/shelf,/obj/item/storage/box/lethalslugs,/obj/item/storage/box/lethalslugs,/obj/item/storage/box/lethalslugs,/obj/item/storage/box/lethalslugs,/obj/item/storage/box/lethalslugs,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"OM" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"Ph" = (/obj/structure/barricade/sandbags,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"Pi" = (/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"Pz" = (/obj/structure/table/wood,/obj/item/pickaxe,/obj/item/pickaxe,/obj/item/shovel,/obj/item/shovel,/turf/open/floor/wood,/area/awaymission/stargate/building)
"PA" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"PC" = (/obj/structure/table,/turf/open/floor/mineral/titanium/white,/area/awaymission/stargate/building)
"PD" = (/obj/structure/table/wood,/obj/item/storage/bag/ore,/obj/item/storage/bag/ore,/obj/item/mining_scanner,/obj/item/mining_scanner,/turf/open/floor/wood,/area/awaymission/stargate/building)
"PG" = (/obj/structure/barricade/sandbags,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"PS" = (/obj/machinery/light{light_color = "#e8eaff"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"PT" = (/obj/structure/flora/grass/jungle,/mob/living/simple_animal/butterfly,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"PW" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"Qg" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"Qu" = (/obj/structure/destructible/cult/pylon,/turf/open/floor/plasteel/cult,/area/awaymission/stargate/building)
"Qv" = (/turf/open/floor/grass,/area/awaymission/stargate)
"Qx" = (/obj/structure/chair/wood,/turf/open/floor/mineral/gold,/area/awaymission/stargate/building)
"QA" = (/obj/structure/flora/junglebush,/turf/open/floor/grass,/area/awaymission/stargate)
"QN" = (/obj/effect/decal/cleanable/blood/tracks{dir = 8},/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"QZ" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Rb" = (/obj/machinery/rnd/destructive_analyzer,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"Rj" = (/obj/structure/chair/comfy/shuttle{dir = 1},/turf/open/floor/mineral/titanium/yellow,/area/awaymission/stargate/building)
"Rq" = (/mob/living/simple_animal/butterfly,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"Rt" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"Rx" = (/obj/machinery/vending/cigarette/beach,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"Ry" = (/obj/structure/table/wood,/obj/item/storage/backpack/duffelbag/med/surgery,/turf/open/floor/wood,/area/awaymission/stargate/building)
"RC" = (/obj/structure/pole,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building)
"RL" = (/obj/structure/table/wood,/obj/item/storage/fancy/candle_box,/obj/item/lighter,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"RO" = (/obj/machinery/vending/kink{free = 1},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"RT" = (/obj/structure/flora/grass/jungle/b,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"RX" = (/obj/structure/chair/sofa/corner{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"Su" = (/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"SF" = (/obj/structure/table/wood,/obj/item/kitchen/knife/ritual,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"SI" = (/obj/item/storage/box/rubbershot{pixel_x = -3; pixel_y = 3},/obj/item/storage/box/rubbershot{pixel_x = -3; pixel_y = 3},/obj/item/storage/box/rubbershot,/obj/item/storage/box/rubbershot,/obj/item/storage/box/rubbershot{pixel_x = 3; pixel_y = -3},/obj/structure/rack/shelf,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"SP" = (/obj/machinery/door/airlock/wood/glass,/obj/structure/barricade/wooden/crude,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Tb" = (/obj/structure/chair/sofa/corner{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"Tn" = (/obj/structure/table/wood/fancy,/turf/open/floor/carpet/red,/area/awaymission/stargate/building)
"Tu" = (/mob/living/simple_animal/butterfly,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"Tv" = (/obj/structure/flora/tree/palm,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"TD" = (/obj/effect/decal/remains/xeno,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain)
"TE" = (/obj/machinery/deepfryer,/turf/open/floor/wood,/area/awaymission/stargate/building)
"TI" = (/obj/structure/flora/tree/palm,/obj/structure/flora/grass/jungle,/turf/open/floor/grass,/area/awaymission/stargate)
"TM" = (/obj/machinery/rnd/production/circuit_imprinter,/obj/item/reagent_containers/dropper,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"TR" = (/obj/structure/mineral_door/woodrustic,/turf/open/floor/carpet,/area/awaymission/stargate/building)
"TX" = (/obj/effect/decal/cleanable/blood/innards,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"Uc" = (/obj/structure/flora/junglebush/large,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"Ue" = (/obj/structure/flora/rock/pile/largejungle,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate)
"Um" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/obj/structure/reagent_dispensers/water_cooler,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"Us" = (/obj/effect/decal/cleanable/blood/gibs/up,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"Ut" = (/obj/structure/fermenting_barrel,/turf/open/floor/wood,/area/awaymission/stargate/building)
"UC" = (/turf/closed/indestructible/sandstone,/area/awaymission/stargate/building)
"UF" = (/turf/open/floor/carpet/red,/area/awaymission/stargate/building)
"UG" = (/obj/effect/spawner/structure/window/shuttle,/turf/open/floor/plating,/area/awaymission/stargate/building)
"UI" = (/obj/structure/bed,/obj/item/bedsheet/grey,/turf/open/floor/wood,/area/awaymission/stargate/building)
"UN" = (/obj/machinery/biogenerator,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Vh" = (/obj/structure/flora/junglebush/b,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate)
"Vk" = (/obj/structure/table/plasmaglass,/obj/structure/table/plasmaglass,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"Vy" = (/mob/living/simple_animal/hostile/retaliate/clown/fleshclown,/turf/open/floor/mineral/titanium,/area/awaymission/stargate/building)
"VG" = (/obj/structure/table/plasmaglass,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"VJ" = (/obj/structure/table/wood,/obj/machinery/microwave,/turf/open/floor/wood,/area/awaymission/stargate/building)
"VM" = (/obj/structure/table/reinforced,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"VY" = (/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate)
"VZ" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Wa" = (/obj/structure/bed,/obj/effect/decal/cleanable/semen,/turf/open/floor/carpet/red,/area/awaymission/stargate/building)
"Wh" = (/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building)
"WB" = (/obj/machinery/gibber,/turf/open/floor/wood,/area/awaymission/stargate/building)
"WL" = (/obj/machinery/mineral/unloading_machine{dir = 1; icon_state = "unloader-corner"; input_dir = 1; output_dir = 2},/turf/open/floor/wood,/area/awaymission/stargate/building)
"WO" = (/obj/machinery/mineral/processing_unit_console,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building)
"WR" = (/obj/machinery/gateway{dir = 9},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"WW" = (/obj/machinery/vending/boozeomat/all_access,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building)
"Xg" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate/building/mountain)
"Xi" = (/obj/structure/mineral_door/wood,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Xp" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"XE" = (/obj/structure/flora/tree/palm,/obj/structure/flora/ausbushes/ppflowers,/turf/open/floor/grass,/area/awaymission/stargate)
"XF" = (/obj/structure/bonfire,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"XH" = (/obj/structure/barricade/wooden,/turf/open/floor/plating/asteroid,/area/awaymission/stargate)
"XJ" = (/obj/machinery/gateway{dir = 10},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building)
"XW" = (/obj/machinery/door/airlock/wood,/turf/open/floor/carpet/red,/area/awaymission/stargate/building)
"Yg" = (/obj/structure/chair/comfy/shuttle{dir = 1},/obj/machinery/light,/turf/open/floor/mineral/titanium/blue,/area/awaymission/stargate/building)
"Yo" = (/obj/machinery/vending/hydroseeds,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Yv" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building)
"Yw" = (/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate/building/mountain)
"YN" = (/obj/item/kitchen/knife/combat/bone,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate/building/mountain)
"YP" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/structure/plasticflaps,/turf/open/floor/wood,/area/awaymission/stargate/building)
"YQ" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/mineral/sandstone/twelve,/obj/item/stack/sheet/mineral/sandstone/twelve,/turf/open/floor/wood,/area/awaymission/stargate/building)
"YS" = (/obj/structure/table/wood,/obj/item/mop,/obj/item/reagent_containers/glass/bucket,/obj/item/soap,/turf/open/floor/wood,/area/awaymission/stargate/building)
"Zh" = (/obj/structure/table/wood,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"Zl" = (/obj/structure/flora/grass/jungle,/turf/open/floor/grass,/area/awaymission/stargate)
"Zq" = (/obj/machinery/light,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building)
"ZM" = (/obj/structure/chair/wood{dir = 4},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building)
"ZW" = (/obj/structure/bonfire,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsababababababababababababababababababababababababababababababababababababLsLsababLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsabababababababababababababababababababababababababababababLsababLsLsLsLsLsLILsLsLsLsabababababababababababababababababababLsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLILsLsLsLsLsLsLsabababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsabLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsabababababLsabLsababababLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLskeLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsababababababababababababababababababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsababLsLsLskeLsLsLsLILsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsaWLsLsLsLsLsababababababLsLsLsLsLILsBRLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsLskeLsLsBRLsLsaWLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLILsLsLsLsLsLskeLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLsLILsLsLsLsLsLsLsLsLILsLsLsLsLsLILsLsLsLILsLsLsaWLsLsLsLILsLsLsLsabababLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLILsBRLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLskeLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsBRLsLsLsLsLskeLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLskeLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLsLILsLsLsLsLsLsOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvLsLsLsLskeLsLsLsLsLsLsabababLsLsLsLsLsLBLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababLsLsLsLsLsLsLsLsLsLsabababababababLsLsLsLsLsLsLsLsLsLsLsLsLsUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCLsLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsBRLsLsLsLsLsLsLsOvKYUFTnOvKYUFTnOvkQcsOvKYUFTnOvKYUFTnOvLsLsLsLsLsLsLsLsabababababababLsLsLsLsLILsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsBRLsabababababababababLsababLsLsLsLsLsLsLsLsUCrXrXDDvzyOvzvzrXrXUCazaHaIaJaKUCwPPiUCNhNhNhNhPWNhNhNhNhUCLsLsLsLILsBRLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLskeLsLsLsLsLsLsLsLskeLsLsLsOvGVUFWaOvGVUFWaOveQVZOvvMUFDzOvvMUFDzOvLsLsLILsLILsLsababababababababLsLsLsLsLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsLsLsLsLsLsBRLILsabababababababababababababLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLILsLsUCrXrXnRQxjFQxnRrXrXUCNhNhOMNhNhmtPiqCUCNhEhNhRtNhNhJbNhBeUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLILsLsOvUFUFUFOvUFUFUFOvaqcsOvUFUFUFOvUFUFUFOvLsLsLsLsLsLsababababababababababLsLsLsOvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsababababababababababababababLsLsLsLsLsLsLsUCMxrXrXrXrXrXrXrXNvUCaLZMvfuANhUCPiQgUCNhNhPibQPiPiPiNhNhUCLsLsLsLsLsLsLsLsLsLILsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLsLsLsLILsLBLsLsaWLsLsLsLsLsOvOvXWOvOvOvXWOvOvOvSPOvOvXWOvOvOvXWOvOvLsLsLsLsLsLsababababababababababLsLsLsOvRylgvcOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsLsUCrXNrrXPiPiPirXrXrXUCUCUCUCUCUCUCJcPiUCNhBeJcWRDfFIPiNhNhUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvDrWhvOWhWhWhACWhWhWhWhACWhWhWhWhWhWhOvLsLsLsLsababababababababababababLsLsLsOvcsQZcsOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsababLsLsLsabababababababababababababababababLsLsLsLsababababababababababababababLsLskeLsLsLsLsLsUCNhNhNhPiPiPiPiPiPiJmPiQgPiPibQPiPiqCUCoXNhPiIvoSLpPiRteZUCLsLsLsLsLsLsLsLsLsLsLsLskeLsababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLsOvWhWhWhWhWhWhWhWhvOWhWhWhWhvOWhWhWhWhOvLsLsLsabababababababababababababLsLsLsOvcscscsOvLsLsLsLsLsLsLsLskeLsLsLsLsabababababababababababababababababababababLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsLsUCNhNhNhPiPiPiPiPiPiJmkpwPPiJcPiPiPiPiUCNhEhwPXJFrmBPiNhNhUCLsLsBRLsLsLskeLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsOvOvsnOvOvOvOvOvOvOvOvOvOvOvOvOvOvsnOvOvLsLsLsababababababababababababLsLsLsLsOvOvfNOvOvOvOvOvOvLsLsLsLsLsLsLsLsabababababababababababababababababababababababLsLsLsLILsLsabababababababababababababLsLsLsLsLsLILsLsUCNhNhNhPiPiPiNhOMNhUCUCUCaMUCUCUCwPbQUCNhNhetPiLJPiJcNhNhUCLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsOvROWhROnnrUCcbLWWKmKmWWbLCcrUnnROWhROOvLsLsLsabababababababababababLskeLsLsLsOvcscsIaUILqcsEnOvLsLsLsLsLsLsLsLsLsabababababababababababababababababababababLsLsLskeLsLsLsLsababababababababababababLsLsLsLsLsLsLsLsUCKGKGKGPiPiPiKGKGKGUCaNaPNhaPaNUCPiPiUCRtJbNhPGPGPGNhBeNhUCLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsOvDrWhWhEdEdEdEdEdEdEdYvEdEdEdEdWhWhDjOvLsLsLsLsababababababababababLsLsLsLsLsOvJXcscscsltQZmvOvLsLsLsLsLsLsLsLsababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsababababababababababababLsLILsLsLsaWLsLsUCnXNhNhPiPiPiNhNhtIUCoXNhOMNhNhUCQgqCUCNhNhNhPikpPiNhNhRtUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLsaWLsLsLsLskeLsLsLsLsaWLsLsOvWhWhznnnEdYvEdEdEdEdEdEdEdEdnnznWhWhOvLsHELsLsabababababababababababLsLsLsLsOvcsKQQZcscsKQcsOvLsLsLsLsLILsLsLsabababababababababababababababababababababLsLsLBLsLsLsLsLsababababababababababababababLsLsLsLsLsLsLsUCKGKGKGPiPiPiKGKGKGUCNhNhNhNhNhUCPiPiUCUCUCUCcjUCcjUCUCUCUCLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLILsLsababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLsLILsLsLsLsLsLsLsLsLsLsLsLsOvywWhznyCnnnnnnnnnnnnnnnnnnnnyCznWhywOvLsLsLsLsabababababababababababLsLsLsLsOvJXcscscscscscsOvLsLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsLsLILsLsLsababababababababababababababLsLsLsLsLsLsLsUCNhNhNhPiPiQgNhNhNhUCNhvfNhvfNhUCPiJckMPiPiPiwPERPiPiPiUmUCLsLsLsLsLsLsLsLILsBRLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsLsLsOvoxWhWhznznznznznznznznznznznznvOWhCpOvLsLsLsLsLsLsababababababababLsLsLsLsLsOvOvOvAOOvOvAOohOvLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsLsLsLsLsLsLsababababababababababababababLsLsLskeLsLsLsUCKGKGKGPiPiPiKGKGKGUCaQaRNhaRNhUCPiPiPiQgPiJcPiPiPiPiPiQgUCLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsOvMDVGWhWhWhEdEdEdWhWhEdEdEdWhWhWhVGIkOvLsLsLsLsLsLsLsLsabababababLsLsLsLsLsLsvvapapcsmaapcscsOvLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLILsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsUCnXNhNhPiPiPiNhNhtIUCNhvfNhvfOMUCUCUCUCUCUCUCUCmtUCUCUCUCUCLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLILsLskeLsOvbPVkWhvOWhEdRCEdWhvOEdRCEdWhWhWhfmozOvLsLsLILsLsLsLsLsabababababLsLsLsLsLsLsvvxGcscscsahtNQZOvLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababLsLsLsLILsLsUCKGKGKGPiPiPiKGKGKGUCNhaROMaRNhUCJhPWOKNhaxPWaiNhNhmbPWSIUCLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsabababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvbPVGWhWhWhEdEdEdWhWhEdEdEdWhWhWhVGozOvLskeLsLsLsLsLsLsLsabababababLsLsLsLsLsOvxGQZcscsapcscsOvLskeLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsUCNhNhOMPiPiPiNhNhNhUCoXvfNhvfNhUCJhNhOMNhNhOMNhNhOMNhNhdOUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsOvTbDxWhWhWhWhWhWhWhWhWhWhWhWhWhWhxTRXOvLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsvvxGcsKQcsahtNcsOvLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsabababababababababababababLsLsLsLsLsUCHiNhNhPiPSPiNhNhHiUCNhaRNhaRNhUCayNhaSNhaiNhaiNhNhwFNhaGUCLsLsLsLILsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLILsLILsLsLsLsaWLsLsLsLsLsLsOvOvOvOvOvWhtChcBZWhWhBZtChcWhOvOvOvOvOvLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLskeLsOvxGcscsQZapcscsOvLsLsLsaWLsLsLsLsLsLsLsababababLsabLsLsabLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsababababababababababababababLsLsLsLsUCUCUCUCJmqKJmUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCLsLsLsLsLsLsLsLsBRLsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvWhWhWhWhWhvOWhWhWhWhOvLsLsLsLsLsLsaWLsLskeLsLsLsLsLsLsLsLsaWLsLsLsLsvvxGcscscsahtNcsOvLsLsLsLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsaTaUaUaUaVLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLskeLsLsOvRxBPWhWhWhWhWhWhBPRxOvLsLILsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsvvapapcscsapcsKQOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsabababababababababababababababLsLsLskeLsLsuIaXaXaXaYLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsLsLsLsLBLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvOvOvOvwZOvOvwZOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvOvOvSPSPOvvvvvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIaXaXaXaYLsLsLILsLskeLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsBRLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsaWLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsaTaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaVLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsabababababababababababababababababLsBRLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsHELsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababLsLsLskeLsLsLsLsLsLILsLsLsLsLsababLsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsabababababababababababababababababLsLsLsLsLsuIaXaXbaaYLsLsLsaWLsLsLsLsLsLsLskeLsLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLskeLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsababababababababababababababababababLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsababababLsLsLsLILsLsLsLsLsLsBRLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsLILsLsLsLsLsLsLsLsLsabababababababLsLsLsLsbbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdxnaXaXaXaYLsLsLsabababababababababababababababababLsLsLsLILsuIaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsBRLsLsababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLILsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsaZaXaXaXaYLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIaXaXaXaYLsLsBRLsLsLsLsLsLsLsLsLsLsababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLsLsLsaWLsLsLsLsLsLsLsabababLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLskeLsLsababababababababababababababLsLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLBLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsaWLsLsLILsLsLsLILsLsLILsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsabababababababLsLsaZaXaXaXaYLsLsLsLsabababababababababLsababababLsLsLsLskeLsLsuIaXaXaXaYLsLsLsLsLILsLsLsLsLsababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsababLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsHELsLsLsLsLsLsLsLsLsabababababababababababLsaZaXaXaXaYLsLsLsababababababababLsLsLsababLsLsLsLILBLsLsLsLsuIbaaXaXaYLsLILsLsLsLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsabLsabLsLsLsLsLsLsLILsLsLsBRLsLsLsLsLsLsLsLsababababLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsaZaXaXaXaYLsLsLsLsLsababababababLsLsLsabLsLsLsLsLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLsababababababababababababLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsabLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsaZaXaXaXaYLsLILsLsLsLsLsLsababLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsuIaXaXaXaYLsLskeLsLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsaWLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababLsLsLsLsLsBRLsLILsLskeLsLsLsLsabababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLsLsaWLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLILskeLsLsLsLsLILsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLILsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLILskeLsLsabababababababababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLILsLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLskeLsLsababababababLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaXaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaXaXaXaXaYLsLsLsLsLsLsLsLsacacababababababababababababLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababLsLskeLsLsLILsLsLsabLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsabababababababababLsLILsLsLsabababababLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLILsLsLsLsacacBIababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababLsLsLsLsababababababababababLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsLsLsLsabababacabababababababababababLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsabababababababababababababababababababababLsababababababababababababababababababababababababLsLsLsLILsLsLsLILsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsLsLsLsabababacacacababababababababLsLsLsLsvuLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsaWLsLsLILsaZaXaXaXaXbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbeLsLsLsLsLsabababacacacacabababababababLsLsLILsLsLsLsLsLsvuLsLsLILsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababLsLsLsabLsLsLsababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsabababababacabababababababLsLsLsLsLsvuLsaELsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababLsLILsLsLsLsLsLsLsLsLsababababababMrMrMrMrXHMrMrMrMrababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLILsLsLsLsLsLsLsLILsLsLsLsLskeLsLsLsLsLsLsLsLsLskeLsLsLsLsababababacacabababababababLsLsLsLsLsLsLsLsLsLsLsLsaFLsLsLsLsLsabababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsImLsLsLsLsabababLsLsLsLsLILsLskeLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLskeLsLsLILsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababacacababababababLsLsLsLsLsLsLsaCLBLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLskiLsLsXpLsLsLILsLsLsLsLsabLsLsLsLsImLsLsLsLsLskeLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLILsLsLsLsLsLsaZaXaXaXaYLsLsaWLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsababLsabababababacacabababababLsLsLsLsvuLsLsLsaWaDLsLsLsLsLsvuLsLsLsLsLsabababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLsLsLsLBLsLskeLsLsUsLsLsLsLsLsTXLsLsLsLsLsLsXpkiLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsababababLsLsLsababLsLsLsLsLsLsLsLsababababababababababacacacacababababLsLsLsLsLsLILsLsLsLsLsLsvuLsLILsLsLsLsvuLsLsLsababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLILsLsLsLILsLsLsLsLsrhLsLsLILsLsLsLsaWLsLsLsLsLsLsLsLsababababababababLsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsabababababababababababababLsLsLsLsLsabababababababababababacacabababababLsLsLsvuLsLsLsLsaBLsLsLsLsLsLsLsaALsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLsLsImLsLsLshKLsLsLsLsLsLsLsLsLsXpLsLsLsLshKLsLsLsUsLsLsLsababababababLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsaWLsLsLsLsaZaXaXaXaYLsLILsLsabababababababababababababababababLsLsLsababababababababababababacabababababLsLsLsLsLsvuLskeLsLsvuLsLsLsLsLsLILsLsLskeLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLBTXLsLsLsLBLskeLsLsLsLsLsLsLBLsLILsLsLsLsababababababLsLILsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsaZaXaXaXaYLsLsLsLsabababababababababababababababababababababababababababababababacacabababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsvuLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLskeLsXpLsLsLsXpLsLsLsLsLskebALsLsLsLsLsXFLsLskeLsLsLsLBLsLsLsabababababababLskeLsLsabLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsaZaXaXaXaYLsLsLsLsababababababababababababababababababababababababababababababacacababababababababLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsTXLsLsLBLskeLsLsIQLsLILsLsLsXpLsLsLsLsLsLsbALsLsLsLsXpLsLsLsLsababababababLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababLsLsLILsLsaZaXaXaXaYLsLsLsLsLsababababababababababababababababababababababababababababacacacabababababababababababababababLsLsLsLskeLsababLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLskiLsLsLsXFLsLsLsLsLsLILsTXLsXpLsLsLsTXLsLsLsLILsLsababababababLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsaZaXaXaXaYLsLsLsLsLsababababababababababababababababababababababababababababacacababababababababababababababababababLsLsLsLsabababababababababLsabababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsaWLsLsXpLsLsLsLsLsLsLsLsLsImhKLskeLsLsLsLskeLsLsLsLsLsLsLsLsLsMrLsLsLsababLsLsLsLILsLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsaZaXaXaXaYLsLsLsLsLsabababababababababababababababababababababababababababababacacabababababababababababababababababababLsLsLsabLsLsababababLsLsLsababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsLsLsImLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLBLsLsLsLsLsImLsLsLsXFLsLsLsMrLskeLsLsLsLsLsLsLsLsLsabLsabababLsLsLsabLsabababababababababababababababababababababababababababababababababababXHXHXHXHXHbfbgbgbgbhXHXHXHXHababababababababababababababababababababababababababababababacacabababababababababababababababababababLsLsLsLILsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLsLsLsLILsLsImkiLsXpLsLBLsLsaWLsLsLsLILsLBLsLsLsLsLsLsLsLsQNQNuaQNQNQNLsLILsLskeLsLsLsLsLsLsLsabLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsabababababababababababababababababababababababababacabacacacababacacababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsLsXpLsLsbALsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsUsLsLsLsLsLsMrLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLsLskeLsLsaZaXaXaXaYLsLsababababababababababababababababababababababababhmacacDMacacacacacacababababababababababababababababababababLsabababababLskeLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsUsLsLsLsLsLsLsLsLILsLskeLsbALsLsLskiLsLsXpLsLsLsLsLsLsLsImLsLsLsMrLsLsLsLsLsLsLsLsLsLsLsababLsLsLsLsLsLsLskeLsLIabababababababababababababababababababababababababababababababLsLsLILsLsLsLsaZaXaXaXaYLsLsabababababababababababababababababababababababacacBIacacacMkacacacacababababababababababababababababababababababababababLsLsLsLsaWLsLsabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababLsLsLsLsLBLsLsLsLsXFLsLsUsLsLsLsLsHELskiLskeLsImLsLsLsXpLsLsLsLsLsabababLsLsLsLILsLsabLsLsLsabababLsLsLskeLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLILsLsaZaXaXaXaYLsLsababababababababababababababababababababababababacacacacZWhmacBIacababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababLsLsLsLsLsXpLsLsLskeLsLsLsTXLsLsLsXFLsLsLsLsLsLsaWLsLsLsLBLsLsLsabababababLsLsLsLsababLsLsLsababababLsLsLsLsLsLsLsLsLsLsabLsLsLsabababababLsLsabLsLsLsabababababababababababababababLsLsLsLsLsaZaXaXaXaYLsLILsabababababababababababababababababababababababacacMkacacacacacacababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLsLsLskeLsLsLsLsababababLsLsLsLsabLsLsLsLILsabababLsLsLsLILsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsababababababababababababababababLsLsLsLsaZaXaXaXaYLsLsLsababababababababababababababababababababacacacacacBIachmDMacacacacababababababababababababababababababababLsLsLsLILsLsLsLsLskeLsabababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababLsLsLsLsImLsLsLILsabLsLsLsLsXpLsLsLsLBLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsababLsLsLsLsababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsaZaXaXaXaYkeLsLsabababababababababababababababababababacacacabacacacacacacacBIacababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababLsLsLsLsLsLsababababLsLsLsLskeLsLsLsLsLsImLsLsLsLsababababLsLskeLsLsLsabLskeLsLsababLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsOvOvOvOvOvOvOvOvOvLsLsLsLsLsababababababababababLsLsLILsLsaZaXaXaXaYLsLsLsabababababababababababababababBIacacacacabababacacabababacacacacabababababababababababababababababababababLsLskeLsLsLsLsLILsLsababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababLsLsLsLsLsabababababLsLsLsLsLsLsLsabababababababababababLsLILsLsLsQNQNQNLsLsLsLsLsLsLsLsabababLsLsLsLsababLsLsLsLsLsLsLsOvapcsOpOpOpAzdbOvLskeLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsaZaXaXaXaYLsLsababababababababababababababacacacacacacacababababababababacabababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababLsabababababababababababababLsLsLsLsabLsLsLILsLsLsLsababababLsLsLsLsLILsLsLsLsLsLsLsLILsOvancscscscscsaoOvLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsaZaXaXaXaYLsLsLsabababababababababababababacacacacababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsabababababLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvdbcscscscscsapOvLsLsOvOvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsababababababababababababababacacabababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsababababababLsLsLsLsabLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsOvOvOvOvXiOvOvOvOvLsLsOvdbcscsRyOvLsLILsLsLsLsLsLsLskeLsLsaZaXaXaXaYLsLsLsababababababababababababacacacababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsababababababLsLsLsLsOvFcNhNhNhNhNhFcOvLsLsOvFMcscsjeOvLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsabababababababababacacacababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsaWLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababLsLsLsOvNhNhIPIPIPNhNhOvLsLsOvfUcscsapOvLsLsLsLsLsLsaWLsLsLsLsLsaZaXaXaXaYLsLILsLsLsLsabababLsLsababacacababababababababababababababababababababababababababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLskeLsLIHEabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababLsLsLsLsLsLsLsLILsLsLsabababababLsLsLsOvNhZMmdadvfuANhOvLsLsOvFMcscsjeOvLsLsLsLsLsLsLsLsLsLILsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsabacacabababLsababababababababababababababababababLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababOvOvOvOvOvOvOvOvLsLsLsLsLsLsLsLsLsababLsLsLsLsOvNhNhKGKGKGNhNhOvLsLsOvfUcscsapOvLsLskeLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsabababLsLskeLsLILsLsabqSabLsLsLsLsLsababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacababababababababOvdbPDPzFAFAdbOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvFcNhNhNhNhNhFcOvLsLsOvdbcscsjeOvLsLsLsLsLsLsLskeLsLsLsLsaZaXaXaXaYLsLsLsabababLsLsLsLsLsLskeheLBLsLsLskeLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababacacacacacaeacacabOvcscscscscscsOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsOvOvofOvMuOvofOvOvLsLsOvOvXiOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsababLsLsLsLsLsLsheLsLsaWLsLsLsLILsababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabacacacacacvhcscscscsOvWLvvcsdbOvaTaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUxnaXaXaXaYLsLskeLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLskeLsLsabLsLsababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababababacabababababababababababababababababacacacabOvcscscsmFvvFQvvcscsgIaZxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnaXaXaXaYLsLsLsLsLsLsLsabababLsLsLsLsLsabababLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababacacacacabababOvcscscscsWOIevvcscsOvaZxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnaXaXaXaYLsLsLsLsLsLsLsLsLsabababLsLIabababababababLsLsLsLILsLskeLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLspVZlQvLsLsLsababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababTDababacacacacababababOvdbcsOvvvvvFQvvcscsgIaZxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnaXaXaXaYLsLsLsLILsLsLsLsLsLsabababababLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsMIQAQvLsLsLsLsLsLILsLsLsQvQvuBQvQvZlLsLsababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababacacababacacabacacacacacacacacacabababababababOvcscsYPdzdziAvvcscsOvbbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdxnaXaXaXaYLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsQvQvZlHpQvpVQvuBLsLsLsLsHpqDQvLfQvmJQvqDLfQvababababababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababacacacacabababababababababOvcscsOvOvOvOvOvcscsOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLskeLsLsLsLsLsLsQvLfQvqDQvuBLfQvLfQvQvQvZlQvQvQvZluBZlQvQvuBababababababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacababababababababababOvcscscscscscscscscsOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsLsLsLsLsaWLskeLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsQvpVQvZlsEMITIQvQvQvMIQvmJZlQvmJnYQvMIQAQvuBQAQvZlabababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabababababababababababOvdbcscscsdbcscscsdbOvLsOveecscscsOpOvLsOveecscscsOpOvLsOveecscscsOpOvLsOveecscscsOpOvLsLILsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLILILsLsLsLsLsLsLsLsLsLsLsLsLsLsQvLOQvQvMIQvQvQvpVQAQvmJHpsEuBQvcIQvQvuBQvQvsEMIHpQvQvabababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababOvOvOvOvOvOvOvOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsLsLsLsLsLsLsLsLsaZaXaXaXaYOvOvOvOvvvvvOvOvvvvvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLspVQvQvHpQvuBfOQvmJLfQvQvQvuBZlQvQvqDfOQvsEHpQvqDmJQvQvQvsEuBHpLfQvababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababacacacababababababLsLsLsLsLsLsLsLsLsLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsLsOvOvOvOvOvOvOvaZaXaXaXaYOvNReJeJVJeJyMLqTEfBWBcseLOvLsLsLsLILsLsLsLsLsLsLsaWLsLsLsLsLfLsMIQvsEZlQvpVQvQvQvrCQvHpQvmJMIQvQvmJZlQvZlQvQvZlQvQvpVQvTIQvfOQvQvpVQvZlababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababacababacacacacacacacacacababababababLsLsLsLsLsLsLILsLsLsLsOvcscsOncsarOvLsOvcscsOncsasOvLsOvcscsOncsatOvLsOvcscsOncsauOvLsLsOvFcZhZhNhNhOvaZaXbjaXaYOvcscscscscscscscscscscseLOvLsLsLsLsLsLsLsLsLsLsLsLsLsZlQvQvQvQvQvqDQvQvQvQvsEQvQAQvQvmJQvQvsELfQvHpsEQvQvHpQvmJsEQvHpuBQvHpMIQvmJQvmJHpababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababLsLskeLsLsLsLsLsLsLskeLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsLstjNhNhNhNhNhOvaZaXaXaXaYOvnacsdbcscscscscscsdbcseLOvLsLsLsLsLsLsLsLsQvQvQvQvqDQvQvmJpVQvmJQvmJuBfOQvZlQvMIZlQvQvpVQvQvQvqDQvQvQvmJLfMIQvQvLfsELfilmJsEQvLfQvqDQvQAabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababacababacacacabababacacababababababababababababLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsOvLzNhikOvNhOvaZaXaXaXaYOvOvDFOvXiOvOvOvOvXiOvOvOvOvLsLsLsQvLfQvsEQvQvmJHpfOQvLfuBMIQvsEQvHpQvMIQvmJqDfOQvsEuBLfQvQvmJbiQvmJLfuBQvQvQvpVQvqDQvQvHpQvqDQvZlQvHpabMIabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababacacababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsOvLzNhikOvNhNhaZaXaXaXaYofFcNhNhNhNhRLFcNhNhNhNhFcOvLsQvQAZlQvqDQvLfQvMIuBQvQvQvQvQvQvbiQvQvmJLfQvsEQvHpQvMIHpQvHpqDQvLfQvQvQvmJZlQvmJQvsEQvmJZlQvQAQvpVQvmJababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababacacabacababababababababababababababababababLsLsLILsaWLsLsLsLsLsOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvLsLsOvOvOvOvOvOvOvOvOvLsLsOvOvOvOvOvLsHpOvLzNhikOvFcOvaZbjaXaXaYOvNhNhNhNhNhNhNhNhNhNhNhNhofLsqDQvQvQvmJQvQvQvZlQvZlQvmJQvnYQvQvQvQAQvQvQvQvZlQvQvmJQvmJQvmJfOuBQvpVQvQvQvQvQvpVQvMIZlQvQvMCJpQvuBMIababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLskeLsOvFcNhNhNhZMZMjDFcZMjDZMZMNhNhFcNhOvLsLsOvLbcscscscscsAwOvLsLsOvdbcsYQOvqDXEOvOvOvOvOvtjOvaZaXaXaXaYMuNhNhNhIPIPIPIPIPIPNhNhNhOvQvQvMIsEHpQvQvfOQvQvmJLfQvpVQvQvMIQvmJQvmJZlmJpVQvQAQvpVQvQvZlQvQvHpQvmJQvQAQvZlQAQvKZMCMCqfMCMCMCFgMCpVqDabababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsOvmeNhNhNhZMZMjDvfZMjDZMZMNhNhNhNhOvLsLsOvLbcscsdbcscsAwOvLsLsOvIJcsYQOvyvuROvLQOvLQtjdbOvaZaXaXaXaYOvvfNhZMxmxmxmxmxmxmuANhvfofHpqDLfQvuBLfQvZlQvwLQvQvQvQvsEQvfOQvqDQvqDQvHpQvsEuBQvQvsEHpQvpVQvQvQvqDQvQvsEQvQvMCMCJpMCVYVYhCMCMChCVYVYabababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsRqLsLsLsLsLsLsOvNhNhjDjDjDjDjDjDjDjDjDjDjDjDadNhOvLsQvOvCtcscsyMcscsUtOvLsLfOveQcscsXiaZaYOvXiNDXitjcscsaZaXaXaXaYOvvfNhZMxmxmxmxmxmxmuANhvfofQvmJQvIXQvQvilQvMIQvHpQvmJqDQvQvQvLfmJuBLfQvQvMIQvQvLfQvQvQvmJQvQvndQvLfFgMCMCdQVYMCtcFgVYryMCFgjHyZVYdQjZMCtcFgababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLskeLsLsLsLsLsLILsLsOvNhNhjDjDjDjDjDjDjDjDjDjDjDjDSFNhOvLfqDOvCtcscsAAcscsUtOvuBQvOvYScscsOvaZaYOvcscscstjcsOvaZaXaXaXaYMuNhNhNhKGKGKGKGKGKGNhNhNhOvQvqDQvpVQvQvqDmJLfQvfOQvQvpVQvmJQvRTQvQAQvQvmJLfQvmJQvMIZlmJQvZlQvQvMIMCMCryagVYyAjHMCyAgChQMCyZyZyZyZyZMCKZVYabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLILsLsLsLsLsLsLfLsLsOvpmNhNhNhZMZMjDvfZMjDZMZMNhNhNhNhOvMIQAOvUtcscsdbcscsUtOvHpsEOvjXcsaOvvaZaYOvnacscscscsOvaZaXaXaXaYOvNhNhNhNhNhNhNhNhNhNhNhNhofZlsEuBMIQvmJQvQvQvsEQvMIQAQvQvQvuBQvQvQvuBQvQvQvQvQvLfQvqDQvQvQvLfQvFgyAMCJpTuMCyZyZyZyZjHMCyZyZyZyZyZyZqfMChCabababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababQvLfHpQvLsLsLsLsLsLsLsLsQvmJqDLsOvFcNhNhNhZMZMjDFcZMjDZMZMNhNhFcNhOvHpQvOvUtcscscscscsUtOvMIqDOvdbcslnvvaZaYOvdbcscscscsOvaZaXaXaXaYofFcNhNhNhNhmxFcNhNhNhNhFcOvQvQvQvfOQvQvnYQvQvHpZlQvQvQvsEQvTIQvLfsEQvLfZlHpQvTIQvmJQvQALfQvMCJpMCMCyZKZjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCababababababababababMCFgqfababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababQvabababababababababababababababQvfOuBQvLsfOLsHpQvQAMIHpfOQvZlOvOvOvofofOvOvTROvOvTROvOvofofOvOvOvQvXEOvOvvvOvXiOvvvOvOvQAQvOvOvOvOvOvaZaYOvOvOvOvOvOvOvaZaXaXaXaYOvOvOvOvXiOvOvOvOvXiOvOvOvOvHppVQvQvpVQvQvQvuBuBQvmJLfQvpVQvQvqDQvmJqDQvsEQvQvQvuBQvHpQvQvMCKZMCjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAUcFgMCabababababjHJpyAUcyZJpababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababQvQvZlQvabababababababababababQvMIpVQvoQQvoQQvZlrCQvsLsLsLsLsLsLaTaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUxnxnaUaUaUaUaUaUaUaXbjaXaXaYOvtztzcscscscscscscscstztzOvQvQvmJQvMIQvsELfQvfOQvQvQvQvQvQvMIfOQvQvHpQvMIUcFgMCMCJpMCUcMCdQVYyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHtcJpKZyAFgtcyZyZyZyZtcjHKZababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababQvHpQvQvsEQvabqDabQvababZlQvHpLfLfQvHpQvQvQvQvoQQvmJQvsLdbUNdTYosLaZaXaXaXaXaXbjaXaXaXaXaXaXbjaXaXaXaXaXaXaXaXaXaXbjaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYOvdbcscscscscscscscscscsdbOvMIQvQvLfQvZlQvQvMIQvQvuBqDmJHpsEQvQvLfQvMCJpVYgCtcMCFgyAMCqfMCVYVYMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAKZabyAKZqfjHababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababZlQvQvmJLfQvMIQvQvpVHpQvQvMIuBQvQvQvqDsEHpQvmJqDQvQvQvHpsLnacscscsXiaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbkbkbkaYOvtztzzDxKdbjfjfdbxKzDtztzOvQvLfsEQvQvmJHpQvmJQvQAQvQvLfilQvMCtcMCKZyAMCdQLKyZyZyZKZMCMCFgyAFgKZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJptcFgyZyZUcababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababHpQvMIQvqDilQvHpQvfOuBQvQvQAHpqDQvmJfOuBQvQvafQvQvQAQvpVsEuBsLapcscsapsLaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbjaXaXaXaXaXaXaXaXaXaXaXaXbkbkbkaYOvOvOvOvOvOvOvOvOvOvOvOvOvOvQvHpQvQvpVQvQvpVQvZlQvuBMCKZMChCVYUcMCMCMCjHFgyZyZyZyZyZyAjHyZyZjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababuBQvQvLfsEQvQvMIZlQvQvQvBCMIQvQvsEQvpVQvQvQvmJQvQvmJQvQvqUQvQvsLsLsLXisLsLbbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdblbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdaXbkbkbkaYMIpVsEQvQvHpQvLfQvQvuBQvQvQvMIQvfOQvQvLfQvQvMCKZMCMCyAMCqfgCjZMCyAKZqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababQvQvfOQvMIQvQvmJLfsEQvQvmJQvHpQvLfQvQvQvQvmJLfQvsEQvHpLfqDQvQvLfQvMIHpQvpVQvqDQvZlQvQvLfQvQvMIuOZlQvqDpVQvsEQvQvpVQvqDZlQvQvqDQvHpQvZlQvmJQvfOQvQvsEMIQvfOQvZlMIQvmJpVHpaZaXaXaXaYsEQvQvZlmJQAQvZlsEqDHpmJZlQvXEQvQvBCMIQvMCJpVYhQMCyZyZjHMCJpMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa
aaaaababababababababababababababababababababababababababMIZlababababababababQvsEQvHpQvQvQvpVQvuBQvQvpVuBQvZlQvfOQvQvLfQvHpQvMIQvLfQvMIyTQvbCQvyTQvyTQvyTQvyTQvyTQvyTZlQvsEHpQvQvQvQvuOMIQvLfQvmJQvsEQvQvMIfOQvsEMIelQvuBQvLfQvqDsWQvpVQvQvsEQvLfqDQvsEuBaZaXaXaXaYQvqDQAQvqDQvHpQvQvQvQvQvLfQvQvQvyAMCMCjZVYVYVYMCUcyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa
aaaaababababababababababababababababababababababababababQvLfQvHpabababababZlQvQvMIQvqDQvmJQvQvQvHpQAQvQvLfsEQvMIQvmJQvQAqDQvfOQvQvqUuBQvQvQvQvQvQvQvQvQvQvilQvQvQvQvQvuBQvqUQvnYQvQvZlQvuOQvelQvuBaTmTmTmTaVpVQvQvQvHpQvmJMIsEHpuBQvQvMCtcQvqDmJuBQAQvZlaZaXaXaXaYQvZlQvuBQvmJQvQvmJLfpVMIQvVYVYqDKZMCJpVYhtVYjZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHFgyZyZyZyZyZyZyZyZUcyZyZKZqfjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa
aaaaababababababababababababababababababababababababababqDHpsEQvpVQvababqDQvQAHpQvpVsEQvuBHpQvmJQvQvMIQvQvqDZlQvQvQvHpQvZlQvQvmJHpZlQvyTQvyTQvyTQvyTQvyTQvyTQvyTQvyTQvQAQvQvQvQvuOuBQvLfQvQvQvQvHpaZbmbnaXaYQvQvmJpVQvKZyAMCtcMCKZZlMCJpMCyAQvHpQvsEHpQvaZaXaXaXaYQvmJQvLfsEMILfQvQvhCVYMCMChQVYyAMCMCyAVYVYVYVYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZKZjHMCMCyAMChQVYdQjHyZyZjHyZyAyZMCFgJpyAababKZtcFgyZyZyZjHFgtcJpyZyZyZyZyZyZyZyAababababaaaa
aaaaabababababababababababababababababababababababababZlQvMIQvQvQvMIfOQvQvZlQvQvQvQvQvLfQvQvLfQvHpfOQvmJHpQvQvQAQvpVQvQvFgMCJpQvsEQvuBQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvqDmJZlQvJpMCKZQvLfHpMImJQvbobnbpbnaYLfQvQAQvJpMCVYryMCJpMCyAKZqfMCMCZlfOQvmJMIQAaZaXaXaXaYLfQvHpqDQvKZMCqfMCVYryMCJpMCgCjHFgMCyZyZyZjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAMCtcMCMCyAMCMCMCgCVYVYMCMCtcMCMCKZMCyAabababababababjHqfUcyAKZababKZqfUcyAyZyZyZqfJpababababaaaa
aaaaababababababababababababababababababababababababababQvmJpVQvmJHpQvQvHpQvHpLfQvHpQvQvyFQvqDMIQvQvuBLfQvfOQvqDLfQvMCKZMCqfMCMCKZJpQvyTQvyTQvyTQvyTQvyTQvyTQvbCQvyTQvLfQvMIQvMCMCMCtcMCUcQvqDQvmJaZaXbnaXaYQvZlQvQvUcMCqfMCFgMCyZjHFgyZMCUcMCuBHpqDpVQvaZaXaXaXaYuBQvfOQvVYdQMCFgMCtcMCyAyZyAjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCKZMCMCMCKZQvFgqDMCMCTuhtVYgCMCUcagMCJpMCabababababababababababababababababJpKZtcyAFgabababababaaaa
aaaaabababababababababababababababababababababababababababQvQvLfpVQvsEpVQvmJqDQvmJsEQvpVQvMIsEQvmJZlQvQvQvQvMIuBtcMCJptcFgMCUcyAiXMCUcQvQvHpQvpVQvQvHpQvZlQvfOQvuBQvHpMCMCtcKZMCagVYFgMCVYVYHpZlQvbbbdbdbdbeqDQvMCtcVYMCKZyZyZyAyZyZyZyZyAMCKZqfQvLfQvFgaZaXaXaXaYQvsEUcKZVYLKyZyZKZMCjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHVYryagMCFgQvmJQvMIfOQvQvyAMCMCMCMCyAMCVYMCLfQvfOababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababfOZlQvQvQvsMQvQvQvQvuBQvfOMIQvsWQvQvqDQvQvmJpVQvsWQvHpMCKZjHyZyZyZyZyZjHtcMCMCKZqfMIQvqUQvMIQvmJqDHpQvLfQvMCFgyAMCMCUcVYVYKZtcMCyAKZJpQvLfQvMImJuBelQvMCFgLKyAyZyZyZyZyZyZyZyZyZyZyZjHKZJpLKUcaZaXaXaXaYKZJpjHMCyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAjHMCJpyAVYVYVYKZQvqDQvLfHpuBQvmJQvLfMCUcMCMIsEfOQvelHpQvababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababQvqDsEDifOQvZlQvfOQAQvMIQvQvQvZlQvpVQvQvHpQvQvQvQvJpqfMCyAyZyZyZyZyZyZyZyZMCtcMCJpMCMCqDQvmJQAQvQvqUQvHpMCMCMCMCJpMCMCyAjHyZyZyZMCKZMCMCMCZlQvHpQvKZhCVYMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAyZaggCOEOEOEOEOEqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCqfMCMCuBQvmJHpQvfOQvpVQvQvsEQvLfQvQvMCfOQvQvQvQvqDQvMIQvfOabababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababQvfOQvQvQvQvmJqDQvHpQvmJQvnYQvuBilsEQvmJQvQAQvMCUcMCKZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAMCLfQvQvuBHpQvZlMIVYVYUeMCKZjHyAyZyZyZyZyZyZyZMCagLKyAMCsEQvUcMCVYgCyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUcMCMCFgilHpQvQvQvuBQvQvQvuBfOQvQvQvMIfOQvQvMILfHpQvQvmJQvLfQvabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababMImJQvQvnYQvMIpVQvQvHpQvZlQvQvQvfOQvqDQvQvHpQvMIJpMCyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCUcMCMCQvQvmJKZMCVYgCMCJpyZyZyZyZyZyZyZyZyZyZyZUcyZKZJpMCKZMCqfMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCtcMCMIfOQvLfQvnYQvLfQvmJQvHpQvmJqDQvQvHpQvmJQvsEQvQvuBQvQvababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababQvpVQvQvQvQvQvQvmJQvfOQvsEQvmJHpQvZlQvLfQvFgqfKZtcyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCqfMCKZtcMCMCMCtcKZyAMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZFgMCyAjHyZJpyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZtcFgMCKZJpMCFgVYVYMCyZjHyZyZjHFgyAgCVYQvsEqDQvQvQvQvQvQvQvqDZlQvQvZlQvsEQvQAQvQvMIilQvfOQvelQvMIabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababHpqDQvQvmJMIsELfQvQvpVQvHpQvqDQvQvQvQvmJQvHpVYVYVYjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHtcjZVYVYJpyAMCUcMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZyZyZyZyZyZyZyZyZyZyZmDyZyZyZtcjHMCUcMCQvmJMIMCyAVYhtMCMCyAMCUcqfMCFgJpfOuBQvQvHpfOmJQvsEHpMIQvQvsEfOQvQvilQvQvuBQvfOQvpVQvQvQvqDababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababQvQAQvQvfOZlQvHpQvQAQvQvQvfOQvpVfOQvHpQvMCJpFgqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpVYMCqfjHMCKZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpLKyAUcMCJpQvuBMIQvpVQvbSMCMCMCJpsMfOqDQvpVQvQvQvQvQvLfQvQvQvpVQvQvQvelQvLfQvQvmJuBLfQvMIQvmJQvQvHpMIsEQvHpabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababZlQvHpQvpVQvHpQvQvQvQvpVQvmJQvZlQvuBQvZlMCMCtcMCjHyZyZyZyZyZyZyZyZyZyZyZyZjHyZyZyZyZyZyZyZyZyZFgyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZyZMCjHFgyAyZyZyZyZUctcMCjZMCQvHpQvelQvfOQvQvelQvQvfOpVQvQvHpQvsEQvQvfOQvpVQvsEqDQvfOQvqDLfQvQvuBQvQvQvQvfOQvQvmJQvQvqDQvmJQvLfQvQvabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababMIsEfOQvpVsEuBQvLOQvbiQvQvQvLfQvsEQvQvMCqfUcMCKZyZyZyZyZyZyZyZyZUcyZyZyZJptcjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAyZyZUcyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZtcMCagVYMCMCjHFgyAMCMCQvLfQvHpQvQvQvMIQvmJHpQvQvuBHpQvQvfOQvQvQvQvLfmJMIQvilQvQvQvQvQvQvMIQvmJHpQvpVmJHpQvelQvHpLfQvQAQvQvHpQvuBababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababHpQvuBQvQvQvfOQvQvQvmJQvfOQvMIQvQvpVJpKZMCMCyAyZyZyZyZyZyZyZJpKZMCtcjHMCUcMCMCKZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHqfKZMCyZyZyZyZmDyZyZyZyZyZyZyZyZMCtcVYVYVYMCjHJpMCKZMCyZMCUcyZyZyZyZyZyZyZOEOEOEOEOEyZyZjHFgMCMCVYdQMCUcqfMCZlQvQvQvQvuBQvQvmJLfHpQvHpQvmJZlfOQvQvmJQvQvmJLfQvQvQvQvQvfOQvmJLfHpQvmJQvQvpVQvQvQvQvLfQvsEuBQvQvQvsEQvZlQvQvQvZlabababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababQvLfQvmJpVQvmJqDsEpVQvQvZlQvHpQvUcMCKZMCtcMCJpyZyZyZyZyZyZyZjHMCMCMCMCMCqfVYMCtcMCyZyZyZyZyZyZyZyZyZyZyZyZyZMCtcJpMCUcMCKZMCyAMCyZyZyZyZyZyZyZyZyZyZUcjHFgJpMCfOZlQvqfQvuBMCyAMCtcMCjHyZyZyZyZdQjZaZaXaXaXaYKZhQMCyAMCQvQvqDQvMILfQvQvQvmJpVQvmJfOQvLfsEQvfOQvQvqDQvQvelQvZlQAQvqDMIQvHpQvmJqDQvMIpVQvQvQvQvZlfOQvQvmJQvZlQvQvLfQvsEQvMIQvQvQvmJfOQvababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababsEQvqDQvQAQvLfQvQvQvLfQvMCMCyAMCMCMCMCyAMCjHyZyZyZyZyZyZyZyZFgMCUeVYhCMCKZMCJpMCMCFgyZyZyZyZyZyZyZyZyZyZyZjHyAMCMCZltcQvQvfOMCUcVYdQyZyZyZyAMCqfjHFgyAMCQvMCQvMIuBQvQvQvfOQvMIJpVYgCVYJpyZyZyAVYgCaZaXaXaXaYJpFgQvfOQvQvfOQvsEQvQvQvHpMIQvQvQvQvQvQvQvZluBQvQvelQvpVMIilQvQvQvQvZlQvQAQvpVQvQvfOQvQvQvfOQvHpQvqDQvQvilelQvQvmJQvQvqDLfQvmJLfQvMIQvQvababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababQvpVfOHpQvHpQvfOfOtcMCJpqfjHMCgCVYhtMCMCyZyZyZyZyZyZyZyZyZKZyAMCMCVYVYPTQvyAMCqfVYVYyAjHKZJpMCyZyZyZyZyZUcJpQvqDQvuBQvQvLfQvQvMChQVYFgjHKZMCJpQvuBQvQvHpQvQvQvHpfOQvMILfQvHpQvQvVYVYhQMCFgjHMCVYhCaZbqbrbraYHpQviluBQvLfQvQvQvQvZlQvmJfOQvHpQvelQvpVsEQvQvQvpVQvQvsEQvfOQvfOQvmJuBQvQvsEQvfOQvmJQvnYQvQvQvmJuBQvQvLfQvMIQvHpQvfOQvQvQvQvQvQvuBHpababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababQvMIQvqfVYUcsEMCyAKZUcMCyZtcjZLKVYMCJpyZyZyZyZyZyZyZyZyZyZJpUcMChCVYMCelQvLfuBMCMCMChQVYMCqfjHMCyAMCJpMCVYQvQvelQvMImJQvQvZlQvMIQvMCyAMCMIQvQvMIfOLfQvQvmJpVsEQvLfQvmJMIsEQvLffOQvfOMCMCqfMCUcuBaZaXaXaXaYMIQvHpsEpVQvQvQvpVsEQvLfQvHpQvsEQvMIbRQvQvZlQvmJQvLfHpQvuBQvTvQvQvQvQvfOQvMIqDQvmJQvpVQvQvQvZlQvLfQvmJQvQvsEQvQvmJQvmJuBfOQvQAQvsEQvuBabababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababZltcgCjZVYJpKZjHFgMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCMCMCQvHpQvLfQvZlQvQvHpMCUcMCFgMCMIMCMCqDKZMCZlQvQvpVQvQvQvQvZlQAQvQvfOQvLfQvQvQvQvfOQvQvQvQvuBQvQvuBQvQvQvQvQvQvpVQvQvuBQvHpQvQvMILfQvaZaXaXaXaYQvQvQvMIQvQvmJuBQvQvQvQvsEilZluBQvQvLfQvfOQvQvLfQvQvQvLfQAQvQvpVQvQAQvQvLfQvfOQvZlQvQvQvQvmJQvQvQvHpQvQvfOQvQvLfQvQvQvQvsEQvQvqDQvpVQvabababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababMCJpKZyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUctcMCyAqfMCqDQvQvfOQvQvfOQvLfMCQvuBHpQvpVQvQvQvQvuBQvQvQAHpQvfOsMQvQvQvQvQvMIuBQvQAQvpVQvQvelQvfOQvQvmJMIQvfOQvnYQvQvQvsEQvQvmJQvQvpVQvQvqDaZaXaXaXaYuBmJLfQvHpQvQvQvelQvfOQvpVQvfOQvQvmJQvQvmJpVLfQvfOQvmJHpQvMILfsEQvuBQvmJpVQvsEQvQvQvuBQvQvQvfOQvLsLsLsLsQvMIQvsEpVQvLfQvfOZlQvQvLfQvababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababMCUcFgtcyAJpqfjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZmDyZjHMCMCKZMCMCMCQvelQvuBQvmJZlQvQvHpQvsEQvMIQAQvuBQvfOQvMILfQvQvuBQvQvsELfQvmJHpsEQvZlQvsEQvQvmJQvHpQvpVQvQvfOilQvsEQvQvfOuBQvfOQvQvnYQvQvQvQvMIaZaXaXaXaYQvQvQvsEQvfOQvQvQvQvQvmJQvQvQvQvQvQvpVQvQvQvsEMIQvZlQvQvfOQvQvqDfOQvQvQvQvQvuBQvQAQvQvfOmJMILsaWLskeLILsLsLsQvHpQvfOQvmJQvQvQvmJQvMILfabababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababJpyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHKZyZMCJpMCqfMCFgQvLfQvQvQvQvQAQvMIQvmJZlQvuBfOQvilQvQvsEQvQvmJQvQvQvQvmJLfQvQvZlQvQvQvQvQvpVQvLfQvqDQvQvsEQvLfQvQvfOQvQvQvHpQvfOQvQvMIQvQvQvQvmJuBZlaZaXaXaXaYMIQvpVQvuBQvQvmJLfQvHpQvqDelQvpVQvfOQvQvQAQvHpQvfOQvsEQvQvsEQvQvQvQvfOQvmJsEQvHpQvLfQvQvLsLILsLsLsLsLsLsLILsLsLsQvQvQvQvQvQAQvQvHpQvababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababMCtcjHMCabqfjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUcqfMCyAMCVYMCMCQvQvHpQvQvmJLfQvQvQvLfQvQvQvQvQvQvqDZlmJpVQvHpQvQvpVQvelQvQvQvQvQvmJQvfOQvmJQvQvQvQvQvQvLfQvuBQvsELfQvQvQvmJpVQvQvQvQvelLfQvuBQvMIQvQvQvaZaXaXaXaYQvQvQvZlQvsEQvMIQvQAQvQvsEQvQvmJQvZlQvmJQvuBilQvLfuBQvQvpVsEQvmJQvHpQvQvQvilfOMIQvLsLsLsLsababababababLsLsLsLskeLsLsLsZlQvQvHpQvfOabababababababababababababababababababababababababababababaaaa
aaaaabababababababababababJpMCKZyZyZFgyAMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCMCFgMCMChQMCyAQvLfQvQAQvQvfOQvsEHpuBQvelQvpVQvsEQvQvQvQvelQvfOQvQvQvLfqDQvfOHpQvQvQvuBQvQvQvnYQvsEZlQvmJQvQvpVQvQvQvQAQvQvQvsELfQvmJHpQvQvmJfOQvLfQvQvaZaXaXaXaYqDLfQvQvLfQvQvQvpVQvQvpVilMIQvQvQvQvMIQvHpQvQvmJfOQvHpQvHpfOQvQvLfsEQvMIfOQvQvQvLsabababababababLsLsababLsLsLILsLsLsLsLsLsLsLsMIababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCtcMCJpQvFgMCQvLfQvsEpVQvqDMIQvZlQvQvQvLfQvQvQvfOQvMILfQvZlQvQvQvQvQAQvLfsEQvpVQvQvpVQvQvQAQvHpQvQvQvQvQvMIQvLfilQvHpQvQvQvZlqDQvMIQvQvQvQvQvsEQvQvQvQvHpaZaXaXaXaYQvQvQvQAQvQvfOQvQvQvmJQvQvfOHpQvnYQvQvLfsEqDQvQvQvQvpVmJQvQvMIQvHpQvpVQvQvZlQvabLsababLsLsLBLsLsLsLILsabababLsababLsLsLsaWLsLsLsababababababababababababababababababababababababababababababaaaa
aaaaababababKZFgtcjHyAUcFgtcyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCUcyZyZyZyZMCjHMCMCyAMCQvuBQvLfQvQvQvMIQvQvsEQvLfHpQvQvmJQvQvuBQvmJQvHpQvQvmJQvQvLfQvTIQvuBQvQvQvQvQvfOQvsELfQvQvQvuBQvLfQvHpQAQvQvQvmJQvQvmJMIQAQvQvZlQvuBQAQvfOQvQvQvmJMIMIaZaXaXaXaYQvHpQvilMImJHpQvLfQvuBZlQvQvQvQvQvpVQvQvQvQvLfQvQAQvQvQvLfQvfOuBQvQvmJMIQvLsLsLsLsLsLsLsLILsLsaWLsLskeLsLsabLsLsabababLsLsLsLILsababababababababababababababababababababababababababababababaaaa
aaaaababqfUcyAyZyZyZyZyZqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyZyZyZUcVYhQVYagMCJpMCyAMCqfKZMCFgQvelHpQvQvQvfOQvHpQvLfQvilQveluBQvelqDQvQvZlQvQvpVQvQvelQvHpQvQvLfQvmJQvLfQvmJQvQvQvQvQvZlQvmJQvQvQvQvQvsEQvqDQvQAQvuBQvQvQvmJfOsEHpQvQvuBsEbiQvQvqDQvaZaXaXaXaYMIQvQvQvQvQvQveluBQvfOQvQvmJLfQvsEuBQvmJpVQvQvLfQvQvmJZlQvLsQvQvQvLsLsLskeLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa
aaaaababFgyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCqfgChCMCMCVYVYjZVYMCKZMCMCUcMCMCQvQvQvQvQvQvmJuBZlQvmJQvQvfOQvQvLfQvZlQvQvQvLfQvQvmJQvfOQvQvqDQvfOQvuBQvQvfOQvQvuBZlQvmJMIsEQvQvQvQAQvmJpVQvQvQvfOMIQvQvLfQvMIQvQvMIQvQvQvmJQvQvQvfOQvLfQvaZaXaXaXaYuBQvpVQvZlLfQvQvQvQvZlQvpVQvQvfOQvQvQvQvQvQvmJZluBQvQvQvLsLsLsLsLsLsLILsLsLsababLIabababqwacqwacDMacacacLsLsLsabLsLsLsLsLsLsLskeLsLsababababababababababababababababababababababababababababaaaa
aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCUcjZVYMCMCUeMCMCyAQvHpMCtcMCQvMIfOQvHoQvLfQvQvQvQvZlQvXEQvuBQvmJQvQvsEQvLfQvQAQvHpQvuBQvsEQvLfQvQvQvsEQvLfQvqDQvQvQvQvQvQvQvQvfOQvQvQvHpQvLfQvQvQvQvsEQvQvfOQvpVQvsEQvLfQvQvQvLfQvQvQvQvQvaZaXaXaXaYQvQvQvQvuBQvfOHpQvmJQvfOQvQvQvQvQvZlQvfOHpMIQvQvLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababacqwacacqwacacacacqwababababLsLsLILsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZtcyZKZJpyAjHMCQvMCtcQvmJMCMCMCFgMCQvMIQvZlQvZlQvQvQvQvHpQvQvpVsELfQvQvQvQvfOQvQvpVQvfOQvQvmJQvZlQvQvpVQvHpQvQvQvmJpVQvMIQvQAQvelQvmJLfQvpVQvqDQvQvsEQvMIQvsEQvQvmJuBQvHpQvQvmJQvQvZlQvQvqDelQvQvsEQvHpQvuBaZaXaXaXaYQvZlQvQvQvHpQvQvQvQvLIMILsLsuBQvLfLsQvQvQvLsLsLsLsLsLskeLsLsLsLsLsLsLsababababababababacqwqwacacqwacacqwacqwababababLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZFgFgMCyAababZlQvmJMIQvHpuBQvQvJpQvLfQvsEQvQvmJQvHpsELfuBQvmJsEQvQvQvQvKEQvQvQvMIQvsEHpQvpVilcpZlQvQvmJsEQvQvuBQvfOQvLfQvmJHpQvMIQvQvqDsEQvQAQvQvmJLfQvQvVhQvuBMIQvQvpVQvQvelQvQvQvQAQvQvfOQvQvQvuBMIQvQvQvmJaZaXaXaXaYQvQvQvQvTIQvQAQvLfLsLsLsLsLsLsLsQvpVLsLsLsLsLsLsLsLILsLsLsLsLsLILsLsLsabababababababqwqwqwXgYwMkqwacBIacacqwabababababLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAababababababQvpVQvsEQvQvQvKEQvQvQvuBQvqDQvQvQAQvQvQvQvZlQvMIQvHpQvmJQvQvmJMIQvLfuBQvQvsEMIQvLfQAuBQvMIQvQAQvQvHpQvQvQvQvQvfOQvQvZlQvHpQvQvuBQvQvQvQvZlQvQvQvQAHpQvfOQvLfQvQvHpLfQvQvQvQvQvmJfOQvQvLfQvQvMIaZaXaXaXaYqDQvLfQvQvQvQvQvLsLsLILsLsLsLsLsLILskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababacBIqwacacqwacacqwacacababababababLskeLsLsLsLsLILsabababababababababababababababababababababababababababaaaa
aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZqfUctcjHababababababuBQvmJqDQvelQvQvQvZlQvfOQvmJLfQvQvQvQvHpelQvQvQvLfQvQvQvQAQvQvQvQvHpQvLfQvQvQvQvQvQvQvQvfOQvQvQvmJMIQvuBQvmJQvQvQvHpQvLsQvfOQvQvfOQvLsLILsLsLfQvQvQvLsLsQvQvfOuBQvQvLILsLsMIQvQvQvLsLsLILsLsLsaZaXaXaXaYQvQvQvQvpVLsLsLsLsLskeLsaWLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsababababababqwacacacacacLjqwYNqwYwacqwabababababLsLsLsLsLBLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaababyAyZyZyZyZyZJpyZyZyAtcFgJpKZyAjHabababababababababQvZlQvfOQvpVQvmJQvQvsEMIQvpVQvQvpVQvmJQvQvQvQvmJQvQvMIQvQvqDQvLfelQvQvQvZlQvLfQvmJpVsEZlQvHpQvQvQvQvelQvQvQvQvpVQvLfLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsQvQvLsLsLsLsaWLsLsLsLsLsLsLILsLsLsaZaXaXaXaYQvQvHpQvLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababqwqwqwXghmqwqwacBIqwqwqwacabababababLsLsLILsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaababFgyZyZyZyZFgqfjHUcMCabababababababababababababababababQvQvsEQvQvQvLfQvHpQvHpQvQvQvsEQvQvZlpVilqDQvZlQvnYQvQvsEuBQvQvpVQvmJQvsEQvqDQvQvQvQvLsLspVLsLfQvQvQvLfQvHpQvLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLILsaZbgbgbgaYLsMIQvLsLsLsLsLsLsLILsLsLsLsLsLsLsLsBRLsLsLsLsLsLskeLsLsLsLsLsLsLILsababababababababacacqwacqwMkqwqwqwacqwqwabababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaababJpjHtcUcyAKZacabababababababababababababababababababQvQAQvHpQvMILfQvQvelQvQvmJQAQvqDQvuBQvQvQAQvQvQvmJQvpVQvQvQvQvfOQvQvQvLfuBQvQvQvLfQvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsabababLsabababLsLsLsLsLsLsLsLsLsLsLsLsLILsLskeLsLsLsLsLILsLsLILsLsLsLsaZaXaXaXaYLsLsLsLskeLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsabababababababababqwqwqwqwXgacqwqwqwababababababLsLsLsLsLsBRLsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaababababababbsbtbuabababababababababababababababababababQvQvMIQvQAQvQvQvmJQvpVQvQvQvQvLfQvHpmJQvQvQvpVQvQvQvQvQvLfZlQvQvLsLfLsQvQvHpfOQvQvLsLsLILsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsabababababababLsLsBRLsLskeLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsXHXHbfaXaXaXbhXHXHLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLBLsLsLsLsLskeLsLsLsababababababababababababqwqwqwqwabababababababLsLsLsLsLsLsLsLskeLsLsLsLsababababababababababababababababababababababababaaaa
aaaaababababababacacacabababababababababababababababababababfOQvQvmJQvQvfOQvQvQvilLfQvpVQvQvMIQvQvQvQvsEQvLfQvuBLsLsQvQvLsLsLILsLsLsLsLsLsLsLILsLsLsLsLsLsababLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsababababababLsLsLsLsLBLsaZaXaXaXaYLsLsLsLsLsaWLsLsababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababLsLILsLsLsaWLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababababacababababababababababababababababababababQvsEQvqDZlQvuBQvLfmJLfQvsEQvQvmJQvQvLfQvpVQvLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLsLsLsLILsabababLsLsLsLsLsLsLILsLsabababababababLsLILsLsLsaWLsLsLsLILsLsLsLsLsababababababababLsLILsLsLsLIaZaXaXaXaYLsLsLsLsLsLsLsLsababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsababababababababababababababababababababLsLsLsLsLsLsLsLsLsBRLsLsababababababababababababababababababababababababababaaaa
aaaaabababababbvbvbwbvbvabababababababababababababababababQvQvuBZlQvQvmJQvQvQvMIQvQvZlQvQvQvQAQvqDQvQvLsLsLsLILsLsLsLsLsLskeLsLsabababababLsLsLsBRLsLsLsabababababLsLsLsLsLsLsLsLsLsababababababababLsLsLsLsLsLBLsLsLsLsLsLsababababababababLsLsLsXpLsLsaZaXaXaXaYLsXpLsLsLsLsLsLsababababababababLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsBRLsLsLsLILsLsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababbvbxbxbxbybybybybybyababababababababababababQvmJLfQvelQvQvsEQvfOQvLsLsLsLILsLsQvQvQvLsLskeLsLsLsLILsLsLsLsLsLsLsababababababababLsLsLskeLsLsababababLsLsLskeLsLsLILsLsLsababLsababababLsLsLsLsLsLsLsLsLsLILsabababababababababLsLsLsLsLsLsaZaXaXaXaYLsLsLsLILsLsababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsLsabababababababababababababababLsLskeLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaabababababbybxbxbxbxbxbxbxbxbyababababababababababababQvpVQvQvQvpVQvQvLfQvQvLsLILsLsLsLsLsLsLBLsLsLsLsaWLsLsLsLsLILsLsLILsababababababLsLsLsLILsLsLsLsLsababLsLsLILsLsLsLsLskeLsLsababLsLsLskeLsLsLsLsLsLsLsLskeLsLsLsababababababababLsLsLsLsLskeLsbzbrbrbrbBLsLsLsLsLsLsababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLskeLsLsLsLsLILsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsabababababababababababababababababababababababababaaaa
aaaaabababababbybxbxbxbxbxbxbxbxbyabababababababababababQvQvQAQvBRLILsLsBRZlLIkeLsLsLsLsLILsLsLsLILsLILsLsLsLsLsLsLskeLsLsLsLsLsLsLsabLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababLsLsLILsLsLsLsbzaXaXaXbBLsLsLskeLsLsLsLsLsLsLsLsababLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLskeLsLsLsLsLsLsababLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa
aaaaabababababbybybybwbybybybxbxbyababababababababababababpVQvkeLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsbDaXaXaXaYXpLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababbybxbEbxbxbxbybxbxbyababababababababababababyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXbFbGbHbGbIyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXabababababababababababababababababababababababababababaaaa
aaaaabababababbybJbxbKbxbMbybxbxbyababababababababababababLILsLsLILsabababLsLsLsLskeLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLILsLsLILsLsLsLsLsLsLskeLsLsLsLsLsLILsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLILsLsLsaZaXaXaXaYLsLsLILsLsLskeLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLILsLsLsabLsLsLsLsLILsLsLILsLsLsLsLILsLsLsLsaWLsLsLsLILsLsLsLILsLsLsLsLsaWLskeLsLsLsababababababababababababababababababababababababababababababaaaa
aaaaabababababbybxbNbObxbxbybxbxbyababababababababababababLsababababababababababLsLsLsLILsLsLsLsLsLsLskeLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsababLsLILsLsLsLsLskeLsLsLsLsLsLILsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsXpLsLILsaZaXaXaXaYLsLsLsLsLsLsLsLsLILsLsLsLILsLskeLsLsLsLsLsLsLsabLsababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsabababLsabLsLsababLsLIabababababababababababababababababababababababababababababababaaaa
aaaaabababababbybMbEbKbxbMbybxbxbybybybyajajajababababababababababababajababababLILsLsLsLsLsLsLsLsLsLsLsababababLsababababababLsLsLskeLsLsaWLsLsLsLILsLsLsLsLsLILsLsabababpuCqCqCqpuLsLsLsLsLsLskeLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLILsLskeLsLsLsLsLsaZaXaXaXaYLsLsXpLsaWLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsabababababababababababababLsLILsLsLsLskeLsLsLsLILsabababababababababLIabababababababababLsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababbybTbNbObxbxbybxbxbxbxbUakakakajajajabababababababababajajajabababababLsababababababababababababababababajajababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababpupuCqQuCqpupuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLssLsLsLsLsLLsLsLsLsLsLsababababababababababababababababLsLsaWLsLILsLsababababababababababababababababababababababLsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaabababababbybMbVbKbxbMbybxbxbxbxbxbxakamakakajajababababababababajakajajababababababababababababajajajajajajajajajajajababababLsLsLsLsLILsLsababLsLsLsLsabababababCqCqCqCqCqCqCqCqCqLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLssLsLsLsLsLLsLsLsPhPhPhPhPhaZaXaXaXaYsLsLsLsLsLLsLsLssLcscscssLLsLsLsLsLsLsababababababababababababababababLsabLsLsLsLsLsababababababababababababababababLsabababLsLsLsLsLsLILsabababababababababababababababababababababababababaaaa
aaaaabababababbybxbNbWbEbxbybybybybybybybyakakakakajababababababababajakakajajajajababababababababajajakakakakakakakakakajajababababababLsLsabababababababababababLspuCqCqCqCqOwCqCqCqCqpuLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLssLcscscssLLsLsLsLsLILsLsLsaZaXaXaXaYsLVZcscssLLsXpLssLcsnmcssLLsLsLsXpLsabababababababababababababababababababLsababLsabababababababababababababLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa
aaaaabababababbybJbxbxbxbMbyababababababajajajbXakajajabababajajajajajakakalakajajajajajajajajajajajakakakakakakajajakakakajajabababababababababababababababababLspupuQuCqOwCqCqCqOwCqQupupuLsLsLsLsLsLsLsLsLsLsLsLsLILsXpLsLssLcsnmcscsLsLsLsLsLsLsLsLsaZcbaXaXaYcscsnmcssLLsLsLssLVZcscssLLsLsLsLsLsababababababababababLsLsabLsLsLsabababababababababababLsLsLsababababLsLsLILsLsLsLsLsLsLsLsLsLskeLsLsabLsLsabababababababababababababababababababababababaaaa
aaaaabababababbybYbEbZbxcabyababababababababajajajajajajabababajakakakakakakakakajajakakakakakakakakakakakakakajajajakakakakajabababababababababababLsabLsLsLsLsLsCqCqCqCqCqCqCqCqCqCqCqCqCqLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLssLVZcscssLLsXpLssLsLsLsLsLaZaXaXaXaYsLcscscssLLsLsLssLsLcssLsLLsLsLsLsLsabababababababLsLsLsLsLsLsLsLsLsabababababababLsLsLsLsLIDELsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababbybybybybybybyabababababababababababajajajajababajakakakakamakakakajajajakakakakakakajajajakakajajajakakakakakajabababababababababLsLsLsLsLsLsLILsLsCqCqCqOwCqCqzWCqCqOwCqCqCqLsLsLsLsLsLskeLsLsLskeLsLsLsLsLsLssLsLsLsLsLLsLsLssLcsVZcssLaZaXaXaXaYsLsLsLsLsLLsLsLsLsLsXpLsLsLsaWLsLsababababababLsLsLsLskeLsLsLsLsLILsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsaWLsLsLsLsDELsLsLsLsababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababajajajajajajakakakakakakakakakajajakakakakakakakajajakakakakakakakakakakajajababababababhshsLsLsLsLskeLsLsLsLsCqCqCqCqCqCqCqCqCqCqCqCqCqLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskesLcsnmcscsaZaXaXaXaYLsLsLsLsLsLskeLsLILsLsLsLsLsLsLsLsabababababLsLsLsLILsLsLsDELsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsaWLsLsLsLsLsLsLsDELsLsLsLILsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababajajakakakakakajakakakakakakakakakakakakamakakakakakamakakakakakakakakakajababababababCqhshsLsLsLILsLskeLsLspupuQuCqOwCqCqCqOwCqQupupuLsLsLsLsLsLsLskeLsLsLsLILsLsaWLsLsLssLsLsLsLsLLsLssLcscscssLaZaXaXaXaYsLsLsLsLsLLsLsLssLsLsLsLsLLsLsLsLsLsababLsLsLskeLsLsLsLsaWLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLILsLsLsLsDELsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababajakakakakajajajakakakakakakakakakakakajajakakakakakakajakajakakakamakajajajajajababCqCqhshsLsLsLsLsaWLsLsLspuCqCqCqCqOwCqCqCqCqpuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLssLcscscssLLsLssLsLsLsLsLaZaXaXaXaYsLcscsVZsLLsLsLssLcscsVZsLLsLskeLsababLsLsLILsLsLseMLsLsLsLsLsLILskeLsdtdtdtdtdtdtdtdtdtdtLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababajajakakakajajakakakakakakakakakakajajajajakakakakajajajajajakakakakakakakakakajajCqCqCqCqhshsLskeLsLsLsLsLILsCqCqCqCqCqCqCqCqCqLsLsLsLskeLsLILsLsLsLskeLsLsLsLsLsLsLsLssLcsnmVZsLLsLsLsXpLsLsPhaZaXcbaXaYcscsnmcssLLsLsLscscsnmcssLLsLILsLsababLsLsLshKLsLBLsLskeLsDELsLsLsLsdtdtLyGTLyPALyGTLyGTdtdtLsLskeLsLsLsLILsccccccccccccccccccLsLsLsababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababajakakakakakakakakakajajajakakakakajajakakakakakakajajajajajakakakakakakakakajajCqCqawCqCqhshsLsLsLskeLsLsLsLspupuCqQuCqpupuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLssLcscscssLLsLsLsLsLsLsPhaZaXaXaXaYsLcscscssLLskeLssLcscsVZsLLsLsLsLsabababLseMLsLsDELILshKLsLsLseMLsdtdtPAGTGTGTGTGTGTGTGTPAdtdtLsLsLsLsLsLsLscccdcdcdcdcdcdcdccLsLsLsababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababajajakakakakakakakakakakajakakamakakakakakakakakamakakakajajakakakakakakajajajajCqCqCqCqCqCqCqhsLsLsLsLsLsLsLsLsLspuCqCqCqpuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLssLsLcssLsLLsLsPhPhPhPhPhaZaXaXaXaYsLsLsLsLsLLsLsLssLsLsLsLsLLsLsLsLsababLsLsLsLsNNLseMLsNNLsnhLBLsdtdtGTGTGTSuGTGTGTGTGTGTGTGTdtdtLsLsLsLsLsLscccdOiOiUGOiOicdccaWLsLsLsabababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababajajakakakamakakakakajajajakakakakakakakakajajakakakakakakakakakakakakakajaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUchaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaXaXaXaXaXaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUciaUckclcmckaUcmaUcnclckaUaUcodtGTGTVMGTGTcxOyCyEyGTGTVMGTGTdtdtdtdtdtdtdtcccdOiPCNkPCOicdccLsLsLsLsabababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababajakakakakakakakakajajakajakakakakakakajakakakakakakakakakakakajakakakajaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXcbaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbgaXcfaXaXaXcgaXcqcraXaXcqcraYIUGTGTVMGTGTGTGTGTGTGTGTVMGTGTGTGTGTPAGTGTIUcccdUGcvRjDkUGcdccLsLsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababajajajakajajajakakakakakakakakakakakakajajakakakakakajakakamakajajajakakajaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXbpaXaXaXbraXaXaXaXcbaXaXaXaXaXaXaXaXaXaXaXbgaXaXaXctaXcucwcwcuaXcyaXaXcBdtrtGTdtrtGTnLGgavbcGTpddtGTGTGTGTGTGTGTKcdtcccdEIKnKnVyEIcdccLILskeLsLsLsLsababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababajajajabajakakakakakakakakajakakakajajakakakakajajajakakakakajakakakakaXaXaXaXczaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbgaXcfaXaXaXcfaXctaXcqaXaXcgaYIUGTGTVMGTGTGTGTGTGTGTGTVMGTGTZqGTGTGTGTGTIUcccdEIMsYgMsEIcdccLsLsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababajajajakakakakakakajajakakakakakakakajajajakakakakakajakakakajbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcDbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcEbdbdbdcFcGbdcHcJbdbdcGcKbdbedtGTGTVMGTGTeaRbjRTMGTGTVMGTGTdtdtdtdtdtdtdtcccdOiOiOiOiOicdccLsDELsLILsLsabababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababajajakamakakajajajakakakakakakakakakakakakakakakakakakakajCqCqCqCqCqCqCqCqCqCqhsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsPhLsLsLsLssLsLcssLsLLsPhPhPhLssLsLcssLsLLssLsLcssLsLLsLsLsLsLILsLsLsLsababLsNNeMLsnhLsLseMLskiLsLBkidtdtGTGTGTSuGTGTGTGTGTGTGTGTdtdtLsLsLsLsLsLscccdOiJBJBJBOicdccLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababajajajakakakajakajakamakakakakakakakajakakakakakakakajajCqCqCqCqCqCqCqCqCqhshsLsLsLskeLsLskeLsLsLsLsLskeLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLssLVZcscssLLsLskeLsLssLVZcscssLLssLcscscssLLsLskeLsLsLsLsLsababababLsLsLskeLsLBLsLshKLseMLsLsdtdtZqGTGTGTGTGTGTGTGTZqdtdtLsLsLsLILsLsLscccdLPLPLPLPLPcdccLsLsLsaWLsLsabababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababajakakakakakakakakakakakakakajajajakakakakakakajajCqCqCqCqCqCqCqCqCqhshsLsLsLsLsLsLsLsaWLsLsLILsLsLsLILsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsXpLsLssLcsnmVZsLLsaWLsLsLssLcsnmcssLLssLcsnmcssLLILsLsLsLsabababababababababLBLshKLskiLsLskeLsLsDELsdtdtLyGTLyZqLyGTLyGTdtdtLsLsLskeLsLsLsLscccdcdcdcdcdcdcdccLsLsLsLsLsLsabababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababajajakakakakakajajajakakakakajajajajakakamakajajCqCqawCqCqCqCqCqCqhshsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLssLcscscssLLsLsLsLsLssLcscscssLLssLVZcscssLLsLsababababababababababababLsLsLsLsLsDELsLsLsLsLsLsLsdtdtdtdtdtdtdtdtdtdtLsLsLsLsLsLsLILsLsccccccccccccccccccLsLskeLsLsababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababajakakakajajajabajajajajajajajajakakakakajajCqCqCqCqCqCqCqCqCqhshsLsLskeLsLsLsLsLskeLsLsLsLsLskeLsLsLsLsLsabLsLsLILsLsLsLsabLsLsLsLsLsLsLILsLsLsLsLsLsLssLsLsLsLsLLsLsLsababsLsLsLsLsLLssLsLsLsLsLabababababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLILsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababajajajajajababababababajabajajajajajajajajCqCqCqabCqCqCqCqCqhshsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsabLsabLsLsLsLsababababababLsLsLsLsLsaWLsLskeLsLsLsLsLsLsLsLsLsabababababababLsLsLsabababababababababababababababababababababababLsLsLsaWLsLsLsLsLsLsaWLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLILsLsDELsLsLILsLsLsababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababajajabajabababababababababababajabajajajabababababababCqhshsLsLsLsLsLsLsabababababababLsLsLsababababababababLsLsabababababababLsLsLsabLsabLsLsLsLsLsLsLILsLsLsababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsDELsLsLsLsLsLsLsLsabLsLsabLsLsLskeLsLsDELsLsLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababajajababababababababhsLsLsababLsLsababababababababLsLsabababababababababababababababababababababababababababLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsabLsLsabLsabababababLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababababababaaaa
aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsabababababababababababababababababababababababababababababababababababababababababababababLsabLsLsababababababababababababababababababababababababababababababababababababababababababLsLsababababababababababababLsLsLsLsLsLILsLsLsLsaWLsLsabababLsLsabababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsabLsLsLsLsLsababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
File diff suppressed because it is too large Load Diff
+118 -191
View File
@@ -1,197 +1,124 @@
"aa" = (/turf/template_noop,/area/template_noop)
"ab" = (/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned/crew)
"ac" = (/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/crew)
"ad" = (/obj/structure/sign/departments/medbay/alt,/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/crew)
"ae" = (/obj/machinery/door/airlock/external,/obj/effect/mapping_helpers/airlock/cyclelink_helper,/obj/structure/fans/tiny,/obj/docking_port/mobile{callTime = 250; dheight = 0; dir = 2; dwidth = 11; height = 17; id = "whiteship"; launch_status = 0; movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); name = "Hospital Ship"; port_direction = 8; preferred_direction = 4; width = 34},/obj/structure/fans/tiny,/turf/open/floor/plating,/area/shuttle/abandoned/crew)
"af" = (/obj/machinery/door/airlock/external,/obj/structure/fans/tiny,/obj/effect/mapping_helpers/airlock/cyclelink_helper{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/fans/tiny,/turf/open/floor/plating,/area/shuttle/abandoned/crew)
"ag" = (/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned/medbay)
"ah" = (/obj/effect/spawner/structure/window/shuttle,/obj/machinery/door/poddoor{id = "whiteship_windows"},/turf/open/floor/plating,/area/shuttle/abandoned/medbay)
"ai" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light/small/built{dir = 1},/obj/structure/bed,/obj/machinery/airalarm/all_access{pixel_y = 24},/obj/item/bedsheet,/obj/machinery/atmospherics/components/unary/vent_pump/on,/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aj" = (/obj/structure/sign/warning/vacuum/external{pixel_x = 32},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light/small{dir = 4},/turf/open/floor/plating,/area/shuttle/abandoned/crew)
"ak" = (/obj/effect/spawner/structure/window/shuttle,/obj/machinery/door/poddoor{id = "whiteship_windows"},/turf/open/floor/plating,/area/shuttle/abandoned/crew)
"al" = (/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/medbay)
"am" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/crate/freezer/surplus_limbs,/obj/item/reagent_containers/glass/beaker/synthflesh,/obj/effect/turf_decal/bot,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"an" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock{name = "Cabin 2"},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"ao" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock{name = "Cabin 1"},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"ap" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/cable{icon_state = "1-2"},/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/zombie{desc = "This undead fiend looks to be badly decomposed."; environment_smash = 0; health = 60; melee_damage_lower = 11; melee_damage_upper = 11; name = "Rotting Carcass"},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aq" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/suit_storage_unit/cmo,/obj/effect/turf_decal/bot,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"ar" = (/obj/structure/shuttle/engine/propulsion{dir = 8},/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned/engine)
"ab" = (/obj/structure/closet/firecloset{anchored = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/sign/warning/vacuum/external{pixel_x = -32},/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"ac" = (/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/arrows{dir = 1},/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"ad" = (/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/tile/neutral,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/closet/crate,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"ae" = (/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/arrows{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"af" = (/obj/machinery/button/door{id = "whiteship_cargoleft"; name = "Left Cargo Blast Door Control"; pixel_x = 24},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/stripes/line{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"ag" = (/obj/structure/sink{dir = 4; pixel_x = 12; pixel_y = 2},/obj/structure/mirror{pixel_x = 28},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/freezer,/area/shuttle/abandoned/bridge)
"ah" = (/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/crew)
"ai" = (/obj/structure/closet/emcloset/anchored,/obj/effect/turf_decal/bot,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/sign/warning/vacuum/external{pixel_y = 32},/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/bridge)
"aj" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{icon_state = "0-2"},/obj/structure/reagent_dispensers/fueltank,/obj/item/weldingtool/largetank,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"ak" = (/obj/machinery/power/smes/engineering{charge = 1e+006},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1},/obj/structure/railing{dir = 4},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"am" = (/obj/structure/table,/obj/item/gps{gpstag = "NTREC1"; pixel_x = 6; pixel_y = 4},/obj/item/stack/sheet/mineral/plasma{amount = 10},/obj/item/stack/sheet/mineral/plasma{amount = 10},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/engine)
"an" = (/obj/structure/closet/firecloset{anchored = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 8},/obj/machinery/light/broken{dir = 8; pixel_x = -7},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"ao" = (/obj/effect/turf_decal/box/white/corners{dir = 4},/mob/living/simple_animal/hostile/hs13mimic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"ap" = (/obj/machinery/atmospherics/components/unary/vent_pump/on,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aq" = (/obj/effect/turf_decal/box/white/corners{dir = 8},/obj/item/trash/popcorn,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"ar" = (/obj/structure/closet/crate,/obj/effect/turf_decal/box/white/corners{dir = 4},/obj/item/storage/box/donkpockets{pixel_x = 6; pixel_y = 6},/obj/item/storage/box/donkpockets{pixel_x = -6},/obj/item/storage/box/donkpockets{pixel_x = -3; pixel_y = 7},/obj/item/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"as" = (/obj/structure/shuttle/engine/heater{dir = 8},/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/engine)
"at" = (/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/engine)
"au" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/table,/obj/item/storage/box/gloves{pixel_x = 5; pixel_y = 8},/obj/item/storage/box/masks{pixel_x = -6; pixel_y = 6},/obj/machinery/airalarm/all_access{pixel_y = 24},/obj/item/storage/backpack/duffelbag/med/surgery{pixel_y = 4},/obj/item/clothing/suit/apron/surgical,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/cable{icon_state = "2-4"},/turf/open/floor/plasteel/white/side{dir = 9},/area/shuttle/abandoned/medbay)
"av" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/structure/cable{icon_state = "4-8"},/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plasteel/white/side{dir = 5},/area/shuttle/abandoned/medbay)
"aw" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/door/airlock/medical{name = "Surgery"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel/white,/area/shuttle/abandoned/crew)
"ax" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/cable{icon_state = "4-8"},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"ay" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/structure/cable{icon_state = "4-8"},/obj/machinery/airalarm/all_access{pixel_y = 24},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 4},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"az" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/cable{icon_state = "4-8"},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aA" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/door/airlock/medical{name = "Crew Quarters"},/obj/effect/turf_decal/stripes/corner{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aB" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/turf_decal/stripes/line{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aC" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/turf_decal/stripes/line{dir = 1},/obj/machinery/light/small/built{dir = 1},/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aD" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/turf_decal/stripes/line{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/cable{icon_state = "2-8"},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aE" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/turf_decal/stripes/corner{dir = 4},/obj/structure/closet/secure_closet/freezer{locked = 0; name = "fridge"},/obj/item/reagent_containers/glass/beaker/waterbottle{pixel_x = -3; pixel_y = 3},/obj/item/reagent_containers/glass/beaker/waterbottle,/obj/item/reagent_containers/glass/beaker/waterbottle{pixel_x = 3; pixel_y = -3},/obj/item/reagent_containers/food/snacks/chocolatebar,/obj/item/reagent_containers/food/snacks/muffin/berry{pixel_x = 4; pixel_y = 4},/obj/item/reagent_containers/food/snacks/muffin/berry,/obj/item/reagent_containers/food/snacks/tofu,/obj/item/reagent_containers/food/snacks/burrito,/obj/structure/cable{icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "Hospital Ship Crew Quarters APC"; pixel_y = 24; req_access = null},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aF" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/portables_connector/visible,/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/turf_decal/bot,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aG" = (/obj/structure/sign/departments/engineering,/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/engine)
"aH" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/cable{icon_state = "2-4"},/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plasteel/white/side{dir = 9},/area/shuttle/abandoned/medbay)
"aI" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/cable{icon_state = "1-8"},/mob/living/simple_animal/hostile/zombie{desc = "This undead fiend looks to be badly decomposed."; environment_smash = 0; health = 60; melee_damage_lower = 11; melee_damage_upper = 11; name = "Rotting Carcass"; zombiejob = "Assistant"},/turf/open/floor/plasteel/white/corner{dir = 1},/area/shuttle/abandoned/medbay)
"aJ" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light/small/built{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 1},/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plasteel/white/side{dir = 4},/area/shuttle/abandoned/medbay)
"aK" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/secure_closet/personal,/obj/item/clothing/accessory/medal/bronze_heart{pixel_x = -3; pixel_y = 3},/obj/item/clothing/accessory/medal/conduct,/obj/item/clothing/accessory/medal/silver/valor{pixel_x = 3; pixel_y = -3},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aL" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/wardrobe/white/medical,/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aM" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/secure_closet/personal,/obj/item/storage/photo_album,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aN" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/sign/warning/nosmoking{pixel_y = -30},/obj/structure/table,/obj/machinery/microwave,/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aO" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/chair,/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aP" = (/obj/machinery/door/airlock/external,/obj/structure/fans/tiny,/obj/effect/mapping_helpers/airlock/cyclelink_helper,/obj/structure/fans/tiny,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aQ" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 8},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aR" = (/obj/structure/closet/crate{name = "food crate"},/obj/item/reagent_containers/glass/beaker/waterbottle/large{pixel_x = -5; pixel_y = 3},/obj/item/reagent_containers/glass/beaker/waterbottle/large{pixel_x = 2; pixel_y = 3},/obj/item/reagent_containers/glass/beaker/waterbottle/large{pixel_x = -2},/obj/item/reagent_containers/glass/beaker/waterbottle/large{pixel_x = 5},/obj/item/reagent_containers/glass/beaker/waterbottle/large{pixel_x = 1; pixel_y = -3},/obj/item/reagent_containers/glass/beaker/waterbottle/large{pixel_x = 8; pixel_y = -3},/obj/item/storage/box/donkpockets{pixel_x = -3; pixel_y = 3},/obj/item/storage/box/donkpockets,/obj/machinery/light/small/built{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"aS" = (/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned/engine)
"aT" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/space_heater,/obj/effect/turf_decal/bot,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aU" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/reagent_dispensers/watertank,/obj/effect/turf_decal/bot,/obj/item/reagent_containers/glass/bucket,/obj/item/mop,/obj/item/assembly/prox_sensor,/obj/item/storage/bag/trash{pixel_x = 6},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aV" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/airalarm/all_access{dir = 1; pixel_y = -24},/obj/machinery/light/small/built,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aW" = (/obj/machinery/meter,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/door/airlock/engineering{name = "Engineering"},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aY" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "1-2"},/turf/open/floor/plasteel/white/side{dir = 10},/area/shuttle/abandoned/medbay)
"aZ" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/computer/operating{dir = 1},/obj/effect/turf_decal/bot,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"ba" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/table/optable,/obj/effect/turf_decal/delivery,/obj/effect/decal/cleanable/blood/gibs/old,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bb" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/table,/obj/item/trash/plate{pixel_x = 6},/obj/item/kitchen/fork{pixel_x = 6; pixel_y = 3},/obj/item/reagent_containers/food/drinks/soda_cans/cola{pixel_x = -6; pixel_y = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"bc" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{icon_state = "1-2"},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"bd" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/crate/bin,/obj/item/trash/pistachios,/obj/machinery/airalarm/all_access{dir = 1; pixel_y = -24},/obj/item/trash/can,/obj/item/light/bulb/broken,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"be" = (/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/bridge)
"bf" = (/obj/effect/spawner/structure/window/shuttle,/obj/machinery/door/poddoor{id = "whiteship_bridge"},/turf/open/floor/plating,/area/shuttle/abandoned/bridge)
"bg" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/emcloset/anchored,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bh" = (/obj/machinery/light/small/built{dir = 1},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bi" = (/obj/structure/sign/warning/vacuum/external{pixel_y = -32},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bj" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bk" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 4},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bl" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bm" = (/obj/machinery/door/airlock/external,/obj/structure/fans/tiny,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bn" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bo" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 1},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bp" = (/obj/structure/cable{icon_state = "0-8"},/obj/machinery/power/terminal{dir = 4},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/airalarm/all_access{pixel_y = 24},/obj/machinery/light/small/built{dir = 1},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bq" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/tank/air{dir = 1},/obj/effect/turf_decal/bot,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"br" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/door/airlock/medical{name = "Surgery"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{icon_state = "1-2"},/turf/open/floor/plasteel/white,/area/shuttle/abandoned/medbay)
"bs" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/cryo_cell,/obj/effect/turf_decal/stripes/line{dir = 9},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bt" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/table/glass,/obj/item/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/reagent_containers/glass/beaker/cryoxadone{pixel_x = -6; pixel_y = 6},/obj/effect/turf_decal/stripes/line{dir = 1},/obj/machinery/airalarm/all_access{pixel_y = 24},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bu" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/cryo_cell,/obj/effect/turf_decal/stripes/line{dir = 5},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bv" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 6},/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/zombie{desc = "This undead fiend looks to be badly decomposed."; environment_smash = 0; health = 60; melee_damage_lower = 11; melee_damage_upper = 11; name = "Rotting Carcass"},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bw" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/door/airlock/medical{name = "Break Room"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{icon_state = "1-2"},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"bx" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/table,/obj/item/paper_bin{pixel_x = -4},/obj/item/folder/blue{pixel_x = 3; pixel_y = 2},/obj/item/folder/white,/obj/item/pen{pixel_x = 4},/obj/effect/turf_decal/tile/blue,/obj/effect/turf_decal/tile/blue{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"by" = (/obj/machinery/door/airlock/external,/obj/effect/mapping_helpers/airlock/cyclelink_helper{dir = 1},/obj/structure/fans/tiny,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bz" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{icon_state = "1-2"},/turf/open/floor/plasteel/white/side{dir = 1},/area/shuttle/abandoned/medbay)
"bA" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light/small/built{dir = 4},/obj/structure/closet/secure_closet/medical2{anchored = 1},/obj/machinery/airalarm/all_access{dir = 8; pixel_x = 24},/turf/open/floor/plasteel/white/side{dir = 5},/area/shuttle/abandoned/medbay)
"bB" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/sleeper,/obj/effect/turf_decal/delivery,/obj/machinery/light/small/built{dir = 8},/obj/machinery/firealarm{pixel_y = 24},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bC" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 5},/obj/effect/turf_decal/stripes/line{dir = 10},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bD" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/effect/turf_decal/stripes/line,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bE" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4},/obj/effect/turf_decal/stripes/line{dir = 6},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bF" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light/small/built{dir = 4},/obj/structure/cable{icon_state = "1-2"},/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plasteel/white/side{dir = 5},/area/shuttle/abandoned/medbay)
"bG" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/firecloset{anchored = 1},/obj/machinery/airalarm/all_access{dir = 4; pixel_x = -24},/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 4},/turf/open/floor/plasteel/white/corner{dir = 8},/area/shuttle/abandoned/medbay)
"bH" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "1-2"},/obj/effect/turf_decal/tile/blue,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bI" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/table/reinforced,/obj/item/wrench,/obj/item/crowbar,/obj/structure/cable{icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "Hospital Ship Medbay APC"; pixel_y = 24; req_access = null},/turf/open/floor/plasteel/white,/area/shuttle/abandoned/medbay)
"bJ" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/chair/comfy/shuttle{dir = 4},/obj/effect/decal/cleanable/blood/old,/obj/effect/turf_decal/tile/blue{dir = 4},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"bK" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/computer/crew{dir = 8},/obj/effect/turf_decal/tile/blue{dir = 1},/obj/effect/turf_decal/tile/blue{dir = 4},/obj/effect/turf_decal/tile/blue{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"bL" = (/obj/machinery/door/airlock/external,/obj/effect/mapping_helpers/airlock/cyclelink_helper,/obj/structure/fans/tiny,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/fans/tiny,/turf/open/floor/plating,/area/shuttle/abandoned/medbay)
"bM" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/computer/med_data{dir = 4},/turf/open/floor/plasteel/white,/area/shuttle/abandoned/medbay)
"bN" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/cable{icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bO" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plasteel/white/side{dir = 4},/area/shuttle/abandoned/medbay)
"bP" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/airlock/medical/glass{name = "Cryo Room"},/turf/open/floor/plasteel/white,/area/shuttle/abandoned/medbay)
"bQ" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bR" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bS" = (/obj/machinery/door/airlock/external,/obj/structure/fans/tiny,/obj/effect/mapping_helpers/airlock/cyclelink_helper{dir = 1},/obj/structure/fans/tiny,/turf/open/floor/plating,/area/shuttle/abandoned/medbay)
"bT" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold4w/general/visible,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bU" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/obj/structure/cable{icon_state = "1-4"},/turf/open/floor/plasteel/white/side{dir = 4},/area/shuttle/abandoned/medbay)
"bV" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/door/firedoor,/obj/structure/cable{icon_state = "4-8"},/obj/machinery/door/airlock/medical/glass{name = "Cryo Room"},/turf/open/floor/plasteel/white,/area/shuttle/abandoned/medbay)
"bW" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel/white/side{dir = 8},/area/shuttle/abandoned/medbay)
"bX" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/cable{icon_state = "1-2"},/obj/structure/cable{icon_state = "2-8"},/obj/structure/cable{icon_state = "2-4"},/obj/effect/turf_decal/tile/blue,/obj/effect/turf_decal/tile/blue{dir = 4},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"bY" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/door/airlock/command{name = "Bridge"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"bZ" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 8},/obj/structure/cable{icon_state = "1-8"},/obj/effect/decal/cleanable/blood/gibs/old,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"ca" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/chair/comfy/shuttle{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cb" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/computer/shuttle/white_ship{dir = 8},/obj/effect/turf_decal/tile/blue{dir = 1},/obj/effect/turf_decal/tile/blue{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cd" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/cable{icon_state = "1-2"},/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plasteel/white/side,/area/shuttle/abandoned/medbay)
"ce" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light/small/built{dir = 4},/obj/structure/closet/secure_closet/medical3{anchored = 1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 8},/turf/open/floor/plasteel/white/side{dir = 6},/area/shuttle/abandoned/medbay)
"cf" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/sleeper{dir = 1},/obj/effect/turf_decal/delivery,/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"cg" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/turf_decal/bot,/obj/machinery/iv_drip,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"ch" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1; name = "Connector Port (Air Supply)"},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plasteel/white/side,/area/shuttle/abandoned/medbay)
"ci" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1; name = "Connector Port (Air Supply)"},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plasteel/white/side,/area/shuttle/abandoned/medbay)
"cj" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/thermomachine/freezer{dir = 1},/obj/machinery/light/small/built{dir = 4},/turf/open/floor/plasteel/white/side{dir = 6},/area/shuttle/abandoned/medbay)
"ck" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/emcloset/anchored,/obj/machinery/firealarm{dir = 8; pixel_x = -26},/turf/open/floor/plasteel/white/corner{dir = 1},/area/shuttle/abandoned/medbay)
"cl" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light/small/built{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{icon_state = "1-2"},/obj/effect/turf_decal/tile/blue{dir = 4},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"cm" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/rack,/obj/item/storage/toolbox/emergency,/obj/item/wrench,/obj/machinery/light/small/built{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -26},/obj/machinery/button/door{id = "whiteship_windows"; name = "Windows Blast Door Control"; pixel_x = -5; pixel_y = -24},/obj/machinery/button/door{id = "whiteship_bridge"; name = "Bridge Blast Door Control"; pixel_x = 5; pixel_y = -24},/obj/effect/turf_decal/tile/blue{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cn" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/chair/comfy/shuttle{dir = 4},/obj/effect/turf_decal/tile/blue,/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"co" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{dir = 8; x_offset = -7; y_offset = -8},/obj/effect/turf_decal/tile/blue{dir = 1},/obj/effect/turf_decal/tile/blue,/obj/effect/turf_decal/tile/blue{dir = 8},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cp" = (/obj/machinery/light/small,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"cq" = (/obj/structure/sign/warning/vacuum/external{pixel_y = 32},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"cr" = (/obj/structure/cable{icon_state = "2-4"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"cs" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/cable{icon_state = "4-8"},/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/atmospherics/components/unary/vent_pump/on,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"ct" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/power/apc{name = "Hospital Ship Engineering APC"; pixel_y = -24; req_access = null},/obj/structure/cable{icon_state = "0-4"},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"cu" = (/obj/machinery/power/smes/engineering{charge = 1e+006},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/turf_decal/bot,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"cv" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/door/airlock/medical{name = "Recovery Room"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{icon_state = "1-2"},/turf/open/floor/plasteel/white,/area/shuttle/abandoned/medbay)
"cw" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/door/airlock/medical{name = "Medical Storage"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"cx" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/table,/obj/item/radio/off{pixel_x = 6; pixel_y = 14},/obj/item/gps{gpstag = "NTREC1"; pixel_x = -9; pixel_y = 4},/obj/item/megaphone{pixel_x = 3; pixel_y = -3},/obj/effect/turf_decal/tile/blue{dir = 1},/obj/effect/turf_decal/tile/blue{dir = 4},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cy" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/turf_decal/bot,/obj/item/wrench,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"cz" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/reagent_dispensers/fueltank,/obj/effect/turf_decal/bot,/obj/item/weldingtool/largetank,/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"cB" = (/obj/structure/cable{icon_state = "1-4"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "1-8"},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"cC" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/cable{icon_state = "4-8"},/obj/machinery/door/airlock/engineering{name = "Engineering"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"cD" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "1-8"},/obj/structure/cable{icon_state = "2-8"},/turf/open/floor/plasteel/white/side{dir = 9},/area/shuttle/abandoned/medbay)
"cE" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet{name = "patient's wardrobe"},/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/shoes/sneakers/white,/obj/item/clothing/shoes/sneakers/white,/obj/item/clothing/shoes/sneakers/white,/turf/open/floor/plasteel/white/side{dir = 1},/area/shuttle/abandoned/medbay)
"cF" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/bed/roller,/obj/machinery/iv_drip,/obj/machinery/light/small/built{dir = 1},/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plasteel/white/side{dir = 1},/area/shuttle/abandoned/medbay)
"cG" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/table,/obj/item/folder/white{pixel_x = 6; pixel_y = 8},/obj/item/paper{pixel_x = 3; pixel_y = 5},/obj/item/pen{pixel_x = 4},/obj/machinery/airalarm/all_access{pixel_y = 24},/obj/item/flashlight/pen{pixel_x = -6; pixel_y = -2},/turf/open/floor/plasteel/white/side{dir = 1},/area/shuttle/abandoned/medbay)
"cH" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/bed/roller,/obj/machinery/iv_drip,/turf/open/floor/plasteel/white/side{dir = 1},/area/shuttle/abandoned/medbay)
"cI" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/toilet{pixel_y = 16},/obj/structure/sink{dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/open/floor/plasteel/freezer,/area/shuttle/abandoned/medbay)
"cJ" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/shower{pixel_y = 15},/obj/item/soap,/obj/structure/curtain,/obj/machinery/light/small/built,/turf/open/floor/plasteel/freezer,/area/shuttle/abandoned/medbay)
"cK" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/table,/obj/item/storage/firstaid/brute{pixel_x = 3; pixel_y = 3},/obj/item/storage/firstaid/fire,/obj/item/storage/firstaid/toxin{pixel_x = -3; pixel_y = -3},/obj/machinery/door/window/eastleft{name = "First-Aid Supplies"},/turf/open/floor/plasteel/white,/area/shuttle/abandoned/medbay)
"cL" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/vending/medical{req_access = null},/obj/machinery/airalarm/all_access{pixel_y = 24},/turf/open/floor/plasteel/white,/area/shuttle/abandoned/medbay)
"cM" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/rack,/obj/item/storage/toolbox/mechanical{pixel_y = 4},/obj/item/flashlight{pixel_x = 3; pixel_y = 3},/obj/effect/turf_decal/bot,/obj/item/storage/box/lights/bulbs,/obj/item/stack/sheet/mineral/plasma{amount = 10},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"cN" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/cable{icon_state = "1-4"},/turf/open/floor/plasteel/white/side{dir = 10},/area/shuttle/abandoned/medbay)
"cO" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/cable{icon_state = "2-8"},/turf/open/floor/plasteel/white/corner{dir = 8},/area/shuttle/abandoned/medbay)
"cP" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/vent_pump/on,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"cQ" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"cR" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"cS" = (/obj/structure/sign/departments/restroom,/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/medbay)
"cT" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/door/airlock{name = "Restroom"},/turf/open/floor/plasteel/freezer,/area/shuttle/abandoned/medbay)
"cU" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/table,/obj/structure/window/reinforced,/obj/machinery/door/window/eastright{name = "First-Aid Supplies"},/obj/item/storage/box/beakers{pixel_x = 6; pixel_y = 8},/obj/item/storage/box/syringes{pixel_x = -6; pixel_y = 6},/obj/item/reagent_containers/glass/bottle/epinephrine{pixel_x = 7; pixel_y = -3},/obj/item/reagent_containers/glass/bottle/morphine{pixel_x = -2; pixel_y = -3},/obj/item/reagent_containers/syringe{pixel_x = 6; pixel_y = -3},/turf/open/floor/plasteel/white,/area/shuttle/abandoned/medbay)
"cV" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/cable{icon_state = "1-2"},/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"cW" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 8},/turf/open/floor/plasteel/white/side{dir = 4},/area/shuttle/abandoned/medbay)
"cX" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light/small/built{dir = 4},/obj/structure/table,/obj/machinery/door/window/westleft{name = "Medical Equipment Storage"},/obj/item/clothing/neck/stethoscope{pixel_y = 4},/obj/item/storage/belt/medical{pixel_x = -3; pixel_y = -3},/obj/item/reagent_containers/spray/cleaner{pixel_x = -3; pixel_y = 6},/obj/item/clothing/glasses/hud/health{pixel_x = 6; pixel_y = 3},/obj/item/clothing/glasses/hud/health{pixel_x = 3},/turf/open/floor/plasteel/white,/area/shuttle/abandoned/medbay)
"cY" = (/obj/structure/sign/departments/medbay/alt,/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/medbay)
"cZ" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/crate/freezer/blood,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/cable{icon_state = "1-4"},/turf/open/floor/plasteel/white/side{dir = 10},/area/shuttle/abandoned/medbay)
"da" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel/white/corner{dir = 8},/area/shuttle/abandoned/medbay)
"db" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/obj/effect/decal/cleanable/blood/gibs/old,/mob/living/simple_animal/hostile/zombie{desc = "This undead fiend looks to be badly decomposed."; environment_smash = 0; health = 60; melee_damage_lower = 11; melee_damage_upper = 11; name = "Rotting Carcass"; zombiejob = "Assistant"},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"dc" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"dd" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"de" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel/white/side{dir = 4},/area/shuttle/abandoned/medbay)
"df" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/door/airlock/medical{name = "Recovery Room"},/obj/effect/turf_decal/stripes/corner,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"dg" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/turf_decal/stripes/line,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/obj/structure/sign/warning/nosmoking{pixel_y = 30},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"dh" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/turf_decal/stripes/line,/obj/machinery/light/small,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"di" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/turf_decal/stripes/line,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/cable{icon_state = "1-8"},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"dj" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/l3closet{anchored = 1},/obj/effect/turf_decal/stripes/corner{dir = 1},/turf/open/floor/plasteel/white/side{dir = 4},/area/shuttle/abandoned/medbay)
"dk" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/bed/roller,/obj/machinery/iv_drip,/turf/open/floor/plasteel/white/side{dir = 10},/area/shuttle/abandoned/medbay)
"dl" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/table,/obj/machinery/light/small,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/item/folder/white{pixel_x = -5; pixel_y = 5},/obj/item/reagent_containers/glass/bottle/morphine{pixel_x = 8; pixel_y = 4},/obj/item/reagent_containers/syringe{pixel_x = 6; pixel_y = -1},/turf/open/floor/plasteel/white/side,/area/shuttle/abandoned/medbay)
"dm" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/plasteel/white/corner{dir = 8},/area/shuttle/abandoned/medbay)
"dn" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light/small/built{dir = 4},/turf/open/floor/plasteel/white/side{dir = 4},/area/shuttle/abandoned/medbay)
"dp" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/suit_storage_unit/cmo,/obj/effect/turf_decal/bot,/turf/open/floor/plasteel,/area/shuttle/abandoned/medbay)
"dq" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/table,/obj/item/folder/white,/obj/item/pen{pixel_x = -3; pixel_y = -3},/obj/item/reagent_containers/food/snacks/grown/harebell{pixel_x = 6; pixel_y = 3},/turf/open/floor/plasteel/white/side,/area/shuttle/abandoned/medbay)
"dr" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/bed/roller,/obj/machinery/iv_drip,/turf/open/floor/plasteel/white/side{dir = 6},/area/shuttle/abandoned/medbay)
"ds" = (/obj/structure/sign/warning/vacuum/external{pixel_x = 32},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light/small/built{dir = 4},/turf/open/floor/plating,/area/shuttle/abandoned/medbay)
"dv" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/rack,/obj/item/storage/box/zipties,/obj/item/assembly/flash/handheld,/obj/item/melee/classic_baton/telescopic,/obj/machinery/light/small/built{dir = 8},/obj/machinery/airalarm/all_access{dir = 4; pixel_x = -24},/obj/structure/cable{icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "Hospital Ship Bridge APC"; pixel_y = 24; req_access = null},/obj/effect/turf_decal/tile/blue{dir = 1},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"hV" = (/obj/structure/shuttle/engine/propulsion/right{dir = 8},/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/engine)
"vk" = (/obj/structure/shuttle/engine/propulsion/left{dir = 8},/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned/engine)
"JU" = (/obj/structure/shuttle/engine/propulsion/right{dir = 8},/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned/engine)
"Tw" = (/obj/structure/shuttle/engine/propulsion/left{dir = 8},/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/engine)
"au" = (/obj/structure/closet/crate/large,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/light/broken{dir = 4; pixel_x = 7},/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"av" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/effect/turf_decal/bot,/obj/effect/decal/cleanable/dirt,/obj/machinery/light{dir = 8; pixel_x = -7; pixel_y = 0},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aw" = (/obj/structure/cable{icon_state = "1-4"},/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/hs13mimic,/obj/structure/railing{dir = 4},/obj/structure/railing,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"ax" = (/obj/structure/cable{icon_state = "4-8"},/obj/structure/cable{icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/engine)
"ay" = (/obj/machinery/door/airlock/engineering{name = "Engineering"},/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/door/firedoor,/turf/open/floor/plasteel,/area/shuttle/abandoned/engine)
"az" = (/obj/structure/cable{icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 8},/obj/effect/turf_decal/tile/neutral,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew{name = "Abandoned Ship Cargo Bay"})
"aB" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/closet/crate,/obj/item/storage/firstaid/brute{pixel_x = 3; pixel_y = 3},/obj/item/storage/firstaid/fire,/obj/item/storage/firstaid/toxin{pixel_x = -3; pixel_y = -3},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/closet/crate/large,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aE" = (/obj/structure/cable{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/closet/crate/large,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aF" = (/obj/effect/turf_decal/box/white/corners{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aH" = (/obj/machinery/power/apc{dir = 1; name = "Kinaris Cargo Ship Bridge APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"},/obj/structure/table,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/broken{dir = 1; pixel_y = 16},/obj/machinery/button/door{id = "whiteship_bridge"; name = "Bridge Blast Door Control"; pixel_x = -6; pixel_y = 1},/obj/item/storage/fancy/donut_box{pixel_x = 11; pixel_y = 6},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"aI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table,/obj/item/paper_bin{pixel_x = 6; pixel_y = 6},/obj/item/pen{pixel_x = 6; pixel_y = 6},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"aJ" = (/obj/machinery/door/airlock/engineering{name = "Engineering"},/obj/structure/cable{icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/obj/machinery/door/firedoor,/turf/open/floor/plasteel,/area/shuttle/abandoned/engine)
"aK" = (/obj/structure/cable{icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/closet/crate,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 8},/obj/item/stack/sheet/rglass{amount = 20},/obj/item/stack/sheet/rglass{amount = 20},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aL" = (/obj/structure/cable{icon_state = "4-8"},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/arrows{dir = 1},/obj/item/shard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aM" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/machinery/airalarm/all_access{pixel_y = 24},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aP" = (/obj/structure/cable{icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_pump/on,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/open/floor/plasteel,/area/shuttle/abandoned/engine)
"aQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aS" = (/obj/structure/closet/crate,/obj/effect/turf_decal/box/white/corners{dir = 8},/obj/item/stack/sheet/mineral/titanium{amount = 20},/obj/item/stack/sheet/mineral/titanium{amount = 20},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 4},/mob/living/simple_animal/hostile/hs13mimic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"aU" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 4},/obj/machinery/light/broken{dir = 8; pixel_x = -7},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aW" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/obj/structure/railing{dir = 4},/obj/structure/railing{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"aY" = (/obj/structure/cable{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/engine)
"aZ" = (/obj/machinery/door/airlock/engineering{name = "Engineering"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/turf/open/floor/plasteel,/area/shuttle/abandoned/engine)
"ba" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 8},/obj/item/trash/semki,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bc" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"be" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/closet/crate,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/storage/box/lights/bulbs,/obj/item/storage/box/lights/tubes,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bf" = (/obj/machinery/door/airlock{name = "Restroom"},/obj/effect/decal/cleanable/dirt,/obj/machinery/door/firedoor,/turf/open/floor/plasteel/freezer,/area/shuttle/abandoned/bridge)
"bg" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/effect/turf_decal/bot,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bh" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1; name = "Connector Port (Air Supply)"},/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bi" = (/obj/item/storage/toolbox/emergency,/obj/item/wrench,/obj/structure/rack,/obj/effect/decal/cleanable/dirt,/obj/structure/railing{dir = 4},/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bj" = (/obj/structure/cable{icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/open/floor/plasteel,/area/shuttle/abandoned/engine)
"bk" = (/obj/structure/sign/warning/docking,/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned/engine)
"bl" = (/obj/machinery/door/poddoor{id = "whiteship_cargoleft"},/obj/structure/fans/tiny,/obj/effect/turf_decal/delivery,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bo" = (/obj/structure/fans/tiny,/obj/effect/turf_decal/delivery,/obj/machinery/door/poddoor{id = "whiteship_cargoleft"},/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bq" = (/obj/structure/sign/warning/docking,/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned/crew)
"br" = (/obj/machinery/door/airlock/external,/obj/structure/fans/tiny,/obj/effect/mapping_helpers/airlock/cyclelink_helper,/obj/docking_port/mobile{callTime = 250; dheight = 0; dir = 2; dwidth = 11; height = 17; id = "whiteship"; launch_status = 0; movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); name = "Hospital Ship"; port_direction = 8; preferred_direction = 4; width = 34},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/bridge)
"bs" = (/obj/machinery/power/apc{name = "Kinaris Cargo Ship Engineering APC"; pixel_y = -24},/obj/structure/cable,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/engine)
"bt" = (/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/machinery/light{dir = 8; pixel_x = -7; pixel_y = 0},/obj/structure/closet/crate/freezer/blood,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bu" = (/obj/effect/turf_decal/box/white/corners{dir = 1},/obj/item/stack/cable_coil/yellow,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bv" = (/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bw" = (/obj/effect/turf_decal/box/white/corners,/obj/item/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bx" = (/obj/structure/closet/crate/large,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/broken{dir = 4; pixel_x = 7},/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"by" = (/obj/structure/cable{icon_state = "1-8"},/obj/structure/cable{icon_state = "1-2"},/obj/item/stack/cable_coil/yellow,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"bz" = (/obj/machinery/atmospherics/components/unary/vent_pump/on,/obj/machinery/airalarm/all_access{dir = 8; pixel_x = 24},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/bridge)
"bA" = (/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned/bridge)
"bB" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/window/reinforced,/obj/machinery/shower{pixel_y = 16},/obj/structure/curtain,/obj/structure/medkit_cabinet{pixel_x = -27},/turf/open/floor/plasteel/freezer,/area/shuttle/abandoned/bridge)
"bC" = (/obj/structure/closet/emcloset/anchored,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/sign/warning/vacuum/external{pixel_x = -32},/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bD" = (/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/arrows{dir = 1},/mob/living/simple_animal/hostile/hs13mimic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bE" = (/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/closet/crate,/obj/item/stack/sheet/plasteel/twenty,/obj/item/stack/sheet/plasteel/twenty,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bF" = (/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/arrows{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bG" = (/obj/machinery/button/door{id = "whiteship_cargoright"; name = "Right Cargo Blast Door Control"; pixel_x = 24},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 4},/obj/item/trash/can,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bH" = (/obj/structure/fans/tiny,/obj/effect/turf_decal/delivery,/obj/machinery/door/poddoor{id = "whiteship_cargoright"},/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"bM" = (/obj/effect/turf_decal/bot,/obj/machinery/suit_storage_unit/standard_unit,/obj/effect/decal/cleanable/dirt,/obj/machinery/light{dir = 8; pixel_x = -7; pixel_y = 0},/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/bridge)
"bN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/bridge)
"bO" = (/obj/effect/spawner/structure/window/shuttle,/obj/machinery/door/poddoor{dir = 8; id = "whiteship_bridge"},/turf/open/floor/plating,/area/shuttle/abandoned/bridge)
"cd" = (/obj/machinery/door/airlock/external,/obj/effect/mapping_helpers/airlock/cyclelink_helper{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/decal/cleanable/dirt,/obj/machinery/door/firedoor,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/bridge)
"cp" = (/obj/structure/cable{icon_state = "1-8"},/obj/item/wrench,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/shuttle/abandoned/engine)
"cq" = (/turf/open/floor/plasteel/stairs{dir = 8},/area/shuttle/abandoned/engine)
"cr" = (/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"cs" = (/obj/effect/turf_decal/box/white/corners,/obj/item/trash/chips,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"ct" = (/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"cu" = (/obj/machinery/power/apc{dir = 1; name = "Kinaris Cargo Ship Cargo Bay APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"},/obj/machinery/airalarm/all_access{dir = 8; pixel_x = 24},/obj/structure/closet/crate/trashcart,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"cv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cy" = (/obj/structure/cable{icon_state = "4-8"},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/mob/living/simple_animal/hostile/hs13mimic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"cz" = (/obj/structure/cable{icon_state = "4-8"},/obj/structure/closet/crate,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/arrows{dir = 1},/obj/item/storage/bag/trash{pixel_x = 6},/obj/item/mop,/obj/item/reagent_containers/glass/bucket,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/shuttle/abandoned/crew)
"cB" = (/obj/structure/cable{icon_state = "4-8"},/obj/structure/cable{icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"cC" = (/obj/machinery/door/airlock/command{name = "Bridge"},/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/door/firedoor,/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cD" = (/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cE" = (/obj/structure/chair/comfy/shuttle{dir = 4},/obj/structure/cable{icon_state = "1-8"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cF" = (/obj/machinery/computer/shuttle/white_ship{dir = 8},/obj/item/folder/yellow{pixel_x = -6},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cM" = (/obj/structure/table,/obj/item/crowbar/large,/obj/effect/decal/cleanable/dirt,/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/open/floor/plasteel,/area/shuttle/abandoned/crew)
"cN" = (/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 1},/obj/machinery/airalarm/all_access{dir = 4; pixel_x = -24},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cO" = (/obj/structure/rack,/obj/item/tank/internals/oxygen,/obj/item/clothing/mask/gas,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light{pixel_y = -1},/obj/item/megaphone{pixel_x = 3; pixel_y = -3},/obj/structure/sign/nanotrasen{pixel_y = -32},/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cP" = (/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{dir = 8; x_offset = -7; y_offset = -8},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/shuttle/abandoned/bridge)
"cQ" = (/obj/machinery/door/poddoor{dir = 8; id = "whiteship_bridge"},/obj/effect/spawner/structure/window/shuttle,/turf/open/floor/plating,/area/shuttle/abandoned/bridge)
"cZ" = (/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned/bridge)
"da" = (/obj/effect/spawner/structure/window/shuttle,/obj/machinery/door/poddoor{id = "whiteship_bridge"},/turf/open/floor/plating,/area/shuttle/abandoned/bridge)
"db" = (/obj/machinery/door/poddoor{id = "whiteship_bridge"},/obj/effect/spawner/structure/window/shuttle,/turf/open/floor/plating,/area/shuttle/abandoned/bridge)
"qW" = (/obj/structure/toilet{dir = 4},/obj/machinery/light{dir = 8; pixel_x = -7; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/freezer,/area/shuttle/abandoned/bridge)
"uY" = (/obj/structure/sign/warning/docking,/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned/bridge)
"Tw" = (/obj/structure/shuttle/engine/propulsion{dir = 8},/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned/engine)
"ZL" = (/obj/machinery/firealarm{dir = 4; pixel_x = 28},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/freezer,/area/shuttle/abandoned/bridge)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacadaeabaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahacaiacaiacajacakabaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaagalamacanacaoacafacaqacabaaaaaa
aaaaaaaaaaaaaaaaaaaaaaarasatalauavawaxayazaAaBaCaDaEacabaaaa
aaaaaaaaaaaaaaaaarasatataFaGaHaIaJacaKaLaMacaNaOapaQaRadaaaa
aaaSatatatatatatataTaUblaWaXaYaZbaalalalalalalbbbcbdbebebfaa
vkasbgbhbibjbkblbmbnboaVbqatbralalalbsbtbubIalacbwbebebxbfbf
hVasataPatatatatatatatatatatbzbAalbBbCbDbEbFalbGbHbedvbJbKbf
aaaaaaaaaaaaaaaaaaaaaaaaahbMbNbObPbQbRbvbTbUbVbWbXbYbZcacbbf
Twasatbyatatatatatatatatatatcdcealcfcgchcicjalckclbecmcncobf
JUasbgcpcqbjbkblbmcrcsbpcuatcvalalalalalalalalalcwbebecxbfbf
aaaSatatatatatatatcyczctcBcCcDcEcFcGcHalcIcJalcKbzcLbebebfaa
aaaaaaaaaaaaaaaaarasatatcMaGcNcOcPcQcRcScTalalcUcVcWcXcYaaaa
aaaaaaaaaaaaaaaaaaaaaaarasatalcZdadbdcdddedfdgdhdidjalagaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaagaldkdldmcRdnalbLaldpalagaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahaldkdqdraldsalahagaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagalalalcYbSagaaaaaaaaaaaa
aaaaaaaaaaaabkblbobobobobqcZbrcZaaaa
aaTwasatatatatabacadaeafahaibzbAaaaa
aaTwasajakamatanaoapaqauahbMbNbOaaaa
TwasavbyawaxayazaAaBaCaDahbAcdcZdadb
TwasbgcpcqbjataEaFcrcsbpcubAcvaHaIcQ
aaatatatataJataKaLcyczctcBcCcDcEcFcQ
TwasaMaNcqaPataQaraRaSaTcMbAcNcOcPcQ
TwasaUaWaXaYaZbabbbcbdbeahbAbfcZdadb
aaTwasbhbibsatbtbubvbwbxahbBagbAaaaa
aaTwasatatatatbCbDbEbFbGahqWZLbAaaaa
aaaaaaaaaaaabkbHbHbHbHbHuYbAbAcZaaaa
"}
+21 -21
View File
@@ -1,10 +1,10 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/effect/turf_decal/stripes/red/corner{
dir = 4
dir = 8
},
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"b" = (
/obj/effect/turf_decal/stripes/red/line{
dir = 4
@@ -15,44 +15,44 @@
pixel_y = 10
},
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"c" = (
/obj/effect/turf_decal/stripes/red/line{
dir = 4
},
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"d" = (
/obj/structure/cable/yellow,
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/cargo,
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"e" = (
/obj/effect/turf_decal/stripes/red/corner{
dir = 1
dir = 4
},
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"f" = (
/obj/machinery/atmospherics/pipe/simple/cyan{
dir = 4
},
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"g" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/purple,
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"h" = (
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"s" = (
/obj/effect/turf_decal/stripes/red/corner,
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"t" = (
/obj/effect/turf_decal/stripes/red/line{
dir = 8
@@ -63,54 +63,54 @@
pixel_y = 10
},
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"B" = (
/obj/effect/turf_decal/stripes/red/corner{
dir = 8
dir = 1
},
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"G" = (
/obj/machinery/atmospherics/pipe/simple/cyan{
dir = 4
},
/turf/open/floor/plating,
/area/space)
/area/engine/engineering/reactor_core)
"M" = (
/obj/effect/turf_decal/stripes/red/line,
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"O" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers{
dir = 4
},
/turf/open/floor/plating,
/area/space)
/area/engine/engineering/reactor_core)
"P" = (
/obj/effect/turf_decal/stripes/red/line{
dir = 8
},
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"V" = (
/obj/effect/turf_decal/stripes/red/line{
dir = 1
},
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
"Y" = (
/obj/structure/cable/yellow{
icon_state = "0-2"
},
/obj/machinery/atmospherics/pipe/simple/purple,
/turf/open/floor/plating,
/area/space)
/area/engine/engineering/reactor_core)
"Z" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers{
dir = 4
},
/turf/open/floor/engine,
/area/space)
/area/engine/engineering/reactor_core)
(1,1,1) = {"
s
+2
View File
@@ -157,6 +157,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define isclown(A) (istype(A, /mob/living/simple_animal/hostile/retaliate/clown))
#define ismimic(A) (istype(A, /mob/living/simple_animal/hostile/hs13mimic))
GLOBAL_LIST_INIT(shoefootmob, typecacheof(list(
/mob/living/carbon/human/,
/mob/living/simple_animal/cow,
+1 -1
View File
@@ -252,7 +252,7 @@
#define OFFSET_NECK "neck"
//MINOR TWEAKS/MISC
#define AGE_MIN 18 //youngest a character can be //CITADEL EDIT - 17 --> 18
#define AGE_MIN 21 //youngest a character can be //Hyper edit - 21
#define AGE_MAX 85 //oldest a character can be
#define WIZARD_AGE_MIN 30 //youngest a wizard can be
#define APPRENTICE_AGE_MIN 29 //youngest an apprentice can be
+39 -6
View File
@@ -1,11 +1,44 @@
#define NANITE_TIMER_DEACTIVATE 1
#define NANITE_TIMER_SELFDELETE 2
#define NANITE_TIMER_TRIGGER 3
#define NANITE_TIMER_RESET 4
#define NANITE_SYNC_DELAY 300
#define NANITE_SHOCK_IMMUNE 1
#define NANITE_EMP_IMMUNE 2
#define NANITE_PROGRAM_LIMIT 20
#define NANITE_PROGRAM_LIMIT 20
#define NANITE_BASE_RESEARCH 3.5
#define NANITE_CLOUD_TOGGLE 1
#define NANITE_CLOUD_DISABLE 2
#define NANITE_CLOUD_ENABLE 3
///Nanite extra settings types: used to help uis know what type an extra setting is
#define NESTYPE_TEXT "text"
#define NESTYPE_NUMBER "number"
#define NESTYPE_TYPE "type"
#define NESTYPE_BOOLEAN "boolean"
///Nanite Extra Settings - Note that these will also be the names displayed in the UI
#define NES_SENT_CODE "Sent Code"
#define NES_DELAY "Delay"
#define NES_MODE "Mode"
#define NES_COMM_CODE "Comm Code"
#define NES_RELAY_CHANNEL "Relay Channel"
#define NES_HEALTH_PERCENT "Health Percent"
#define NES_DIRECTION "Direction"
#define NES_NANITE_PERCENT "Nanite Percent"
#define NES_DAMAGE_TYPE "Damage Type"
#define NES_DAMAGE "Damage"
#define NES_SENTENCE "Sentence"
#define NES_MESSAGE "Message"
#define NES_DIRECTIVE "Directive"
#define NES_INCLUSIVE_MODE "Inclusive Mode"
#define NES_HALLUCINATION_TYPE "Hallucination Type"
#define NES_HALLUCINATION_DETAIL "Hallucination Detail"
#define NES_MOOD_MESSAGE "Mood Message"
#define NES_PROGRAM_OVERWRITE "Program Overwrite"
#define NES_CLOUD_OVERWRITE "Cloud Overwrite"
#define NES_SCAN_TYPE "Scan Type"
#define NES_BUTTON_NAME "Button Name"
#define NES_ICON "Icon"
#define NES_COLOR "Color"
+1
View File
@@ -55,6 +55,7 @@
} while (0)
#define HAS_TRAIT(target, trait) (target.status_traits ? (target.status_traits[trait] ? TRUE : FALSE) : FALSE)
#define HAS_TRAIT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (source in target.status_traits[trait]) : FALSE) : FALSE)
#define HAS_TRAIT_NOT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (length(target.status_traits[trait] - source) > 0) : FALSE) : FALSE)
//mob traits
#define TRAIT_BLIND "blind"
+3
View File
@@ -65,6 +65,9 @@
if (CONFIG_GET(flag/log_virus))
WRITE_LOG(GLOB.world_virus_log, "VIRUS: [text]")
/proc/log_asset(text)
WRITE_LOG(GLOB.world_asset_log, "ASSET: [text]")
/proc/log_access(text)
if (CONFIG_GET(flag/log_access))
WRITE_LOG(GLOB.world_game_log, "ACCESS: [text]")
+3
View File
@@ -23,6 +23,9 @@ GLOBAL_VAR_INIT(cmp_field, "name")
/proc/cmp_records_dsc(datum/data/record/a, datum/data/record/b)
return sorttext(a.fields[GLOB.cmp_field], b.fields[GLOB.cmp_field])
/proc/cmp_filter_data_priority(list/A, list/B)
return A["priority"] - B["priority"]
/proc/cmp_ckey_asc(client/a, client/b)
return sorttext(b.ckey, a.ckey)
+6 -4
View File
@@ -1128,9 +1128,10 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0
if (!isicon(I))
if (isfile(thing)) //special snowflake
var/name = sanitize_filename("[generate_asset_name(thing)].png")
register_asset(name, thing)
if(!SSassets.cache[name])
register_asset(name, thing)
for (var/thing2 in targets)
send_asset(thing2, key, FALSE)
send_asset(thing2, key)
return "<img class='icon icon-misc' src=\"[url_encode(name)]\">"
var/atom/A = thing
if (isnull(dir))
@@ -1152,9 +1153,10 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0
I = icon(I, icon_state, dir, frame, moving)
key = "[generate_asset_name(I)].png"
register_asset(key, I)
if(!SSassets.cache[key])
register_asset(key, I)
for (var/thing2 in targets)
send_asset(thing2, key, FALSE)
send_asset(thing2, key)
return "<img class='icon icon-[icon_state]' src=\"[url_encode(key)]\">"
+5
View File
@@ -333,6 +333,11 @@ GLOBAL_LIST_EMPTY(species_list)
return 0
var/user_loc = user.loc
//Mood modifier
if(user.actionmoodmultiplier) //if the user has a action modifier
time = time * user.actionmoodmultiplier //apply the modifier to the time
time = clamp(time, 0.1, 9999) //make sure its within range.
var/drifting = 0
if(!user.Process_Spacemove(0) && user.inertia_dir)
drifting = 1
+2
View File
@@ -28,6 +28,8 @@ GLOBAL_VAR(world_job_debug_log)
GLOBAL_PROTECT(world_job_debug_log)
GLOBAL_VAR(world_virus_log)
GLOBAL_PROTECT(world_virus_log)
GLOBAL_VAR(world_asset_log)
GLOBAL_PROTECT(world_asset_log)
GLOBAL_VAR(world_map_error_log)
GLOBAL_PROTECT(world_map_error_log)
@@ -434,3 +434,5 @@
/datum/config_entry/flag/picture_logging_camera
/datum/config_entry/flag/minimaps_enabled
config_entry_value = TRUE
+1 -11
View File
@@ -6,17 +6,7 @@ SUBSYSTEM_DEF(assets)
var/list/preload = list()
/datum/controller/subsystem/assets/Initialize(timeofday)
var/list/priority_assets = list(
/datum/asset/simple/oui_theme_nano,
/datum/asset/simple/goonchat
)
for(var/type in priority_assets)
var/datum/asset/A = new type()
A.register()
for(var/type in typesof(/datum/asset) - (priority_assets | list(/datum/asset, /datum/asset/simple)))
for(var/type in typesof(/datum/asset))
var/datum/asset/A = type
if (type != initial(A._abstract))
get_asset_datum(type)
+3 -3
View File
@@ -66,13 +66,13 @@ SUBSYSTEM_DEF(jukeboxes)
/datum/controller/subsystem/jukeboxes/Initialize()
var/list/tracks = flist("config/jukebox_music/sounds/")
var/songID = 1
for(var/S in tracks)
for(var/S in tracks) // Tracks that will not be in the repo, aka, localhost tracks.
var/datum/track/T = new()
T.song_path = file("config/jukebox_music/sounds/[S]")
var/list/L = splittext(S,"+")
T.song_name = L[1]
T.song_length = text2num(L[2])
T.song_beat = text2num(L[3])
T.song_length = text2num(L[2])*10 //We multiply it by ten because the system requires it in deciseconds
T.song_beat = round(text2num(L[3])/6) //We divide it by six because it requires the Beats per seconds value, but in deciseconds. (Result/60) * 10)
T.song_associated_id = songID
songs |= T
songID++
+20
View File
@@ -0,0 +1,20 @@
SUBSYSTEM_DEF(minimaps)
name = "Minimaps"
flags = SS_NO_FIRE
var/list/station_minimaps = list()
var/datum/minimap_group/station_minimap = null
/datum/controller/subsystem/minimaps/Initialize()
if(!CONFIG_GET(flag/minimaps_enabled))
to_chat(world, "<span class='boldwarning'>Minimaps disabled! Skipping init.</span>")
return ..()
build_minimaps()
return ..()
/datum/controller/subsystem/minimaps/proc/build_minimaps()
for(var/z in SSmapping.levels_by_trait(ZTRAIT_STATION))
var/datum/space_level/SL = SSmapping.get_level(z)
var/name = (SL.name == initial(SL.name))? "[z] - Station" : "[z] - [SL.name]"
station_minimaps += new /datum/minimap(z, name = name)
station_minimap = new(station_minimaps, "Station")
@@ -6,6 +6,7 @@ PROCESSING_SUBSYSTEM_DEF(nanites)
var/list/datum/nanite_cloud_backup/cloud_backups = list()
var/list/mob/living/nanite_monitored_mobs = list()
var/list/datum/nanite_program/relay/nanite_relays = list()
var/neural_network_count = 0
/datum/controller/subsystem/processing/nanites/proc/check_hardware(datum/nanite_cloud_backup/backup)
if(QDELETED(backup.storage) || (backup.storage.stat & (NOPOWER|BROKEN)))
+5 -4
View File
@@ -1,6 +1,7 @@
#define DYNAMIC_DEFAULT_CHAOS 1.0 //The default chaos value for low pop low vote rounds
#define DYNAMIC_VOTE_NORMALIZATION 5 //If there are fewer than this many votes, the average will be skewed towards the default
#define DYNAMIC_NONVOTER_FACTOR 0.75 // 1 means they count for a full vote
#define DYNAMIC_VOTE_NORMALIZATION 8 //If there are fewer than this many votes, the average will be skewed towards the default
#define DYNAMIC_NONVOTER_FACTOR 0.6 // 1 means they count for a full vote
#define DYNAMIC_NONVOTER_VALUE 1.5 // The chaos value that non-voters should account for.
SUBSYSTEM_DEF(vote)
name = "Vote"
@@ -154,10 +155,10 @@ SUBSYSTEM_DEF(vote)
while (v < DYNAMIC_VOTE_NORMALIZATION) //For low low pop, low vote rounds.
numbers += DYNAMIC_DEFAULT_CHAOS //stops the one person voting from setting the chaos to five and flooding the station with anomalies
v += 1
else if (voted.len < GLOB.clients.len) //Have non-voters "vote" 2, if we're not lowpop
else if (voted.len < GLOB.clients.len) //Have non-voters "vote" if we're not lowpop
for(var/I in 1 to (GLOB.clients.len - voted.len))
v += DYNAMIC_NONVOTER_FACTOR //Instead of a fixed value, this will now factor how much non-voter votes are 'worth' in the system.
numbers += 2
numbers += DYNAMIC_NONVOTER_VALUE
v = round(v) //This rounds the value to the nearest multiple, to make sure no calculations go fucky wucky.
var/total = 0
for (var/i in numbers)
+12 -10
View File
@@ -43,8 +43,10 @@
var/datum/asset/spritesheet/sheet = name
stylesheets["spritesheet_[sheet.name].css"] = "data/spritesheets/[sheet.name]"
else
stylesheets["[ckey(name)].css"] = file
register_asset("[ckey(name)].css", file)
var/asset_name = "[name].css"
stylesheets[asset_name] = file
if(!SSassets.cache[asset_name])
register_asset(asset_name, file)
/datum/browser/proc/set_content(ncontent)
content = ncontent
@@ -91,20 +93,20 @@
[get_footer()]
"}
/datum/browser/proc/open(use_onclose = 1)
/datum/browser/proc/open(use_onclose = TRUE)
if(isnull(window_id)) //null check because this can potentially nuke goonchat
WARNING("Browser [title] tried to open with a null ID")
to_chat(user, "<span class='userdanger'>The [title] browser you tried to open failed a sanity check! Please report this on github!</span>")
return
var/window_size = ""
if (width && height)
if(width && height)
window_size = "size=[width]x[height];"
if (stylesheets.len)
send_asset_list(user, stylesheets, verify=FALSE)
if (scripts.len)
send_asset_list(user, scripts, verify=FALSE)
if(stylesheets.len)
send_asset_list(user, stylesheets)
if(scripts.len)
send_asset_list(user, scripts)
user << browse(get_content(), "window=[window_id];[window_size][window_options]")
if (use_onclose)
if(use_onclose)
setup_onclose()
/datum/browser/proc/setup_onclose()
@@ -151,7 +153,7 @@
close()
//designed as a drop in replacement for alert(); functions the same. (outside of needing User specified)
/proc/tgalert(var/mob/User, Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1, Timeout = 6000)
/proc/tgalert(mob/User, Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1, Timeout = 6000)
if (!User)
User = usr
switch(askuser(User, Message, Title, Button1, Button2, Button3, StealFocus, Timeout))
+6 -2
View File
@@ -6,6 +6,7 @@
var/static/list/falling_atoms = list() // Atoms currently falling into chasms
var/static/list/forbidden_types = typecacheof(list(
/mob/camera,
/obj/singularity,
/obj/docking_port,
/obj/structure/lattice,
@@ -115,8 +116,11 @@
L.notransform = TRUE
L.Stun(200)
L.resting = TRUE
if(prob(5))
playsound(AM, 'hyperstation/sound/misc/fallingthroughclouds.ogg', 100, 0)
if(L.client && check_rights_for(L.client, R_FUN))
playsound(AM, pick('hyperstation/sound/misc/yodadeath.ogg', 'hyperstation/sound/misc/fallingthroughclouds.ogg', 'hyperstation/sound/misc/goofy.ogg', 'hyperstation/sound/misc/wilhelm.ogg'), 100, 0)
else if(prob(5))
playsound(AM, pick('hyperstation/sound/misc/yodadeath.ogg', 'hyperstation/sound/misc/fallingthroughclouds.ogg', 'hyperstation/sound/misc/goofy.ogg', 'hyperstation/sound/misc/wilhelm.ogg'), 100, 0)
var/oldtransform = AM.transform
var/oldcolor = AM.color
-7
View File
@@ -127,10 +127,6 @@
for(var/datum/reagent/A in RC.reagents.reagent_list)
.["other"][A.type] += A.volume
.["other"][I.type] += 1
if(istype(I, /obj/item/reagent_containers/food/snacks/grown) && !.["color"]) //First we find has priority
var/obj/item/reagent_containers/food/snacks/grown/G = I
if(G.modified_colors)
.["color"] = G.color
/datum/component/personal_crafting/proc/check_tools(mob/user, datum/crafting_recipe/R, list/contents)
if(!R.tools.len)
@@ -166,9 +162,6 @@
/datum/component/personal_crafting/proc/construct_item(mob/user, datum/crafting_recipe/R)
var/list/contents = get_surroundings(user)
var/send_feedback = 1
var/cached_color = null //Do not remove this.
if(contents["color"]) //From plants
cached_color = contents["color"]
if(check_contents(R, contents))
if(check_tools(user, R, contents))
if(do_after(user, R.time, target = user))
+2 -2
View File
@@ -13,12 +13,12 @@
expire_time = world.time + expire_in
QDEL_IN(src, expire_in)
if(!ismovableatom(parent))
if(!ismovable(parent) && !isfloorturf(parent))
return COMPONENT_INCOMPATIBLE
RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, .proc/clean)
RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, .proc/try_infect_buckle)
RegisterSignal(parent, COMSIG_MOVABLE_BUMP, .proc/try_infect_collide)
RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/try_infect_crossed)
RegisterSignal(parent, COMSIG_ATOM_ENTERED, .proc/try_infect_crossed)
RegisterSignal(parent, COMSIG_MOVABLE_IMPACT_ZONE, .proc/try_infect_impact_zone)
if(isitem(parent))
RegisterSignal(parent, COMSIG_ITEM_ATTACK_ZONE, .proc/try_infect_attack_zone)
+1 -1
View File
@@ -4,7 +4,7 @@
/datum/component/lockon_aiming
dupe_mode = COMPONENT_DUPE_ALLOWED
var/lock_icon = 'icons/mob/blob.dmi'
var/lock_icon = 'icons/mob/cameramob.dmi'
var/lock_icon_state = "marker"
var/mutable_appearance/lock_appearance
var/list/image/lock_images
+6 -6
View File
@@ -186,27 +186,27 @@
switch(sanity)
if(SANITY_INSANE to SANITY_CRAZY)
setInsanityEffect(MAJOR_INSANITY_PEN)
master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=1) //Did we change something ? movetypes is runtiming, movetypes=(~FLYING))
master.actionmoodmultiplier = 1.6
sanity_level = 6
if(SANITY_CRAZY to SANITY_UNSTABLE)
setInsanityEffect(MINOR_INSANITY_PEN)
master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=0.5)//, movetypes=(~FLYING))
master.actionmoodmultiplier = 1.4
sanity_level = 5
if(SANITY_UNSTABLE to SANITY_DISTURBED)
setInsanityEffect(0)
master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=0.25)//, movetypes=(~FLYING))
master.actionmoodmultiplier = 1.2
sanity_level = 4
if(SANITY_DISTURBED to SANITY_NEUTRAL)
setInsanityEffect(0)
master.remove_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE)
master.actionmoodmultiplier = 1
sanity_level = 3
if(SANITY_NEUTRAL+1 to SANITY_GREAT+1) //shitty hack but +1 to prevent it from responding to super small differences
setInsanityEffect(0)
master.remove_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE)
master.actionmoodmultiplier = 1
sanity_level = 2
if(SANITY_GREAT+1 to INFINITY)
setInsanityEffect(0)
master.remove_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE)
master.actionmoodmultiplier = 1
sanity_level = 1
//update_mood_icon()
+110 -34
View File
@@ -7,11 +7,15 @@
var/regen_rate = 0.5 //nanites generated per second
var/safety_threshold = 25 //how low nanites will get before they stop processing/triggering
var/cloud_id = 0 //0 if not connected to the cloud, 1-100 to set a determined cloud backup to draw from
var/cloud_active = TRUE //if false, won't sync to the cloud
var/next_sync = 0
var/list/datum/nanite_program/programs = list()
var/max_programs = NANITE_PROGRAM_LIMIT
var/stealth = FALSE //if TRUE, does not appear on HUDs and health scans, and does not display the program list on nanite scans
var/list/datum/nanite_program/protocol/protocols = list() ///Separate list of protocol programs, to avoid looping through the whole programs list when cheking for conflicts
var/start_time = 0 ///Timestamp to when the nanites were first inserted in the host
var/stealth = FALSE //if TRUE, does not appear on HUDs and health scans
var/diagnostics = TRUE //if TRUE, displays program list when scanned by nanite scanners
/datum/component/nanites/Initialize(amount = 100, cloud = 0)
if(!isliving(parent) && !istype(parent, /datum/nanite_cloud_backup))
@@ -27,43 +31,52 @@
if((MOB_SILICON & host_mob.mob_biotypes)) //Shouldn't happen, but this avoids HUD runtimes in case a silicon gets them somehow.
return COMPONENT_INCOMPATIBLE
start_time = world.time
host_mob.hud_set_nanite_indicator()
START_PROCESSING(SSnanites, src)
if(cloud_id)
if(cloud_id && cloud_active)
cloud_sync()
/datum/component/nanites/RegisterWithParent()
RegisterSignal(parent, COMSIG_HAS_NANITES, .proc/confirm_nanites)
RegisterSignal(parent, COMSIG_NANITE_IS_STEALTHY, .proc/check_stealth)
RegisterSignal(parent, COMSIG_NANITE_DELETE, .proc/delete_nanites)
RegisterSignal(parent, COMSIG_NANITE_UI_DATA, .proc/nanite_ui_data)
RegisterSignal(parent, COMSIG_NANITE_GET_PROGRAMS, .proc/get_programs)
RegisterSignal(parent, COMSIG_NANITE_SET_VOLUME, .proc/set_volume)
RegisterSignal(parent, COMSIG_NANITE_ADJUST_VOLUME, .proc/adjust_nanites)
RegisterSignal(parent, COMSIG_NANITE_SET_MAX_VOLUME, .proc/set_max_volume)
RegisterSignal(parent, COMSIG_NANITE_SET_CLOUD, .proc/set_cloud)
RegisterSignal(parent, COMSIG_NANITE_SET_CLOUD_SYNC, .proc/set_cloud_sync)
RegisterSignal(parent, COMSIG_NANITE_SET_SAFETY, .proc/set_safety)
RegisterSignal(parent, COMSIG_NANITE_SET_REGEN, .proc/set_regen)
RegisterSignal(parent, COMSIG_NANITE_ADD_PROGRAM, .proc/add_program)
RegisterSignal(parent, COMSIG_NANITE_SCAN, .proc/nanite_scan)
RegisterSignal(parent, COMSIG_NANITE_SYNC, .proc/sync)
RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, .proc/on_emp)
if(isliving(parent))
RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, .proc/on_emp)
RegisterSignal(parent, COMSIG_MOB_DEATH, .proc/on_death)
RegisterSignal(parent, COMSIG_MOB_ALLOWED, .proc/check_access)
RegisterSignal(parent, COMSIG_LIVING_ELECTROCUTE_ACT, .proc/on_shock)
RegisterSignal(parent, COMSIG_LIVING_MINOR_SHOCK, .proc/on_minor_shock)
RegisterSignal(parent, COMSIG_SPECIES_GAIN, .proc/check_viable_biotype)
RegisterSignal(parent, COMSIG_NANITE_SIGNAL, .proc/receive_signal)
RegisterSignal(parent, COMSIG_NANITE_COMM_SIGNAL, .proc/receive_comm_signal)
/datum/component/nanites/UnregisterFromParent()
UnregisterSignal(parent, list(COMSIG_HAS_NANITES,
COMSIG_NANITE_IS_STEALTHY,
COMSIG_NANITE_DELETE,
COMSIG_NANITE_UI_DATA,
COMSIG_NANITE_GET_PROGRAMS,
COMSIG_NANITE_SET_VOLUME,
COMSIG_NANITE_ADJUST_VOLUME,
COMSIG_NANITE_SET_MAX_VOLUME,
COMSIG_NANITE_SET_CLOUD,
COMSIG_NANITE_SET_CLOUD_SYNC,
COMSIG_NANITE_SET_SAFETY,
COMSIG_NANITE_SET_REGEN,
COMSIG_NANITE_ADD_PROGRAM,
@@ -76,13 +89,14 @@
COMSIG_LIVING_MINOR_SHOCK,
COMSIG_MOVABLE_HEAR,
COMSIG_SPECIES_GAIN,
COMSIG_NANITE_SIGNAL))
COMSIG_NANITE_SIGNAL,
COMSIG_NANITE_COMM_SIGNAL))
/datum/component/nanites/Destroy()
STOP_PROCESSING(SSnanites, src)
set_nanite_bar(TRUE)
QDEL_LIST(programs)
if(host_mob)
set_nanite_bar(TRUE)
host_mob.hud_set_nanite_indicator()
host_mob = null
return ..()
@@ -95,13 +109,18 @@
/datum/component/nanites/process()
adjust_nanites(null, regen_rate)
add_research()
for(var/X in programs)
var/datum/nanite_program/NP = X
NP.on_process()
set_nanite_bar()
if(cloud_id && world.time > next_sync)
if(cloud_id && cloud_active && world.time > next_sync)
cloud_sync()
next_sync = world.time + NANITE_SYNC_DELAY
set_nanite_bar()
/datum/component/nanites/proc/delete_nanites()
qdel(src)
//Syncs the nanite component to another, making it so programs are the same with the same programming (except activation status)
/datum/component/nanites/proc/sync(datum/signal_source, datum/component/nanites/source, full_overwrite = TRUE, copy_activation = FALSE)
@@ -124,13 +143,17 @@
add_program(null, SNP.copy())
/datum/component/nanites/proc/cloud_sync()
if(!cloud_id)
return
var/datum/nanite_cloud_backup/backup = SSnanites.get_cloud_backup(cloud_id)
if(backup)
var/datum/component/nanites/cloud_copy = backup.nanites
if(cloud_copy)
sync(null, cloud_copy)
if(cloud_id)
var/datum/nanite_cloud_backup/backup = SSnanites.get_cloud_backup(cloud_id)
if(backup)
var/datum/component/nanites/cloud_copy = backup.nanites
if(cloud_copy)
sync(null, cloud_copy)
return
//Without cloud syncing nanites can accumulate errors and/or defects
if(prob(8) && programs.len)
var/datum/nanite_program/NP = pick(programs)
NP.software_error()
/datum/component/nanites/proc/add_program(datum/source, datum/nanite_program/new_program, datum/nanite_program/source_program)
for(var/X in programs)
@@ -168,23 +191,35 @@
holder.icon_state = "nanites[nanite_percent]"
/datum/component/nanites/proc/on_emp(datum/source, severity)
adjust_nanites(null, -(nanite_volume * 0.3 + 50)) //Lose 30% variable and 50 flat nanite volume.
nanite_volume *= (rand(60, 90) * 0.01) //Lose 10-40% of nanites
adjust_nanites(null, -(rand(5, 50))) //Lose 5-50 flat nanite volume
if(prob(40/severity))
cloud_id = 0
for(var/X in programs)
var/datum/nanite_program/NP = X
NP.on_emp(severity)
/datum/component/nanites/proc/on_shock(datum/source, shock_damage)
adjust_nanites(null, -(nanite_volume * (shock_damage * 0.005) + shock_damage)) //0.5% of shock damage (@ 50 damage it'd drain 25%) + shock damage flat volume
for(var/X in programs)
var/datum/nanite_program/NP = X
NP.on_shock(shock_damage)
/datum/component/nanites/proc/on_shock(datum/source, shock_damage, siemens_coeff = 1, flags = NONE)
if(shock_damage < 1)
return
if(!HAS_TRAIT_NOT_FROM(host_mob, TRAIT_SHOCKIMMUNE, "nanites"))//Another shock protection must protect nanites too, but nanites protect only host
nanite_volume *= (rand(45, 80) * 0.01) //Lose 20-55% of nanites
adjust_nanites(null, -(rand(5, 50))) //Lose 5-50 flat nanite volume
for(var/X in programs)
var/datum/nanite_program/NP = X
NP.on_shock(shock_damage)
/datum/component/nanites/proc/on_minor_shock(datum/source)
adjust_nanites(null, -25)
adjust_nanites(null, -(rand(5, 15))) //Lose 5-15 flat nanite volume
for(var/X in programs)
var/datum/nanite_program/NP = X
NP.on_minor_shock()
/datum/component/nanites/proc/check_stealth(datum/source)
return stealth
/datum/component/nanites/proc/on_death(datum/source, gibbed)
for(var/X in programs)
var/datum/nanite_program/NP = X
@@ -195,12 +230,18 @@
var/datum/nanite_program/NP = X
NP.receive_signal(code, source)
/datum/component/nanites/proc/receive_comm_signal(datum/source, comm_code, comm_message, comm_source = "an unidentified source")
for(var/X in programs)
if(istype(X, /datum/nanite_program/comm))
var/datum/nanite_program/comm/NP = X
NP.receive_comm_signal(comm_code, comm_message, comm_source)
/datum/component/nanites/proc/check_viable_biotype()
if((MOB_SILICON & host_mob.mob_biotypes))
qdel(src) //bodytype no longer sustains nanites
/datum/component/nanites/proc/check_access(datum/source, obj/O)
for(var/datum/nanite_program/triggered/access/access_program in programs)
for(var/datum/nanite_program/access/access_program in programs)
if(access_program.activated)
return O.check_access_list(access_program.access)
else
@@ -216,6 +257,15 @@
/datum/component/nanites/proc/set_cloud(datum/source, amount)
cloud_id = CLAMP(amount, 0, 100)
/datum/component/nanites/proc/set_cloud_sync(datum/source, method)
switch(method)
if(NANITE_CLOUD_TOGGLE)
cloud_active = !cloud_active
if(NANITE_CLOUD_DISABLE)
cloud_active = FALSE
if(NANITE_CLOUD_ENABLE)
cloud_active = TRUE
/datum/component/nanites/proc/set_safety(datum/source, amount)
safety_threshold = CLAMP(amount, 0, max_nanites)
@@ -236,6 +286,19 @@
/datum/component/nanites/proc/get_programs(datum/source, list/nanite_programs)
nanite_programs |= programs
/datum/component/nanites/proc/add_research()
var/research_value = NANITE_BASE_RESEARCH
if(!ishuman(host_mob))
if(!iscarbon(host_mob))
research_value *= 0.4
else
research_value *= 0.8
if(!host_mob.client)
research_value *= 0.5
if(host_mob.stat == DEAD)
research_value *= 0.75
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_NANITES = research_value))
/datum/component/nanites/proc/nanite_scan(datum/source, mob/user, full_scan)
if(!full_scan)
if(!stealth)
@@ -247,11 +310,12 @@
to_chat(user, "<span class='info'>================</span>")
to_chat(user, "<span class='info'>Saturation: [nanite_volume]/[max_nanites]</span>")
to_chat(user, "<span class='info'>Safety Threshold: [safety_threshold]</span>")
to_chat(user, "<span class='info'>Cloud ID: [cloud_id ? cloud_id : "Disabled"]</span>")
to_chat(user, "<span class='info'>Cloud ID: [cloud_id ? cloud_id : "None"]</span>")
to_chat(user, "<span class='info'>Cloud Sync: [cloud_active ? "Active" : "Disabled"]</span>")
to_chat(user, "<span class='info'>================</span>")
to_chat(user, "<span class='info'>Program List:</span>")
if(stealth)
to_chat(user, "<span class='alert'>%#$ENCRYPTED&^@</span>")
if(!diagnostics)
to_chat(user, "<span class='alert'>Diagnostics Disabled</span>")
else
for(var/X in programs)
var/datum/nanite_program/NP = X
@@ -264,6 +328,7 @@
data["regen_rate"] = regen_rate
data["safety_threshold"] = safety_threshold
data["cloud_id"] = cloud_id
data["cloud_active"] = cloud_active
var/list/mob_programs = list()
var/id = 1
for(var/X in programs)
@@ -281,24 +346,35 @@
mob_program["trigger_cooldown"] = P.trigger_cooldown / 10
if(scan_level >= 3)
mob_program["activation_delay"] = P.activation_delay
mob_program["timer"] = P.timer
mob_program["timer_type"] = P.get_timer_type_text()
var/list/extra_settings = list()
for(var/Y in P.extra_settings)
var/list/setting = list()
setting["name"] = Y
setting["value"] = P.get_extra_setting(Y)
extra_settings += list(setting)
mob_program["timer_restart"] = P.timer_restart / 10
mob_program["timer_shutdown"] = P.timer_shutdown / 10
mob_program["timer_trigger"] = P.timer_trigger / 10
mob_program["timer_trigger_delay"] = P.timer_trigger_delay / 10
var/list/extra_settings = P.get_extra_settings_frontend()
mob_program["extra_settings"] = extra_settings
if(LAZYLEN(extra_settings))
mob_program["has_extra_settings"] = TRUE
else
mob_program["has_extra_settings"] = FALSE
if(scan_level >= 4)
mob_program["activation_code"] = P.activation_code
mob_program["deactivation_code"] = P.deactivation_code
mob_program["kill_code"] = P.kill_code
mob_program["trigger_code"] = P.trigger_code
var/list/rules = list()
var/rule_id = 1
for(var/Z in P.rules)
var/datum/nanite_rule/nanite_rule = Z
var/list/rule = list()
rule["display"] = nanite_rule.display()
rule["program_id"] = id
rule["id"] = rule_id
rules += list(rule)
rule_id++
mob_program["rules"] = rules
if(LAZYLEN(rules))
mob_program["has_rules"] = TRUE
id++
mob_programs += list(mob_program)
data["mob_programs"] = mob_programs
+2 -2
View File
@@ -20,7 +20,7 @@
if(!(D.infectable_biotypes & mob_biotypes))
return FALSE
if(!(type in D.viable_mobtypes))
if(!D.viable_mobtypes[type])
return FALSE
return TRUE
@@ -144,4 +144,4 @@
return !is_mouth_covered()
/mob/living/carbon/CanSpreadAirborneDisease()
return !((head && (head.flags_cover & HEADCOVERSMOUTH) && (head.armor.getRating("bio") >= 25)) || (wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH) && (wear_mask.armor.getRating("bio") >= 25)))
return !((head && (head.flags_cover & HEADCOVERSMOUTH) && (head.armor.getRating("bio") >= 25)) || (wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH) && (wear_mask.armor.getRating("bio") >= 25)))
+5 -1
View File
@@ -18,7 +18,7 @@
var/stage_prob = 4
//Other
var/list/viable_mobtypes = list() //typepaths of viable mobs
var/list/viable_mobtypes = list() //typecache of viable mobs
var/mob/living/carbon/affected_mob = null
var/list/cures = list() //list of cures if the disease has the CURABLE flag, these are reagent ids
var/infectivity = 65
@@ -34,6 +34,10 @@
var/process_dead = FALSE //if this ticks while the host is dead
var/copy_type = null //if this is null, copies will use the type of the instance being copied
/datum/disease/New(make_typecache = TRUE)
if(make_typecache && length(viable_mobtypes))
viable_mobtypes = typecacheof(viable_mobtypes)
/datum/disease/Destroy()
. = ..()
if(affected_mob)
+493 -492
View File
@@ -1,492 +1,493 @@
/*
Advance Disease is a system for Virologist to Engineer their own disease with symptoms that have effects and properties
which add onto the overall disease.
If you need help with creating new symptoms or expanding the advance disease, ask for Giacom on #coderbus.
*/
/*
PROPERTIES
*/
/datum/disease/advance
name = "Unknown" // We will always let our Virologist name our disease.
desc = "An engineered disease which can contain a multitude of symptoms."
form = "Advance Disease" // Will let med-scanners know that this disease was engineered.
agent = "advance microbes"
max_stages = 5
spread_text = "Unknown"
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
// NEW VARS
var/list/properties = list()
var/list/symptoms = list() // The symptoms of the disease.
var/id = ""
var/processing = FALSE
var/mutable = TRUE //set to FALSE to prevent most in-game methods of altering the disease via virology
var/oldres //To prevent setting new cures unless resistance changes.
// The order goes from easy to cure to hard to cure. Keep in mind that sentient diseases pick two cures from tier 6 and up, ensure they wont react away in bodies.
var/static/list/advance_cures = list(
list( // level 1
/datum/reagent/copper, /datum/reagent/silver, /datum/reagent/iodine, /datum/reagent/iron, /datum/reagent/carbon
),
list( // level 2
/datum/reagent/potassium, /datum/reagent/consumable/ethanol, /datum/reagent/lithium,
/datum/reagent/silicon, /datum/reagent/bromine
),
list( // level 3
/datum/reagent/consumable/sodiumchloride, /datum/reagent/consumable/sugar, /datum/reagent/consumable/orangejuice,
/datum/reagent/consumable/tomatojuice, /datum/reagent/consumable/milk
),
list( //level 4
/datum/reagent/medicine/spaceacillin, /datum/reagent/medicine/salglu_solution,
/datum/reagent/medicine/epinephrine, /datum/reagent/medicine/charcoal
),
list( //level 5
/datum/reagent/oil, /datum/reagent/medicine/synaptizine, /datum/reagent/medicine/mannitol,
/datum/reagent/drug/space_drugs, /datum/reagent/cryptobiolin
),
list( // level 6
/datum/reagent/phenol, /datum/reagent/medicine/inacusiate, /datum/reagent/medicine/oculine, /datum/reagent/medicine/antihol
),
list( // level 7
/datum/reagent/medicine/leporazine, /datum/reagent/toxin/mindbreaker, /datum/reagent/medicine/corazone
),
list( // level 8
/datum/reagent/pax, /datum/reagent/drug/happiness, /datum/reagent/medicine/ephedrine
),
list( // level 9
/datum/reagent/toxin/lipolicide, /datum/reagent/medicine/sal_acid
),
list( // level 10
/datum/reagent/medicine/haloperidol, /datum/reagent/drug/aranesp, /datum/reagent/medicine/diphenhydramine
),
list( //level 11
/datum/reagent/medicine/modafinil, /datum/reagent/toxin/anacea
)
)
/*
OLD PROCS
*/
/datum/disease/advance/New()
Refresh()
/datum/disease/advance/Destroy()
if(processing)
for(var/datum/symptom/S in symptoms)
S.End(src)
return ..()
/datum/disease/advance/try_infect(var/mob/living/infectee, make_copy = TRUE)
//see if we are more transmittable than enough diseases to replace them
//diseases replaced in this way do not confer immunity
var/list/advance_diseases = list()
for(var/datum/disease/advance/P in infectee.diseases)
advance_diseases += P
var/replace_num = advance_diseases.len + 1 - DISEASE_LIMIT //amount of diseases that need to be removed to fit this one
if(replace_num > 0)
sortTim(advance_diseases, /proc/cmp_advdisease_resistance_asc)
for(var/i in 1 to replace_num)
var/datum/disease/advance/competition = advance_diseases[i]
if(totalTransmittable() > competition.totalResistance())
competition.cure(FALSE)
else
return FALSE //we are not strong enough to bully our way in
infect(infectee, make_copy)
return TRUE
// Randomly pick a symptom to activate.
/datum/disease/advance/stage_act()
..()
if(carrier)
return
if(symptoms && symptoms.len)
if(!processing)
processing = TRUE
for(var/datum/symptom/S in symptoms)
if(S.Start(src)) //this will return FALSE if the symptom is neutered
S.next_activation = world.time + rand(S.symptom_delay_min * 10, S.symptom_delay_max * 10)
S.on_stage_change(src)
for(var/datum/symptom/S in symptoms)
S.Activate(src)
// Tell symptoms stage changed
/datum/disease/advance/update_stage(new_stage)
..()
for(var/datum/symptom/S in symptoms)
S.on_stage_change(src)
// Compares type then ID.
/datum/disease/advance/IsSame(datum/disease/advance/D)
if(!(istype(D, /datum/disease/advance)))
return 0
if(GetDiseaseID() != D.GetDiseaseID())
return 0
return 1
// Returns the advance disease with a different reference memory.
/datum/disease/advance/Copy()
var/datum/disease/advance/A = ..()
QDEL_LIST(A.symptoms)
for(var/datum/symptom/S in symptoms)
A.symptoms += S.Copy()
A.properties = properties.Copy()
A.id = id
A.oldres = oldres
//this is a new disease starting over at stage 1, so processing is not copied
return A
//Describe this disease to an admin in detail (for logging)
/datum/disease/advance/admin_details()
var/list/name_symptoms = list()
for(var/datum/symptom/S in symptoms)
name_symptoms += S.name
return "[name] sym:[english_list(name_symptoms)] r:[totalResistance()] s:[totalStealth()] ss:[totalStageSpeed()] t:[totalTransmittable()]"
/*
NEW PROCS
*/
// Mix the symptoms of two diseases (the src and the argument)
/datum/disease/advance/proc/Mix(datum/disease/advance/D)
if(!(IsSame(D)))
var/list/possible_symptoms = shuffle(D.symptoms)
for(var/datum/symptom/S in possible_symptoms)
AddSymptom(S.Copy())
/datum/disease/advance/proc/HasSymptom(datum/symptom/S)
for(var/datum/symptom/symp in symptoms)
if(symp.type == S.type)
return 1
return 0
// Will generate new unique symptoms, use this if there are none. Returns a list of symptoms that were generated.
/datum/disease/advance/proc/GenerateSymptoms(level_min, level_max, amount_get = 0)
var/list/generated = list() // Symptoms we generated.
// Generate symptoms. By default, we only choose non-deadly symptoms.
var/list/possible_symptoms = list()
for(var/symp in SSdisease.list_symptoms)
var/datum/symptom/S = new symp
if(S.naturally_occuring && S.level >= level_min && S.level <= level_max)
if(!HasSymptom(S))
possible_symptoms += S
if(!possible_symptoms.len)
return generated
// Random chance to get more than one symptom
var/number_of = amount_get
if(!amount_get)
number_of = 1
while(prob(20))
number_of += 1
for(var/i = 1; number_of >= i && possible_symptoms.len; i++)
generated += pick_n_take(possible_symptoms)
return generated
/datum/disease/advance/proc/Refresh(new_name = FALSE)
GenerateProperties()
AssignProperties()
if(processing && symptoms && symptoms.len)
for(var/datum/symptom/S in symptoms)
S.Start(src)
S.on_stage_change(src)
id = null
var/the_id = GetDiseaseID()
if(!SSdisease.archive_diseases[the_id])
SSdisease.archive_diseases[the_id] = src // So we don't infinite loop
SSdisease.archive_diseases[the_id] = Copy()
if(new_name)
AssignName()
//Generate disease properties based on the effects. Returns an associated list.
/datum/disease/advance/proc/GenerateProperties()
properties = list("resistance" = 0, "stealth" = 0, "stage_rate" = 0, "transmittable" = 0, "severity" = 0)
for(var/datum/symptom/S in symptoms)
properties["resistance"] += S.resistance
properties["stealth"] += S.stealth
properties["stage_rate"] += S.stage_speed
properties["transmittable"] += S.transmittable
if(!S.neutered)
properties["severity"] = max(properties["severity"], S.severity) // severity is based on the highest severity non-neutered symptom
// Assign the properties that are in the list.
/datum/disease/advance/proc/AssignProperties()
if(properties && properties.len)
if(properties["stealth"] >= 2)
visibility_flags |= HIDDEN_SCANNER
else
visibility_flags &= ~HIDDEN_SCANNER
SetSpread(CLAMP(2 ** (properties["transmittable"] - symptoms.len), DISEASE_SPREAD_BLOOD, DISEASE_SPREAD_AIRBORNE))
permeability_mod = max(CEILING(0.4 * properties["transmittable"], 1), 1)
cure_chance = 15 - CLAMP(properties["resistance"], -5, 5) // can be between 10 and 20
stage_prob = max(properties["stage_rate"], 2)
SetSeverity(properties["severity"])
GenerateCure(properties)
else
CRASH("Our properties were empty or null!")
// Assign the spread type and give it the correct description.
/datum/disease/advance/proc/SetSpread(spread_id)
switch(spread_id)
if(DISEASE_SPREAD_NON_CONTAGIOUS)
spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
spread_text = "None"
if(DISEASE_SPREAD_SPECIAL)
spread_flags = DISEASE_SPREAD_SPECIAL
spread_text = "None"
if(DISEASE_SPREAD_BLOOD)
spread_flags = DISEASE_SPREAD_BLOOD
spread_text = "Blood"
if(DISEASE_SPREAD_CONTACT_FLUIDS)
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS
spread_text = "Fluids"
if(DISEASE_SPREAD_CONTACT_SKIN)
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_CONTACT_SKIN
spread_text = "On contact"
if(DISEASE_SPREAD_AIRBORNE)
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_AIRBORNE
spread_text = "Airborne"
/datum/disease/advance/proc/SetSeverity(level_sev)
switch(level_sev)
if(-INFINITY to 0)
severity = DISEASE_SEVERITY_POSITIVE
if(1)
severity = DISEASE_SEVERITY_NONTHREAT
if(2)
severity = DISEASE_SEVERITY_MINOR
if(3)
severity = DISEASE_SEVERITY_MEDIUM
if(4)
severity = DISEASE_SEVERITY_HARMFUL
if(5)
severity = DISEASE_SEVERITY_DANGEROUS
if(6 to INFINITY)
severity = DISEASE_SEVERITY_BIOHAZARD
else
severity = "Unknown"
// Will generate a random cure, the less resistance the symptoms have, the harder the cure.
/datum/disease/advance/proc/GenerateCure()
if(properties && properties.len)
var/res = CLAMP(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len)
if(res == oldres)
return
cures = list(pick(advance_cures[res]))
oldres = res
// Get the cure name from the cure_id
var/datum/reagent/D = GLOB.chemical_reagents_list[cures[1]]
cure_text = D.name
// Randomly generate a symptom, has a chance to lose or gain a symptom.
/datum/disease/advance/proc/Evolve(min_level, max_level, ignore_mutable = FALSE)
if(!mutable && !ignore_mutable)
return
var/s = safepick(GenerateSymptoms(min_level, max_level, 1))
if(s)
AddSymptom(s)
Refresh(TRUE)
return
// Randomly remove a symptom.
/datum/disease/advance/proc/Devolve(ignore_mutable = FALSE)
if(!mutable && !ignore_mutable)
return
if(symptoms.len > 1)
var/s = safepick(symptoms)
if(s)
RemoveSymptom(s)
Refresh(TRUE)
// Randomly neuter a symptom.
/datum/disease/advance/proc/Neuter(ignore_mutable = FALSE)
if(!mutable && !ignore_mutable)
return
if(symptoms.len)
var/s = safepick(symptoms)
if(s)
NeuterSymptom(s)
Refresh(TRUE)
// Name the disease.
/datum/disease/advance/proc/AssignName(name = "Unknown")
Refresh()
var/datum/disease/advance/A = SSdisease.archive_diseases[GetDiseaseID()]
A.name = name
for(var/datum/disease/advance/AD in SSdisease.active_diseases)
AD.Refresh()
// Return a unique ID of the disease.
/datum/disease/advance/GetDiseaseID()
if(!id)
var/list/L = list()
for(var/datum/symptom/S in symptoms)
if(S.neutered)
L += "[S.id]N"
else
L += S.id
L = sortList(L) // Sort the list so it doesn't matter which order the symptoms are in.
var/result = jointext(L, ":")
id = result
return id
// Add a symptom, if it is over the limit we take a random symptom away and add the new one.
/datum/disease/advance/proc/AddSymptom(datum/symptom/S)
if(HasSymptom(S))
return
if(!(symptoms.len < (VIRUS_SYMPTOM_LIMIT - 1) + rand(-1, 1)))
RemoveSymptom(pick(symptoms))
symptoms += S
S.OnAdd(src)
// Simply removes the symptom.
/datum/disease/advance/proc/RemoveSymptom(datum/symptom/S)
symptoms -= S
S.OnRemove(src)
// Neuter a symptom, so it will only affect stats
/datum/disease/advance/proc/NeuterSymptom(datum/symptom/S)
if(!S.neutered)
S.neutered = TRUE
S.name += " (neutered)"
S.OnRemove(src)
/*
Static Procs
*/
// Mix a list of advance diseases and return the mixed result.
/proc/Advance_Mix(var/list/D_list)
var/list/diseases = list()
for(var/datum/disease/advance/A in D_list)
diseases += A.Copy()
if(!diseases.len)
return null
if(diseases.len <= 1)
return pick(diseases) // Just return the only entry.
var/i = 0
// Mix our diseases until we are left with only one result.
while(i < 20 && diseases.len > 1)
i++
var/datum/disease/advance/D1 = pick(diseases)
diseases -= D1
var/datum/disease/advance/D2 = pick(diseases)
D2.Mix(D1)
// Should be only 1 entry left, but if not let's only return a single entry
var/datum/disease/advance/to_return = pick(diseases)
to_return.Refresh(1)
return to_return
/proc/SetViruses(datum/reagent/R, list/data)
if(data)
var/list/preserve = list()
if(istype(data) && data["viruses"])
for(var/datum/disease/A in data["viruses"])
preserve += A.Copy()
R.data = data.Copy()
if(preserve.len)
R.data["viruses"] = preserve
/proc/AdminCreateVirus(client/user)
if(!user)
return
var/i = VIRUS_SYMPTOM_LIMIT
var/datum/disease/advance/D = new()
D.symptoms = list()
var/list/symptoms = list()
symptoms += "Done"
symptoms += SSdisease.list_symptoms.Copy()
do
if(user)
var/symptom = input(user, "Choose a symptom to add ([i] remaining)", "Choose a Symptom") in symptoms
if(isnull(symptom))
return
else if(istext(symptom))
i = 0
else if(ispath(symptom))
var/datum/symptom/S = new symptom
if(!D.HasSymptom(S))
D.symptoms += S
i -= 1
while(i > 0)
if(D.symptoms.len > 0)
var/new_name = stripped_input(user, "Name your new disease.", "New Name")
if(!new_name)
return
D.AssignName(new_name)
D.Refresh()
for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list))
if(!is_station_level(H.z))
continue
if(!H.HasDisease(D))
H.ForceContractDisease(D)
break
var/list/name_symptoms = list()
for(var/datum/symptom/S in D.symptoms)
name_symptoms += S.name
message_admins("[key_name_admin(user)] has triggered a custom virus outbreak of [D.admin_details()]")
log_virus("[key_name(user)] has triggered a custom virus outbreak of [D.admin_details()]!")
/datum/disease/advance/proc/totalStageSpeed()
return properties["stage_rate"]
/datum/disease/advance/proc/totalStealth()
return properties["stealth"]
/datum/disease/advance/proc/totalResistance()
return properties["resistance"]
/datum/disease/advance/proc/totalTransmittable()
return properties["transmittable"]
/*
Advance Disease is a system for Virologist to Engineer their own disease with symptoms that have effects and properties
which add onto the overall disease.
If you need help with creating new symptoms or expanding the advance disease, ask for Giacom on #coderbus.
*/
/*
PROPERTIES
*/
/datum/disease/advance
name = "Unknown" // We will always let our Virologist name our disease.
desc = "An engineered disease which can contain a multitude of symptoms."
form = "Advance Disease" // Will let med-scanners know that this disease was engineered.
agent = "advance microbes"
max_stages = 5
spread_text = "Unknown"
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
// NEW VARS
var/list/properties = list()
var/list/symptoms = list() // The symptoms of the disease.
var/id = ""
var/processing = FALSE
var/mutable = TRUE //set to FALSE to prevent most in-game methods of altering the disease via virology
var/oldres //To prevent setting new cures unless resistance changes.
// The order goes from easy to cure to hard to cure. Keep in mind that sentient diseases pick two cures from tier 6 and up, ensure they wont react away in bodies.
var/static/list/advance_cures = list(
list( // level 1
/datum/reagent/copper, /datum/reagent/silver, /datum/reagent/iodine, /datum/reagent/iron, /datum/reagent/carbon
),
list( // level 2
/datum/reagent/potassium, /datum/reagent/consumable/ethanol, /datum/reagent/lithium,
/datum/reagent/silicon, /datum/reagent/bromine
),
list( // level 3
/datum/reagent/consumable/sodiumchloride, /datum/reagent/consumable/sugar, /datum/reagent/consumable/orangejuice,
/datum/reagent/consumable/tomatojuice, /datum/reagent/consumable/milk
),
list( //level 4
/datum/reagent/medicine/spaceacillin, /datum/reagent/medicine/salglu_solution,
/datum/reagent/medicine/epinephrine, /datum/reagent/medicine/charcoal
),
list( //level 5
/datum/reagent/oil, /datum/reagent/medicine/synaptizine, /datum/reagent/medicine/mannitol,
/datum/reagent/drug/space_drugs, /datum/reagent/cryptobiolin
),
list( // level 6
/datum/reagent/phenol, /datum/reagent/medicine/inacusiate, /datum/reagent/medicine/oculine, /datum/reagent/medicine/antihol
),
list( // level 7
/datum/reagent/medicine/leporazine, /datum/reagent/toxin/mindbreaker, /datum/reagent/medicine/corazone
),
list( // level 8
/datum/reagent/pax, /datum/reagent/drug/happiness, /datum/reagent/medicine/ephedrine
),
list( // level 9
/datum/reagent/toxin/lipolicide, /datum/reagent/medicine/sal_acid
),
list( // level 10
/datum/reagent/medicine/haloperidol, /datum/reagent/drug/aranesp, /datum/reagent/medicine/diphenhydramine
),
list( //level 11
/datum/reagent/medicine/modafinil, /datum/reagent/toxin/anacea
)
)
/*
OLD PROCS
*/
/datum/disease/advance/New(make_typecache = TRUE)
..()
Refresh()
/datum/disease/advance/Destroy()
if(processing)
for(var/datum/symptom/S in symptoms)
S.End(src)
return ..()
/datum/disease/advance/try_infect(var/mob/living/infectee, make_copy = TRUE)
//see if we are more transmittable than enough diseases to replace them
//diseases replaced in this way do not confer immunity
var/list/advance_diseases = list()
for(var/datum/disease/advance/P in infectee.diseases)
advance_diseases += P
var/replace_num = advance_diseases.len + 1 - DISEASE_LIMIT //amount of diseases that need to be removed to fit this one
if(replace_num > 0)
sortTim(advance_diseases, /proc/cmp_advdisease_resistance_asc)
for(var/i in 1 to replace_num)
var/datum/disease/advance/competition = advance_diseases[i]
if(totalTransmittable() > competition.totalResistance())
competition.cure(FALSE)
else
return FALSE //we are not strong enough to bully our way in
infect(infectee, make_copy)
return TRUE
// Randomly pick a symptom to activate.
/datum/disease/advance/stage_act()
..()
if(carrier)
return
if(symptoms && symptoms.len)
if(!processing)
processing = TRUE
for(var/datum/symptom/S in symptoms)
if(S.Start(src)) //this will return FALSE if the symptom is neutered
S.next_activation = world.time + rand(S.symptom_delay_min * 10, S.symptom_delay_max * 10)
S.on_stage_change(src)
for(var/datum/symptom/S in symptoms)
S.Activate(src)
// Tell symptoms stage changed
/datum/disease/advance/update_stage(new_stage)
..()
for(var/datum/symptom/S in symptoms)
S.on_stage_change(src)
// Compares type then ID.
/datum/disease/advance/IsSame(datum/disease/advance/D)
if(!(istype(D, /datum/disease/advance)))
return 0
if(GetDiseaseID() != D.GetDiseaseID())
return 0
return 1
// Returns the advance disease with a different reference memory.
/datum/disease/advance/Copy()
var/datum/disease/advance/A = ..()
QDEL_LIST(A.symptoms)
for(var/datum/symptom/S in symptoms)
A.symptoms += S.Copy()
A.properties = properties.Copy()
A.id = id
A.oldres = oldres
//this is a new disease starting over at stage 1, so processing is not copied
return A
//Describe this disease to an admin in detail (for logging)
/datum/disease/advance/admin_details()
var/list/name_symptoms = list()
for(var/datum/symptom/S in symptoms)
name_symptoms += S.name
return "[name] sym:[english_list(name_symptoms)] r:[totalResistance()] s:[totalStealth()] ss:[totalStageSpeed()] t:[totalTransmittable()]"
/*
NEW PROCS
*/
// Mix the symptoms of two diseases (the src and the argument)
/datum/disease/advance/proc/Mix(datum/disease/advance/D)
if(!(IsSame(D)))
var/list/possible_symptoms = shuffle(D.symptoms)
for(var/datum/symptom/S in possible_symptoms)
AddSymptom(S.Copy())
/datum/disease/advance/proc/HasSymptom(datum/symptom/S)
for(var/datum/symptom/symp in symptoms)
if(symp.type == S.type)
return 1
return 0
// Will generate new unique symptoms, use this if there are none. Returns a list of symptoms that were generated.
/datum/disease/advance/proc/GenerateSymptoms(level_min, level_max, amount_get = 0)
var/list/generated = list() // Symptoms we generated.
// Generate symptoms. By default, we only choose non-deadly symptoms.
var/list/possible_symptoms = list()
for(var/symp in SSdisease.list_symptoms)
var/datum/symptom/S = new symp
if(S.naturally_occuring && S.level >= level_min && S.level <= level_max)
if(!HasSymptom(S))
possible_symptoms += S
if(!possible_symptoms.len)
return generated
// Random chance to get more than one symptom
var/number_of = amount_get
if(!amount_get)
number_of = 1
while(prob(20))
number_of += 1
for(var/i = 1; number_of >= i && possible_symptoms.len; i++)
generated += pick_n_take(possible_symptoms)
return generated
/datum/disease/advance/proc/Refresh(new_name = FALSE)
GenerateProperties()
AssignProperties()
if(processing && symptoms && symptoms.len)
for(var/datum/symptom/S in symptoms)
S.Start(src)
S.on_stage_change(src)
id = null
var/the_id = GetDiseaseID()
if(!SSdisease.archive_diseases[the_id])
SSdisease.archive_diseases[the_id] = src // So we don't infinite loop
SSdisease.archive_diseases[the_id] = Copy()
if(new_name)
AssignName()
//Generate disease properties based on the effects. Returns an associated list.
/datum/disease/advance/proc/GenerateProperties()
properties = list("resistance" = 0, "stealth" = 0, "stage_rate" = 0, "transmittable" = 0, "severity" = 0)
for(var/datum/symptom/S in symptoms)
properties["resistance"] += S.resistance
properties["stealth"] += S.stealth
properties["stage_rate"] += S.stage_speed
properties["transmittable"] += S.transmittable
if(!S.neutered)
properties["severity"] = max(properties["severity"], S.severity) // severity is based on the highest severity non-neutered symptom
// Assign the properties that are in the list.
/datum/disease/advance/proc/AssignProperties()
if(properties && properties.len)
if(properties["stealth"] >= 2)
visibility_flags |= HIDDEN_SCANNER
else
visibility_flags &= ~HIDDEN_SCANNER
SetSpread(CLAMP(2 ** (properties["transmittable"] - symptoms.len), DISEASE_SPREAD_BLOOD, DISEASE_SPREAD_AIRBORNE))
permeability_mod = max(CEILING(0.4 * properties["transmittable"], 1), 1)
cure_chance = 15 - CLAMP(properties["resistance"], -5, 5) // can be between 10 and 20
stage_prob = max(properties["stage_rate"], 2)
SetSeverity(properties["severity"])
GenerateCure(properties)
else
CRASH("Our properties were empty or null!")
// Assign the spread type and give it the correct description.
/datum/disease/advance/proc/SetSpread(spread_id)
switch(spread_id)
if(DISEASE_SPREAD_NON_CONTAGIOUS)
spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
spread_text = "None"
if(DISEASE_SPREAD_SPECIAL)
spread_flags = DISEASE_SPREAD_SPECIAL
spread_text = "None"
if(DISEASE_SPREAD_BLOOD)
spread_flags = DISEASE_SPREAD_BLOOD
spread_text = "Blood"
if(DISEASE_SPREAD_CONTACT_FLUIDS)
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS
spread_text = "Fluids"
if(DISEASE_SPREAD_CONTACT_SKIN)
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_CONTACT_SKIN
spread_text = "On contact"
if(DISEASE_SPREAD_AIRBORNE)
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_AIRBORNE
spread_text = "Airborne"
/datum/disease/advance/proc/SetSeverity(level_sev)
switch(level_sev)
if(-INFINITY to 0)
severity = DISEASE_SEVERITY_POSITIVE
if(1)
severity = DISEASE_SEVERITY_NONTHREAT
if(2)
severity = DISEASE_SEVERITY_MINOR
if(3)
severity = DISEASE_SEVERITY_MEDIUM
if(4)
severity = DISEASE_SEVERITY_HARMFUL
if(5)
severity = DISEASE_SEVERITY_DANGEROUS
if(6 to INFINITY)
severity = DISEASE_SEVERITY_BIOHAZARD
else
severity = "Unknown"
// Will generate a random cure, the less resistance the symptoms have, the harder the cure.
/datum/disease/advance/proc/GenerateCure()
if(properties && properties.len)
var/res = CLAMP(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len)
if(res == oldres)
return
cures = list(pick(advance_cures[res]))
oldres = res
// Get the cure name from the cure_id
var/datum/reagent/D = GLOB.chemical_reagents_list[cures[1]]
cure_text = D.name
// Randomly generate a symptom, has a chance to lose or gain a symptom.
/datum/disease/advance/proc/Evolve(min_level, max_level, ignore_mutable = FALSE)
if(!mutable && !ignore_mutable)
return
var/s = safepick(GenerateSymptoms(min_level, max_level, 1))
if(s)
AddSymptom(s)
Refresh(TRUE)
return
// Randomly remove a symptom.
/datum/disease/advance/proc/Devolve(ignore_mutable = FALSE)
if(!mutable && !ignore_mutable)
return
if(symptoms.len > 1)
var/s = safepick(symptoms)
if(s)
RemoveSymptom(s)
Refresh(TRUE)
// Randomly neuter a symptom.
/datum/disease/advance/proc/Neuter(ignore_mutable = FALSE)
if(!mutable && !ignore_mutable)
return
if(symptoms.len)
var/s = safepick(symptoms)
if(s)
NeuterSymptom(s)
Refresh(TRUE)
// Name the disease.
/datum/disease/advance/proc/AssignName(name = "Unknown")
Refresh()
var/datum/disease/advance/A = SSdisease.archive_diseases[GetDiseaseID()]
A.name = name
for(var/datum/disease/advance/AD in SSdisease.active_diseases)
AD.Refresh()
// Return a unique ID of the disease.
/datum/disease/advance/GetDiseaseID()
if(!id)
var/list/L = list()
for(var/datum/symptom/S in symptoms)
if(S.neutered)
L += "[S.id]N"
else
L += S.id
L = sortList(L) // Sort the list so it doesn't matter which order the symptoms are in.
var/result = jointext(L, ":")
id = result
return id
// Add a symptom, if it is over the limit we take a random symptom away and add the new one.
/datum/disease/advance/proc/AddSymptom(datum/symptom/S)
if(HasSymptom(S))
return
if(!(symptoms.len < (VIRUS_SYMPTOM_LIMIT - 1) + rand(-1, 1)))
RemoveSymptom(pick(symptoms))
symptoms += S
S.OnAdd(src)
// Simply removes the symptom.
/datum/disease/advance/proc/RemoveSymptom(datum/symptom/S)
symptoms -= S
S.OnRemove(src)
// Neuter a symptom, so it will only affect stats
/datum/disease/advance/proc/NeuterSymptom(datum/symptom/S)
if(!S.neutered)
S.neutered = TRUE
S.name += " (neutered)"
S.OnRemove(src)
/*
Static Procs
*/
// Mix a list of advance diseases and return the mixed result.
/proc/Advance_Mix(var/list/D_list)
var/list/diseases = list()
for(var/datum/disease/advance/A in D_list)
diseases += A.Copy()
if(!diseases.len)
return null
if(diseases.len <= 1)
return pick(diseases) // Just return the only entry.
var/i = 0
// Mix our diseases until we are left with only one result.
while(i < 20 && diseases.len > 1)
i++
var/datum/disease/advance/D1 = pick(diseases)
diseases -= D1
var/datum/disease/advance/D2 = pick(diseases)
D2.Mix(D1)
// Should be only 1 entry left, but if not let's only return a single entry
var/datum/disease/advance/to_return = pick(diseases)
to_return.Refresh(1)
return to_return
/proc/SetViruses(datum/reagent/R, list/data)
if(data)
var/list/preserve = list()
if(istype(data) && data["viruses"])
for(var/datum/disease/A in data["viruses"])
preserve += A.Copy()
R.data = data.Copy()
if(preserve.len)
R.data["viruses"] = preserve
/proc/AdminCreateVirus(client/user)
if(!user)
return
var/i = VIRUS_SYMPTOM_LIMIT
var/datum/disease/advance/D = new()
D.symptoms = list()
var/list/symptoms = list()
symptoms += "Done"
symptoms += SSdisease.list_symptoms.Copy()
do
if(user)
var/symptom = input(user, "Choose a symptom to add ([i] remaining)", "Choose a Symptom") in symptoms
if(isnull(symptom))
return
else if(istext(symptom))
i = 0
else if(ispath(symptom))
var/datum/symptom/S = new symptom
if(!D.HasSymptom(S))
D.symptoms += S
i -= 1
while(i > 0)
if(D.symptoms.len > 0)
var/new_name = stripped_input(user, "Name your new disease.", "New Name")
if(!new_name)
return
D.AssignName(new_name)
D.Refresh()
for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list))
if(!is_station_level(H.z))
continue
if(!H.HasDisease(D))
H.ForceContractDisease(D)
break
var/list/name_symptoms = list()
for(var/datum/symptom/S in D.symptoms)
name_symptoms += S.name
message_admins("[key_name_admin(user)] has triggered a custom virus outbreak of [D.admin_details()]")
log_virus("[key_name(user)] has triggered a custom virus outbreak of [D.admin_details()]!")
/datum/disease/advance/proc/totalStageSpeed()
return properties["stage_rate"]
/datum/disease/advance/proc/totalStealth()
return properties["stealth"]
/datum/disease/advance/proc/totalResistance()
return properties["resistance"]
/datum/disease/advance/proc/totalTransmittable()
return properties["transmittable"]
+4 -4
View File
@@ -2,7 +2,7 @@
/datum/disease/advance/cold
copy_type = /datum/disease/advance
/datum/disease/advance/cold/New()
/datum/disease/advance/cold/New(make_typecache = TRUE)
name = "Cold"
symptoms = list(new/datum/symptom/sneeze)
..()
@@ -11,7 +11,7 @@
/datum/disease/advance/flu
copy_type = /datum/disease/advance
/datum/disease/advance/flu/New()
/datum/disease/advance/flu/New(make_typecache = TRUE)
name = "Flu"
symptoms = list(new/datum/symptom/cough)
..()
@@ -21,7 +21,7 @@
name = "Experimental Disease"
copy_type = /datum/disease/advance
/datum/disease/advance/random/New(max_symptoms, max_level = 8)
/datum/disease/advance/random/New(make_typecache = TRUE, max_symptoms, max_level = 8)
if(!max_symptoms)
max_symptoms = rand(1, VIRUS_SYMPTOM_LIMIT)
var/list/datum/symptom/possible_symptoms = list()
@@ -37,6 +37,6 @@
if(chosen_symptom)
var/datum/symptom/S = new chosen_symptom
symptoms += S
Refresh()
name = "Sample #[rand(1,10000)]"
..()
+6 -16
View File
@@ -17,7 +17,7 @@ BONUS
/datum/symptom/beard
name = "Facial Hypertrichosis"
desc = "The virus increases hair production significantly, causing rapid beard growth."
desc = "The virus increases hair production significantly, causing rapid beard growth. Or it would, but now it just gives people socks. Who knows."
stealth = 0
resistance = 3
stage_speed = 2
@@ -34,18 +34,8 @@ BONUS
if(ishuman(M))
var/mob/living/carbon/human/H = M
switch(A.stage)
if(1, 2)
to_chat(H, "<span class='warning'>Your chin itches.</span>")
if(H.facial_hair_style == "Shaved")
H.facial_hair_style = "Jensen Beard"
H.update_hair()
if(3, 4)
to_chat(H, "<span class='warning'>You feel tough.</span>")
if(!(H.facial_hair_style == "Dwarf Beard") && !(H.facial_hair_style == "Very Long Beard") && !(H.facial_hair_style == "Full Beard"))
H.facial_hair_style = "Full Beard"
H.update_hair()
else
to_chat(H, "<span class='warning'>You feel manly!</span>")
if(!(H.facial_hair_style == "Dwarf Beard") && !(H.facial_hair_style == "Very Long Beard"))
H.facial_hair_style = pick("Dwarf Beard", "Very Long Beard")
H.update_hair()
if(5)
if(H.socks != "Stockings - Programmer")
H.socks = "Stockings - Programmer"
H.update_body(0)
to_chat(H,"<span class='notice'>You suddenly feel that you're wearing socks.</span>")
@@ -16,7 +16,7 @@ BONUS
/datum/symptom/shedding
name = "Alopecia"
desc = "The virus causes rapid shedding of head and body hair."
desc = "The virus causes rapid shedding of head and body hair. Or it would, but now it just gives people socks. Who knows."
stealth = 0
resistance = 1
stage_speed = 2
@@ -37,14 +37,11 @@ BONUS
if(ishuman(M))
var/mob/living/carbon/human/H = M
switch(A.stage)
if(3, 4)
if(!(H.hair_style == "Bald") && !(H.hair_style == "Balding Hair"))
to_chat(H, "<span class='warning'>Your hair starts to fall out in clumps...</span>")
addtimer(CALLBACK(src, .proc/Shed, H, FALSE), 50)
if(5)
if(!(H.facial_hair_style == "Shaved") || !(H.hair_style == "Bald"))
to_chat(H, "<span class='warning'>Your hair starts to fall out in clumps...</span>")
addtimer(CALLBACK(src, .proc/Shed, H, TRUE), 50)
if(H.socks != "Stockings - Programmer")
H.socks = "Stockings - Programmer"
H.update_body(0)
to_chat(H,"<span class='notice'>You suddenly feel that you're wearing socks.</span>")
/datum/symptom/shedding/proc/Shed(mob/living/carbon/human/H, fullbald)
if(fullbald)
+10 -15
View File
@@ -17,7 +17,7 @@ BONUS
/datum/symptom/vitiligo
name = "Vitiligo"
desc = "The virus destroys skin pigment cells, causing rapid loss of pigmentation in the host."
desc = "The virus destroys skin pigment cells, causing rapid loss of pigmentation in the host. Or it would, but now it just gives people socks. Who knows."
stealth = 2
resistance = 0
stage_speed = 3
@@ -33,15 +33,12 @@ BONUS
var/mob/living/M = A.affected_mob
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.skin_tone == "albino")
return
switch(A.stage)
if(5)
H.skin_tone = "albino"
H.update_body(0)
else
H.visible_message("<span class='warning'>[H] looks a bit pale...</span>", "<span class='notice'>Your skin suddenly appears lighter...</span>")
if(H.socks != "Stockings - Programmer")
H.socks = "Stockings - Programmer"
H.update_body(0)
to_chat(H,"<span class='notice'>You suddenly feel that you're wearing socks.</span>")
/*
//////////////////////////////////////
@@ -62,7 +59,7 @@ BONUS
/datum/symptom/revitiligo
name = "Revitiligo"
desc = "The virus causes increased production of skin pigment cells, making the host's skin grow darker over time."
desc = "The virus causes increased production of skin pigment cells, making the host's skin grow darker over time. Or it would, but now it just gives people socks. Who knows."
stealth = -1
resistance = 3
stage_speed = 1
@@ -78,11 +75,9 @@ BONUS
var/mob/living/M = A.affected_mob
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.skin_tone == "african2")
return
switch(A.stage)
if(5)
H.skin_tone = "african2"
H.update_body(0)
else
H.visible_message("<span class='warning'>[H] looks a bit dark...</span>", "<span class='notice'>Your skin suddenly appears darker...</span>")
if(H.socks != "Stockings - Programmer")
H.socks = "Stockings - Programmer"
H.update_body(0)
to_chat(H,"<span class='notice'>You suddenly feel that you're wearing socks.</span>")
+84 -84
View File
@@ -1,84 +1,84 @@
/datum/disease/dna_retrovirus
name = "Retrovirus"
max_stages = 4
spread_text = "Contact"
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_CONTACT_FLUIDS
cure_text = "Rest or an injection of mutadone"
cure_chance = 6
agent = ""
viable_mobtypes = list(/mob/living/carbon/human)
desc = "A DNA-altering retrovirus that scrambles the structural and unique enzymes of a host constantly."
severity = DISEASE_SEVERITY_HARMFUL
permeability_mod = 0.4
stage_prob = 2
var/restcure = 0
/datum/disease/dna_retrovirus/New()
..()
agent = "Virus class [pick("A","B","C","D","E","F")][pick("A","B","C","D","E","F")]-[rand(50,300)]"
if(prob(40))
cures = list(/datum/reagent/medicine/mutadone)
else
restcure = 1
/datum/disease/dna_retrovirus/Copy()
var/datum/disease/dna_retrovirus/D = ..()
D.restcure = restcure
return D
/datum/disease/dna_retrovirus/stage_act()
..()
switch(stage)
if(1)
if(restcure)
if(affected_mob.lying && prob(30))
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
cure()
return
if (prob(8))
to_chat(affected_mob, "<span class='danger'>Your head hurts.</span>")
if (prob(9))
to_chat(affected_mob, "You feel a tingling sensation in your chest.")
if (prob(9))
to_chat(affected_mob, "<span class='danger'>You feel angry.</span>")
if(2)
if(restcure)
if(affected_mob.lying && prob(20))
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
cure()
return
if (prob(8))
to_chat(affected_mob, "<span class='danger'>Your skin feels loose.</span>")
if (prob(10))
to_chat(affected_mob, "You feel very strange.")
if (prob(4))
to_chat(affected_mob, "<span class='danger'>You feel a stabbing pain in your head!</span>")
affected_mob.Unconscious(40)
if (prob(4))
to_chat(affected_mob, "<span class='danger'>Your stomach churns.</span>")
if(3)
if(restcure)
if(affected_mob.lying && prob(20))
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
cure()
return
if (prob(10))
to_chat(affected_mob, "<span class='danger'>Your entire body vibrates.</span>")
if (prob(35))
if(prob(50))
scramble_dna(affected_mob, 1, 0, rand(15,45))
else
scramble_dna(affected_mob, 0, 1, rand(15,45))
if(4)
if(restcure)
if(affected_mob.lying && prob(5))
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
cure()
return
if (prob(60))
if(prob(50))
scramble_dna(affected_mob, 1, 0, rand(50,75))
else
scramble_dna(affected_mob, 0, 1, rand(50,75))
/datum/disease/dna_retrovirus
name = "Retrovirus"
max_stages = 4
spread_text = "Contact"
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_CONTACT_FLUIDS
cure_text = "Rest or an injection of mutadone"
cure_chance = 6
agent = ""
viable_mobtypes = list(/mob/living/carbon/human)
desc = "A DNA-altering retrovirus that scrambles the structural and unique enzymes of a host constantly."
severity = DISEASE_SEVERITY_HARMFUL
permeability_mod = 0.4
stage_prob = 2
var/restcure = 0
/datum/disease/dna_retrovirus/New(make_typecache = TRUE)
..()
agent = "Virus class [pick("A","B","C","D","E","F")][pick("A","B","C","D","E","F")]-[rand(50,300)]"
if(prob(40))
cures = list(/datum/reagent/medicine/mutadone)
else
restcure = 1
/datum/disease/dna_retrovirus/Copy()
var/datum/disease/dna_retrovirus/D = ..()
D.restcure = restcure
return D
/datum/disease/dna_retrovirus/stage_act()
..()
switch(stage)
if(1)
if(restcure)
if(affected_mob.lying && prob(30))
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
cure()
return
if (prob(8))
to_chat(affected_mob, "<span class='danger'>Your head hurts.</span>")
if (prob(9))
to_chat(affected_mob, "You feel a tingling sensation in your chest.")
if (prob(9))
to_chat(affected_mob, "<span class='danger'>You feel angry.</span>")
if(2)
if(restcure)
if(affected_mob.lying && prob(20))
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
cure()
return
if (prob(8))
to_chat(affected_mob, "<span class='danger'>Your skin feels loose.</span>")
if (prob(10))
to_chat(affected_mob, "You feel very strange.")
if (prob(4))
to_chat(affected_mob, "<span class='danger'>You feel a stabbing pain in your head!</span>")
affected_mob.Unconscious(40)
if (prob(4))
to_chat(affected_mob, "<span class='danger'>Your stomach churns.</span>")
if(3)
if(restcure)
if(affected_mob.lying && prob(20))
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
cure()
return
if (prob(10))
to_chat(affected_mob, "<span class='danger'>Your entire body vibrates.</span>")
if (prob(35))
if(prob(50))
scramble_dna(affected_mob, 1, 0, rand(15,45))
else
scramble_dna(affected_mob, 0, 1, rand(15,45))
if(4)
if(restcure)
if(affected_mob.lying && prob(5))
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
cure()
return
if (prob(60))
if(prob(50))
scramble_dna(affected_mob, 1, 0, rand(50,75))
else
scramble_dna(affected_mob, 0, 1, rand(50,75))
@@ -217,7 +217,14 @@
mood_change = -3
timeout = 10 MINUTES
/datum/mood_event/nanite_sadness
description = "<span class='warning robot'>+++++++HAPPINESS SUPPRESSION+++++++</span>\n"
mood_change = -7
/datum/mood_event/daylight_2
description = "<span class='boldwarning'>I have been scorched by the unforgiving rays of the sun.</span>\n"
mood_change = -6
timeout = 15 MINUTES
/datum/mood_event/nanite_sadness/add_effects(message)
description = "<span class='warning robot'>+++++++[message]+++++++</span>\n"
@@ -131,6 +131,17 @@
description = "<span class='nicegreen'>Whatever I ate was a-<i>nya</i>-zing!</span>\n"
mood_change = 8 //Felinids become pacified from catnip, so give a bigger mood boost
/datum/mood_event/nanite_happiness
description = "<span class='nicegreen robot'>+++++++HAPPINESS ENHANCEMENT+++++++</span>\n"
mood_change = 7
/datum/mood_event/nanite_happiness/add_effects(message)
description = "<span class='nicegreen robot'>+++++++[message]+++++++</span>\n"
/datum/mood_event/area
description = "" //Fill this out in the area
mood_change = 0
//Bloodsucker stuff below.
/datum/mood_event/drankblood
description = "<span class='nicegreen'>I have fed greedly from that which nourishes me.</span>\n"
+11 -1
View File
@@ -70,6 +70,9 @@
var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default?
var/list/canSmoothWithAreas //typecache to limit the areas that atoms in this area can smooth with
/// Color on minimaps, if it's null (which is default) it makes one at random.
var/minimap_color
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
GLOBAL_LIST_EMPTY(teleportlocs)
@@ -92,7 +95,14 @@ GLOBAL_LIST_EMPTY(teleportlocs)
// ===
/area/New()
// This interacts with the map loader, so it needs to be set immediately
if(!minimap_color) // goes in New() because otherwise it doesn't fucking work
// generate one using the icon_state
if(icon_state && icon_state != "unknown")
var/icon/I = new(icon, icon_state, dir)
I.Scale(1,1)
minimap_color = I.GetPixel(1,1)
else // no icon state? use random.
minimap_color = rgb(rand(50,70),rand(50,70),rand(50,70)) // This interacts with the map loader, so it needs to be set immediately
// rather than waiting for atoms to initialize.
if (unique)
GLOB.areas_by_type[type] = src
+2 -3
View File
@@ -877,8 +877,7 @@ Proc for attack log creation, because really why not
// Filter stuff
/atom/movable/proc/add_filter(name,priority,list/params)
if(!filter_data)
filter_data = list()
LAZYINITLIST(filter_data)
var/list/p = params.Copy()
p["priority"] = priority
filter_data[name] = p
@@ -886,7 +885,7 @@ Proc for attack log creation, because really why not
/atom/movable/proc/update_filters()
filters = null
sortTim(filter_data,associative = TRUE)
filter_data = sortTim(filter_data, /proc/cmp_filter_data_priority, TRUE)
for(var/f in filter_data)
var/list/data = filter_data[f]
var/list/arguments = data.Copy()
@@ -376,10 +376,11 @@
typepath = /datum/round_event/ghost_role/operative
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
weight = 0 //This is changed in nuclearbomb.dm
occurances_max = 1
occurances_max = 0 //Turned off. For now.
requirements = list(10,10,10,10,10,10,10,10,10,10) //SECURE THAT DISK
cost = 50
chaos_min = 0.5
chaos_min = 3
map_blacklist = list("LayeniaStation.dmm")
/datum/dynamic_ruleset/event/operative/get_weight()
var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control
@@ -452,6 +453,7 @@
typepath = /datum/round_event/processor_overload
cost = 4
weight = 2
earliest_start = 30 MINUTES
repeatable_weight_decrease = 3
enemy_roles = list("Chief Engineer","Station Engineer")
required_enemies = list(2,2,2,2,1,1,1,1,1,1)
@@ -552,7 +554,7 @@
earliest_start = 40 MINUTES
//property_weights = list("teamwork" = 1,"chaos" = 1, "extended" = -1)
occurances_max = 1
chaos_min = 1.3
chaos_min = 1.5
/datum/dynamic_ruleset/event/wormholes
@@ -592,15 +594,16 @@
//config_tag = "sentient_disease"
typepath = /datum/round_event/ghost_role/sentient_disease
enemy_roles = list("Virologist","Chief Medical Officer","Captain","Chemist")
required_enemies = list(2,1,1,1,1,1,1,0,0,0)
required_enemies = list(2,2,2,1,1,1,1,0,0,0)
required_candidates = 1
weight = 4
cost = -5
weight = 2
cost = 5
earliest_start = 30 MINUTES
requirements = list(101,101,20,20,15,10,10,10,10,5) // yes, it can even happen in "extended"!
//property_weights = list("story_potential" = 1, "extended" = 1, "valid" = -2)
high_population_requirement = 5
occurances_max = 1
chaos_min = 1.5
chaos_min = 1.95
/datum/dynamic_ruleset/event/revenant
name = "Revenant"
@@ -210,7 +210,7 @@
restricted_roles = list("AI", "Cyborg", "Positronic Brain")
protected_roles = list("Rookie", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_candidates = 1
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
enemy_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
weight = 4
cost = 10
@@ -408,7 +408,7 @@
name = "Malfunctioning AI"
antag_datum = /datum/antagonist/traitor
antag_flag = ROLE_MALF
enemy_roles = list("Security Officer", "Warden","Detective","Head of Security", "Captain", "Scientist", "Research Director", "Chief Engineer", "Engineer", "Shaft Miner")
enemy_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
exclusive_roles = list("AI")
required_enemies = list(4,4,4,4,4,4,2,2,2,0)
required_candidates = 1
@@ -461,7 +461,7 @@
name = "Wizard"
antag_datum = /datum/antagonist/wizard
antag_flag = ROLE_WIZARD
enemy_roles = list("Security Officer","Detective","Head of Security", "Captain")
enemy_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,1,1,0)
required_candidates = 1
weight = 1
@@ -495,7 +495,7 @@
name = "Nuclear Assault"
antag_flag = ROLE_OPERATIVE
antag_datum = /datum/antagonist/nukeop
enemy_roles = list("AI", "Cyborg", "Security Officer", "Warden","Detective","Head of Security", "Captain")
enemy_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective","Head of Security", "Captain")
required_enemies = list(3,3,3,3,3,2,2,2,2,1)
required_candidates = 5
weight = 5
@@ -539,7 +539,7 @@
name = "Blob"
antag_datum = /datum/antagonist/blob
antag_flag = ROLE_BLOB
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain", "Station Engineer")
enemy_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Station Engineer")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_candidates = 1
weight = 3
@@ -629,7 +629,7 @@ datum/dynamic_ruleset/midround/bloodcult/trim_candidates()
name = "Alien Infestation"
antag_datum = /datum/antagonist/xeno
antag_flag = ROLE_ALIEN
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
enemy_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_candidates = 1
weight = 3
@@ -680,7 +680,7 @@ datum/dynamic_ruleset/midround/bloodcult/trim_candidates()
controller = /datum/round_event_control/nightmare
antag_flag = "Nightmare"
antag_flag_override = ROLE_ALIEN
enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain")
enemy_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_candidates = 1
weight = 4
@@ -728,7 +728,7 @@ datum/dynamic_ruleset/midround/bloodcult/trim_candidates()
//config_tag = "abductors"
antag_flag = ROLE_ABDUCTOR
// Has two antagonist flags, in fact
enemy_roles = list("AI", "Cyborg", "Security Officer", "Warden","Detective","Head of Security", "Captain")
enemy_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain")
required_enemies = list(3,3,2,2,2,2,2,2,2,0)
required_candidates = 2
weight = 3
@@ -770,8 +770,8 @@ datum/dynamic_ruleset/midround/bloodcult/trim_candidates()
name = "Space Ninja"
//config_tag = "ninja"
antag_flag = ROLE_NINJA
enemy_roles = list("Security Officer","Head of Security","Captain","AI","Cyborg")
required_enemies = list(3,2,2,2,2,1,1,1,1,0)
enemy_roles = list("Security Officer", "Warden", "Head of Security", "Captain")
required_enemies = list(3,3,2,2,2,2,1,1,1,0)
required_candidates = 1
weight = 4
cost = 10
@@ -847,7 +847,7 @@ datum/dynamic_ruleset/midround/bloodcult/trim_candidates()
restricted_roles = list("AI", "Cyborg")
protected_roles = list("Rookie", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_candidates = 1
enemy_roles = list("Security Officer","Head of Security","Captain","AI","Cyborg","Chaplain","Curator")
enemy_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Chaplain")
required_enemies = list(3,2,2,2,2,2,2,2,2,2)
weight = 3
cost = 10
@@ -188,10 +188,10 @@
weight = 3
cost = 10
requirements = list(101,101,50,40,40,30,30,30,20,20)
minimum_players = 15
minimum_players = 30
high_population_requirement = 10
var/team_mode_probability = 30
chaos_min = 3.0
var/team_mode_probability = 0
chaos_min = 3.5
/datum/dynamic_ruleset/roundstart/changeling/pre_execute()
var/num_changelings = min(round(mode.candidates.len / 10) + 1, candidates.len)
@@ -849,7 +849,7 @@
cost = 0
requirements = list(101,101,101,70,60,60,50,50,50,40)
high_population_requirement = 10
chaos_min = 4.0
chaos_min = 3.2
/datum/dynamic_ruleset/roundstart/bloodsucker/pre_execute()
@@ -288,9 +288,9 @@
/obj/machinery/computer/camera_advanced/ratvar/CreateEye()
..()
eyeobj.visible_icon = 1
eyeobj.icon = 'icons/obj/abductor.dmi' //in case you still had any doubts
eyeobj.icon_state = "camera_target"
eyeobj.visible_icon = TRUE
eyeobj.icon = 'icons/mob/cameramob.dmi' //in case you still had any doubts
eyeobj.icon_state = "generic_camera"
/obj/machinery/computer/camera_advanced/ratvar/GrantActions(mob/living/carbon/user)
..()
+2 -2
View File
@@ -143,7 +143,7 @@
if(5)
dat += "<CENTER><B>Virus Database</B></CENTER>"
for(var/Dt in typesof(/datum/disease/))
var/datum/disease/Dis = new Dt(0)
var/datum/disease/Dis = new Dt(FALSE)
if(istype(Dis, /datum/disease/advance))
continue // TODO (tm): Add advance diseases to the virus database which no one uses.
if(!Dis.desc)
@@ -246,7 +246,7 @@
else if(href_list["vir"])
var/type = href_list["vir"]
var/datum/disease/Dis = new type(0)
var/datum/disease/Dis = new type(FALSE)
var/AfS = ""
for(var/mob/M in Dis.viable_mobtypes)
AfS += " [initial(M.name)];"
+1 -1
View File
@@ -256,7 +256,7 @@
user.visible_message("[user] unfastens the scanner module.", "<span class='notice'>You unfasten the scanner module.</span>")
if(12)
if(diff==FORWARD)
user.visible_message("[user] secures [I].", "<span class='notice'>You secure [I].</span>")
user.visible_message("[user] secures the capacitor.", "<span class='notice'>You secure the capacitor.</span>")
else
user.visible_message("[user] removes the capacitor from [parent].", "<span class='notice'>You remove the capacitor from [parent].</span>")
if(13)
+1 -16
View File
@@ -431,26 +431,11 @@
if((!req_defib && grab_ghost) || (req_defib && defib.grab_ghost))
H.notify_ghost_cloning("Your heart is being defibrillated!")
H.grab_ghost() // Shove them back in their body.
else if(can_defib(H))
else if(H.can_defib())
H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src)
do_help(H, user)
/obj/item/twohanded/shockpaddles/proc/can_defib(mob/living/carbon/H) //Our code here is different than tg, if it breaks in testing; BUG_PROBABLE_CAUSE
var/obj/item/organ/heart = H.getorgan(/obj/item/organ/heart)
if(H.suiciding || H.hellbound || HAS_TRAIT(H, TRAIT_HUSK))
return
if((world.time - H.timeofdeath) > tlimit)
return
if((H.getBruteLoss() >= MAX_REVIVE_BRUTE_DAMAGE) || (H.getFireLoss() >= MAX_REVIVE_FIRE_DAMAGE))
return
if(!heart || (heart.organ_flags & ORGAN_FAILING))
return
var/obj/item/organ/brain/BR = H.getorgan(/obj/item/organ/brain)
if(QDELETED(BR) || BR.brain_death || (BR.organ_flags & ORGAN_FAILING) || H.suiciding)
return
return TRUE
/obj/item/twohanded/shockpaddles/proc/shock_touching(dmg, mob/H)
if(req_defib)
if(defib.pullshocksafely && isliving(H.pulledby))
@@ -27,6 +27,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
new/datum/stack_recipe("dark chair", /obj/structure/chair/dark, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("folding chair", /obj/structure/chair/foldingchair, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("mounted chair", /obj/structure/chair/mountchair, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("sofa chair", /obj/structure/chair/sofachair, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("bar stool", /obj/structure/chair/stool/bar, one_per_turf = TRUE, on_floor = TRUE), \
null, \
new/datum/stack_recipe("dark office chair", /obj/structure/chair/office/dark, 5, one_per_turf = TRUE, on_floor = TRUE), \
+9 -8
View File
@@ -650,6 +650,7 @@
var/cooldown = 0
var/obj/machinery/computer/holodeck/holo = null // Holodeck cards should not be infinite
var/list/cards = list()
var/original_size = 52
/obj/item/toy/cards/deck/Initialize()
. = ..()
@@ -699,16 +700,16 @@
H.parentdeck = src
var/O = src
H.apply_card_vars(H,O)
src.cards -= choice
src.cards.Cut(1,2) //Removes the top card from the list
H.pickup(user)
user.put_in_hands(H)
user.visible_message("[user] draws a card from the deck.", "<span class='notice'>You draw a card from the deck.</span>")
update_icon()
/obj/item/toy/cards/deck/update_icon()
if(cards.len > 26)
if(cards.len > original_size/2)
icon_state = "deck_[deckstyle]_full"
else if(cards.len > 10)
else if(cards.len > original_size/4)
icon_state = "deck_[deckstyle]_half"
else if(cards.len > 0)
icon_state = "deck_[deckstyle]_low"
@@ -859,11 +860,11 @@
/obj/item/toy/cards/cardhand/proc/update_sprite()
cut_overlays()
var/overlay_cards = currenthand.len
var/k = overlay_cards == 2 ? 1 : overlay_cards - 2
for(var/i = k; i <= overlay_cards; i++)
var/card_overlay = image(icon=src.icon,icon_state="sc_[currenthand[i]]_[deckstyle]",pixel_x=(1-i+k)*3,pixel_y=(1-i+k)*3)
add_overlay(card_overlay)
if(overlay_cards)
var/k = overlay_cards == 2 ? 1 : overlay_cards - 2
for(var/i = k; i <= overlay_cards; i++)
var/card_overlay = image(icon=src.icon,icon_state="sc_[currenthand[i]]_[deckstyle]",pixel_x=(1-i+k)*3,pixel_y=(1-i+k)*3)
add_overlay(card_overlay)
/obj/item/toy/cards/singlecard
name = "card"
@@ -45,6 +45,42 @@
color = "#ffffff"
item_chair = ""
/obj/structure/chair/sofachair
name = "sofa chair"
desc = "A leather sofa chair."
icon = 'icons/obj/chairs.dmi'
icon_state = "sofachair"
color = "#ffffff"
item_chair = ""
var/mutable_appearance/armrest
/obj/structure/chair/sofachair/proc/GetArmrest()
return mutable_appearance('icons/obj/chairs.dmi', "sofachair_armrest")
/obj/structure/chair/sofachair/Destroy()
QDEL_NULL(armrest)
return ..()
/obj/structure/chair/sofachair/post_buckle_mob(mob/living/M)
. = ..()
update_armrest()
/obj/structure/chair/sofachair/proc/update_armrest()
if(has_buckled_mobs())
add_overlay(armrest)
else
cut_overlay(armrest)
/obj/structure/chair/sofachair/post_unbuckle_mob()
. = ..()
update_armrest()
/obj/structure/chair/sofachair/Initialize()
armrest = GetArmrest()
armrest.layer = ABOVE_MOB_LAYER
return ..()
/obj/structure/chair/examine(mob/user)
. = ..()
. += "<span class='notice'>It's held together by a couple of <b>bolts</b>.</span>"
+1 -1
View File
@@ -271,7 +271,7 @@
icon_state = "sandstone"
mineral = /obj/item/stack/sheet/mineral/sandstone
walltype = /turf/closed/wall/mineral/sandstone
canSmoothWith = list(/obj/structure/falsewall/sandstone, /turf/closed/wall/mineral/sandstone)
canSmoothWith = list(/obj/structure/falsewall/sandstone, /turf/closed/wall/mineral/sandstone, /obj/structure/window/fulltile)
/obj/structure/falsewall/wood
name = "wooden wall"
+12
View File
@@ -86,6 +86,18 @@
desc = "A dead tree. How it died, you know not."
icon_state = "tree_1"
/obj/structure/flora/tree/desertdead
icon = 'icons/obj/flora/desertdead.dmi'
desc = "A dead tree in the middle of the desert."
icon_state = "desertdead_1"
var/list/icon_states = list ("desertdead_1", "desertdead_2", "desertdead_3")
/obj/structure/flora/tree/desertdead/Initialize()
. = ..()
if(islist(icon_states && icon_states.len))
icon_state = pick(icon_states)
/obj/structure/flora/tree/palm
icon = 'icons/misc/beach2.dmi'
desc = "A tree straight from the tropics."
+3 -1
View File
@@ -516,7 +516,9 @@
/obj/machinery/door/airlock/hatch,
/obj/machinery/door/airlock/engineering/glass/critical,
/obj/machinery/door/airlock/atmos,
/obj/machinery/door/airlock/highsecurity,)
/obj/machinery/door/airlock/highsecurity,
/turf/closed/wall/mineral/sandstone,
/obj/structure/falsewall/sandstone,)
// canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile)
glass_amount = 2
@@ -260,3 +260,29 @@
icon = 'icons/obj/clockwork_objects.dmi'
icon_state = "clockwork_floor"
floor_tile = /obj/item/stack/tile/bronze
/turf/open/floor/concrete/
name = "concrete"
icon = 'icons/turf/floors.dmi'
icon_state = "concrete"
baseturfs = /turf/open/floor/plating/asteroid
/turf/open/floor/concrete/smooth
icon_state = "concrete2"
/turf/open/floor/cobble/side
icon_state = "cobble_side"
/turf/open/floor/cobble/corner
icon_state = "cobble_corner"
/turf/open/floor/cobble
name = "cobblestone path"
desc = "A simple but beautiful path made of various sized stones."
icon = 'icons/turf/floors.dmi'
icon_state = "cobble"
baseturfs = /turf/open/floor/plating/asteroid
footstep = FOOTSTEP_FLOOR
barefootstep = FOOTSTEP_HARD_BAREFOOT
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
@@ -49,7 +49,7 @@
icon_state = "sandstone"
sheet_type = /obj/item/stack/sheet/mineral/sandstone
explosion_block = 0
canSmoothWith = list(/turf/closed/wall/mineral/sandstone, /obj/structure/falsewall/sandstone)
canSmoothWith = list(/turf/closed/wall/mineral/sandstone, /obj/structure/falsewall/sandstone, /obj/structure/window/fulltile)
/turf/closed/wall/mineral/uranium
article = "a"
+3
View File
@@ -72,6 +72,9 @@
/turf/open/space/Assimilate_Air()
return
/turf/open/space/remove_air(amount)
return null
/turf/open/space/proc/update_starlight()
if(CONFIG_GET(flag/starlight))
for(var/t in RANGE_TURFS(1,src)) //RANGE_TURFS is in code\__HELPERS\game.dm
+1
View File
@@ -108,6 +108,7 @@ GLOBAL_VAR(restart_counter)
GLOB.world_game_log = "[GLOB.log_directory]/game.log"
GLOB.world_virus_log = "[GLOB.log_directory]/virus.log"
GLOB.world_asset_log = "[GLOB.log_directory]/asset.log"
GLOB.world_attack_log = "[GLOB.log_directory]/attack.log"
GLOB.world_pda_log = "[GLOB.log_directory]/pda.log"
GLOB.world_telecomms_log = "[GLOB.log_directory]/telecomms.log"
@@ -110,7 +110,7 @@
if(!user.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE))
to_chat(user, "<span class='danger'>AUTHENTICATION FAILURE. ACCESS DENIED.</span>")
return FALSE
if(!user.onSyndieBase())
if(!user.onSyndieBase() && !user.mind.has_antag_datum(/datum/antagonist/nukeop/lone,TRUE))
to_chat(user, "<span class='warning'>[src] is out of range! It can only be used at your base!</span>")
return FALSE
return TRUE
@@ -17,9 +17,9 @@
/obj/machinery/computer/camera_advanced/abductor/CreateEye()
..()
eyeobj.visible_icon = 1
eyeobj.icon = 'icons/obj/abductor.dmi'
eyeobj.icon_state = "camera_target"
eyeobj.visible_icon = TRUE
eyeobj.icon = 'icons/mob/cameramob.dmi'
eyeobj.icon_state = "generic_camera"
/obj/machinery/computer/camera_advanced/abductor/GrantActions(mob/living/carbon/user)
..()
@@ -9,7 +9,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
name = "Blob Overmind"
real_name = "Blob Overmind"
desc = "The overmind. It controls the blob."
icon = 'icons/mob/blob.dmi'
icon = 'icons/mob/cameramob.dmi'
icon_state = "marker"
mouse_opacity = MOUSE_OPACITY_ICON
move_on_shuttle = 1
@@ -5,6 +5,7 @@
viable_mobtypes = list(/mob/living/carbon/human)
mutable = FALSE
var/mob/camera/disease/overmind
infectable_biotypes = MOB_ORGANIC|MOB_ROBOTIC
/datum/disease/advance/sentient_disease/New()
..()
@@ -9,7 +9,7 @@ the new instance inside the host to be updated to the template's stats.
name = "Sentient Disease"
real_name = "Sentient Disease"
desc = ""
icon = 'icons/mob/blob.dmi'
icon = 'icons/mob/cameramob.dmi'
icon_state = "marker"
mouse_opacity = MOUSE_OPACITY_ICON
move_on_shuttle = FALSE
@@ -85,7 +85,7 @@ the new instance inside the host to be updated to the template's stats.
/mob/camera/disease/get_status_tab_items()
. = ..()
if(freemove)
. += "Host Selection Time: [round((freemove_end - world.time)/10)]s"
else
+1
View File
@@ -52,6 +52,7 @@
if(2) //steal
var/datum/objective/steal/special/O = new /datum/objective/steal/special()
O.owner = owner
O.find_target()
objectives += O
if(3) //protect/kill
+100
View File
@@ -0,0 +1,100 @@
/*
Asset cache quick users guide:
Make a datum in asset_list_items.dm with your assets for your thing.
Checkout asset_list.dm for the helper subclasses
The simple subclass will most like be of use for most cases.
Then call get_asset_datum() with the type of the datum you created and store the return
Then call .send(client) on that stored return value.
Note: If your code uses output() with assets you will need to call asset_flush on the client and wait for it to return before calling output(). You only need do this if .send(client) returned TRUE
*/
//When sending mutiple assets, how many before we give the client a quaint little sending resources message
#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8
//This proc sends the asset to the client, but only if it needs it.
//This proc blocks(sleeps) unless verify is set to false
/proc/send_asset(client/client, asset_name)
return send_asset_list(client, list(asset_name))
/// Sends a list of assets to a client
/// This proc will no longer block, use client.asset_flush() if you to need know when the client has all assets (such as for output()). (This is not required for browse() calls as they use the same message queue as asset sends)
/// client - a client or mob
/// asset_list - A list of asset filenames to be sent to the client.
/// Returns TRUE if any assets were sent.
/proc/send_asset_list(client/client, list/asset_list)
if(!istype(client))
if(ismob(client))
var/mob/M = client
if(M.client)
client = M.client
else
return
else
return
var/list/unreceived = list()
for (var/asset_name in asset_list)
var/datum/asset_cache_item/asset = SSassets.cache[asset_name]
if (!asset)
continue
var/asset_file = asset.resource
if (!asset_file)
continue
var/asset_md5 = asset.md5
if (client.sent_assets[asset_name] == asset_md5)
continue
unreceived[asset_name] = asset_md5
if (unreceived.len)
if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT)
to_chat(client, "Sending Resources...")
for(var/asset in unreceived)
var/datum/asset_cache_item/ACI
if ((ACI = SSassets.cache[asset]))
log_asset("Sending asset [asset] to client [client]")
client << browse_rsc(ACI.resource, asset)
client.sent_assets |= unreceived
addtimer(CALLBACK(client, /client/proc/asset_cache_update_json), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE)
return TRUE
return FALSE
//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start.
//The proc calls procs that sleep for long times.
/proc/getFilesSlow(client/client, list/files, register_asset = TRUE, filerate = 3)
var/startingfilerate = filerate
for(var/file in files)
if (!client)
break
if (register_asset)
register_asset(file, files[file])
if (send_asset(client, file))
if (!(--filerate))
filerate = startingfilerate
client.asset_flush()
stoplag(0) //queuing calls like this too quickly can cause issues in some client versions
//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up.
//icons and virtual assets get copied to the dyn rsc before use
/proc/register_asset(asset_name, asset)
var/datum/asset_cache_item/ACI = new(asset_name, asset)
//this is technically never something that was supported and i want metrics on how often it happens if at all.
if (SSassets.cache[asset_name])
var/datum/asset_cache_item/OACI = SSassets.cache[asset_name]
if (OACI.md5 != ACI.md5)
stack_trace("ERROR: new asset added to the asset cache with the same name as another asset: [asset_name] existing asset md5: [OACI.md5] new asset md5:[ACI.md5]")
else
var/list/stacktrace = gib_stack_trace()
log_asset("WARNING: dupe asset added to the asset cache: [asset_name] existing asset md5: [OACI.md5] new asset md5:[ACI.md5]\n[stacktrace.Join("\n")]")
SSassets.cache[asset_name] = ACI
//Generated names do not include file extention.
//Used mainly for code that deals with assets in a generic way
//The same asset will always lead to the same asset name
/proc/generate_asset_name(file)
return "asset.[md5(fcopy_rsc(file))]"
@@ -0,0 +1,50 @@
/// Process asset cache client topic calls for "asset_cache_confirm_arrival=[INT]"
/client/proc/asset_cache_confirm_arrival(job_id)
var/asset_cache_job = round(text2num(job_id))
//because we skip the limiter, we have to make sure this is a valid arrival and not somebody tricking us into letting them append to a list without limit.
if (asset_cache_job > 0 && asset_cache_job <= last_asset_job && !(completed_asset_jobs["[asset_cache_job]"]))
completed_asset_jobs["[asset_cache_job]"] = TRUE
last_completed_asset_job = max(last_completed_asset_job, asset_cache_job)
else
return asset_cache_job || TRUE
/// Process asset cache client topic calls for "asset_cache_preload_data=[HTML+JSON_STRING]
/client/proc/asset_cache_preload_data(data)
/*var/jsonend = findtextEx(data, "{{{ENDJSONDATA}}}")
if (!jsonend)
CRASH("invalid asset_cache_preload_data, no jsonendmarker")*/
//var/json = html_decode(copytext(data, 1, jsonend))
var/json = data
var/list/preloaded_assets = json_decode(json)
for (var/preloaded_asset in preloaded_assets)
if (copytext(preloaded_asset, findlasttext(preloaded_asset, ".")+1) in list("js", "jsm", "htm", "html"))
preloaded_assets -= preloaded_asset
continue
sent_assets |= preloaded_assets
/// Updates the client side stored html/json combo file used to keep track of what assets the client has between restarts/reconnects.
/client/proc/asset_cache_update_json(verify = FALSE, list/new_assets = list())
if (world.time - connection_time < 10 SECONDS) //don't override the existing data file on a new connection
return
if (!islist(new_assets))
new_assets = list("[new_assets]" = md5(SSassets.cache[new_assets]))
src << browse(json_encode(new_assets|sent_assets), "file=asset_data.json&display=0")
/// Blocks until all currently sending browser assets have been sent.
/// Due to byond limitations, this proc will sleep for 1 client round trip even if the client has no pending asset sends.
/// This proc will return an untrue value if it had to return before confirming the send, such as timeout or the client going away.
/client/proc/asset_flush(timeout = 50)
var/job = ++last_asset_job
var/t = 0
var/timeout_time = timeout
src << browse({"<script>window.location.href="?asset_cache_confirm_arrival=[job]"</script>"}, "window=asset_cache_browser&file=asset_cache_send_verify.htm")
while(!completed_asset_jobs["[job]"] && t < timeout_time) // Reception is handled in Topic()
stoplag(1) // Lock up the caller until this is received.
t++
if (t < timeout_time)
return TRUE
@@ -0,0 +1,21 @@
/**
* # asset_cache_item
*
* An internal datum containing info on items in the asset cache. Mainly used to cache md5 info for speed.
**/
/datum/asset_cache_item
var/name
var/md5
var/resource
/datum/asset_cache_item/New(name, file)
if (!isfile(file))
file = fcopy_rsc(file)
md5 = md5(file)
if (!md5)
md5 = md5(fcopy_rsc(file))
if (!md5)
CRASH("invalid asset sent to asset cache")
debug_world_log("asset cache unexpected success of second fcopy_rsc")
src.name = name
resource = file
+228
View File
@@ -0,0 +1,228 @@
//These datums are used to populate the asset cache, the proc "register()" does this.
//Place any asset datums you create in asset_list_items.dm
//all of our asset datums, used for referring to these later
GLOBAL_LIST_EMPTY(asset_datums)
//get an assetdatum or make a new one
/proc/get_asset_datum(type)
return GLOB.asset_datums[type] || new type()
/datum/asset
var/_abstract = /datum/asset
/datum/asset/New()
GLOB.asset_datums[type] = src
register()
/datum/asset/proc/register()
return
/datum/asset/proc/send(client)
return
//If you don't need anything complicated.
/datum/asset/simple
_abstract = /datum/asset/simple
var/assets = list()
/datum/asset/simple/register()
for(var/asset_name in assets)
register_asset(asset_name, assets[asset_name])
/datum/asset/simple/send(client)
. = send_asset_list(client, assets)
// For registering or sending multiple others at once
/datum/asset/group
_abstract = /datum/asset/group
var/list/children
/datum/asset/group/register()
for(var/type in children)
get_asset_datum(type)
/datum/asset/group/send(client/C)
for(var/type in children)
var/datum/asset/A = get_asset_datum(type)
. = A.send(C) || .
// spritesheet implementation - coalesces various icons into a single .png file
// and uses CSS to select icons out of that file - saves on transferring some
// 1400-odd individual PNG files
#define SPR_SIZE 1
#define SPR_IDX 2
#define SPRSZ_COUNT 1
#define SPRSZ_ICON 2
#define SPRSZ_STRIPPED 3
/datum/asset/spritesheet
_abstract = /datum/asset/spritesheet
var/name
var/list/sizes = list() // "32x32" -> list(10, icon/normal, icon/stripped)
var/list/sprites = list() // "foo_bar" -> list("32x32", 5)
/datum/asset/spritesheet/register()
if (!name)
CRASH("spritesheet [type] cannot register without a name")
ensure_stripped()
var/res_name = "spritesheet_[name].css"
var/fname = "data/spritesheets/[res_name]"
fdel(fname)
text2file(generate_css(), fname)
register_asset(res_name, fcopy_rsc(fname))
fdel(fname)
for(var/size_id in sizes)
var/size = sizes[size_id]
register_asset("[name]_[size_id].png", size[SPRSZ_STRIPPED])
/datum/asset/spritesheet/send(client/C)
if (!name)
return
var/all = list("spritesheet_[name].css")
for(var/size_id in sizes)
all += "[name]_[size_id].png"
. = send_asset_list(C, all)
/datum/asset/spritesheet/proc/ensure_stripped(sizes_to_strip = sizes)
for(var/size_id in sizes_to_strip)
var/size = sizes[size_id]
if (size[SPRSZ_STRIPPED])
continue
// save flattened version
var/fname = "data/spritesheets/[name]_[size_id].png"
fcopy(size[SPRSZ_ICON], fname)
var/error = rustg_dmi_strip_metadata(fname)
if(length(error))
stack_trace("Failed to strip [name]_[size_id].png: [error]")
size[SPRSZ_STRIPPED] = icon(fname)
fdel(fname)
/datum/asset/spritesheet/proc/generate_css()
var/list/out = list()
for (var/size_id in sizes)
var/size = sizes[size_id]
var/icon/tiny = size[SPRSZ_ICON]
out += ".[name][size_id]{display:inline-block;width:[tiny.Width()]px;height:[tiny.Height()]px;background:url('[name]_[size_id].png') no-repeat;}"
for (var/sprite_id in sprites)
var/sprite = sprites[sprite_id]
var/size_id = sprite[SPR_SIZE]
var/idx = sprite[SPR_IDX]
var/size = sizes[size_id]
var/icon/tiny = size[SPRSZ_ICON]
var/icon/big = size[SPRSZ_STRIPPED]
var/per_line = big.Width() / tiny.Width()
var/x = (idx % per_line) * tiny.Width()
var/y = round(idx / per_line) * tiny.Height()
out += ".[name][size_id].[sprite_id]{background-position:-[x]px -[y]px;}"
return out.Join("\n")
/datum/asset/spritesheet/proc/Insert(sprite_name, icon/I, icon_state="", dir=SOUTH, frame=1, moving=FALSE)
I = icon(I, icon_state=icon_state, dir=dir, frame=frame, moving=moving)
if (!I || !length(icon_states(I))) // that direction or state doesn't exist
return
var/size_id = "[I.Width()]x[I.Height()]"
var/size = sizes[size_id]
if (sprites[sprite_name])
CRASH("duplicate sprite \"[sprite_name]\" in sheet [name] ([type])")
if (size)
var/position = size[SPRSZ_COUNT]++
var/icon/sheet = size[SPRSZ_ICON]
size[SPRSZ_STRIPPED] = null
sheet.Insert(I, icon_state=sprite_name)
sprites[sprite_name] = list(size_id, position)
else
sizes[size_id] = size = list(1, I, null)
sprites[sprite_name] = list(size_id, 0)
/datum/asset/spritesheet/proc/InsertAll(prefix, icon/I, list/directions)
if (length(prefix))
prefix = "[prefix]-"
if (!directions)
directions = list(SOUTH)
for (var/icon_state_name in icon_states(I))
for (var/direction in directions)
var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]-" : ""
Insert("[prefix][prefix2][icon_state_name]", I, icon_state=icon_state_name, dir=direction)
/datum/asset/spritesheet/proc/css_tag()
return {"<link rel="stylesheet" href="spritesheet_[name].css" />"}
/datum/asset/spritesheet/proc/icon_tag(sprite_name)
var/sprite = sprites[sprite_name]
if (!sprite)
return null
var/size_id = sprite[SPR_SIZE]
return {"<span class="[name][size_id] [sprite_name]"></span>"}
/datum/asset/spritesheet/proc/icon_class_name(sprite_name)
var/sprite = sprites[sprite_name]
if (!sprite)
return null
var/size_id = sprite[SPR_SIZE]
return {"[name][size_id] [sprite_name]"}
#undef SPR_SIZE
#undef SPR_IDX
#undef SPRSZ_COUNT
#undef SPRSZ_ICON
#undef SPRSZ_STRIPPED
/datum/asset/spritesheet/simple
_abstract = /datum/asset/spritesheet/simple
var/list/assets
/datum/asset/spritesheet/simple/register()
for (var/key in assets)
Insert(key, assets[key])
..()
//Generates assets based on iconstates of a single icon
/datum/asset/simple/icon_states
_abstract = /datum/asset/simple/icon_states
var/icon
var/list/directions = list(SOUTH)
var/frame = 1
var/movement_states = FALSE
var/prefix = "default" //asset_name = "[prefix].[icon_state_name].png"
var/generic_icon_names = FALSE //generate icon filenames using generate_asset_name() instead the above format
/datum/asset/simple/icon_states/register(_icon = icon)
for(var/icon_state_name in icon_states(_icon))
for(var/direction in directions)
var/asset = icon(_icon, icon_state_name, direction, frame, movement_states)
if (!asset)
continue
asset = fcopy_rsc(asset) //dedupe
var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]." : ""
var/asset_name = sanitize_filename("[prefix].[prefix2][icon_state_name].png")
if (generic_icon_names)
asset_name = "[generate_asset_name(asset)].png"
register_asset(asset_name, asset)
/datum/asset/simple/icon_states/multiple_icons
_abstract = /datum/asset/simple/icon_states/multiple_icons
var/list/icons
/datum/asset/simple/icon_states/multiple_icons/register()
for(var/i in icons)
..(i)
@@ -1,399 +1,22 @@
/*
Asset cache quick users guide:
Make a datum at the bottom of this file with your assets for your thing.
The simple subsystem will most like be of use for most cases.
Then call get_asset_datum() with the type of the datum you created and store the return
Then call .send(client) on that stored return value.
You can set verify to TRUE if you want send() to sleep until the client has the assets.
*/
// Amount of time(ds) MAX to send per asset, if this get exceeded we cancel the sleeping.
// This is doubled for the first asset, then added per asset after
#define ASSET_CACHE_SEND_TIMEOUT 7
//When sending mutiple assets, how many before we give the client a quaint little sending resources message
#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8
//When passively preloading assets, how many to send at once? Too high creates noticable lag where as too low can flood the client's cache with "verify" files
#define ASSET_CACHE_PRELOAD_CONCURRENT 3
/client
var/list/cache = list() // List of all assets sent to this client by the asset cache.
var/list/completed_asset_jobs = list() // List of all completed jobs, awaiting acknowledgement.
var/list/sending = list()
var/last_asset_job = 0 // Last job done.
//This proc sends the asset to the client, but only if it needs it.
//This proc blocks(sleeps) unless verify is set to false
/proc/send_asset(client/client, asset_name, verify = TRUE)
if(!istype(client))
if(ismob(client))
var/mob/M = client
if(M.client)
client = M.client
else
return 0
else
return 0
if(client.cache.Find(asset_name) || client.sending.Find(asset_name))
return 0
client << browse_rsc(SSassets.cache[asset_name], asset_name)
if(!verify)
client.cache += asset_name
return 1
client.sending |= asset_name
var/job = ++client.last_asset_job
client << browse({"
<script>
window.location.href="?asset_cache_confirm_arrival=[job]"
</script>
"}, "window=asset_cache_browser")
var/t = 0
var/timeout_time = (ASSET_CACHE_SEND_TIMEOUT * client.sending.len) + ASSET_CACHE_SEND_TIMEOUT
while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic()
stoplag(1) // Lock up the caller until this is received.
t++
if(client)
client.sending -= asset_name
client.cache |= asset_name
client.completed_asset_jobs -= job
return 1
//This proc blocks(sleeps) unless verify is set to false
/proc/send_asset_list(client/client, list/asset_list, verify = TRUE)
if(!istype(client))
if(ismob(client))
var/mob/M = client
if(M.client)
client = M.client
else
return 0
else
return 0
var/list/unreceived = asset_list - (client.cache + client.sending)
if(!unreceived || !unreceived.len)
return 0
if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT)
to_chat(client, "Sending Resources...")
for(var/asset in unreceived)
if (asset in SSassets.cache)
client << browse_rsc(SSassets.cache[asset], asset)
if(!verify) // Can't access the asset cache browser, rip.
client.cache += unreceived
return 1
client.sending |= unreceived
var/job = ++client.last_asset_job
client << browse({"
<script>
window.location.href="?asset_cache_confirm_arrival=[job]"
</script>
"}, "window=asset_cache_browser")
var/t = 0
var/timeout_time = ASSET_CACHE_SEND_TIMEOUT * client.sending.len
while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic()
stoplag(1) // Lock up the caller until this is received.
t++
if(client)
client.sending -= unreceived
client.cache |= unreceived
client.completed_asset_jobs -= job
return 1
//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start.
//The proc calls procs that sleep for long times.
/proc/getFilesSlow(client/client, list/files, register_asset = TRUE)
var/concurrent_tracker = 1
for(var/file in files)
if (!client)
break
if (register_asset)
register_asset(file, files[file])
if (concurrent_tracker >= ASSET_CACHE_PRELOAD_CONCURRENT)
concurrent_tracker = 1
send_asset(client, file)
else
concurrent_tracker++
send_asset(client, file, verify=FALSE)
stoplag(0) //queuing calls like this too quickly can cause issues in some client versions
//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up.
//if it's an icon or something be careful, you'll have to copy it before further use.
/proc/register_asset(asset_name, asset)
SSassets.cache[asset_name] = asset
//Generated names do not include file extention.
//Used mainly for code that deals with assets in a generic way
//The same asset will always lead to the same asset name
/proc/generate_asset_name(file)
return "asset.[md5(fcopy_rsc(file))]"
//These datums are used to populate the asset cache, the proc "register()" does this.
//all of our asset datums, used for referring to these later
GLOBAL_LIST_EMPTY(asset_datums)
//get an assetdatum or make a new one
/proc/get_asset_datum(type)
return GLOB.asset_datums[type] || new type()
/datum/asset
var/_abstract = /datum/asset
/datum/asset/New()
GLOB.asset_datums[type] = src
register()
/datum/asset/proc/register()
return
/datum/asset/proc/send(client)
return
//If you don't need anything complicated.
/datum/asset/simple
_abstract = /datum/asset/simple
var/assets = list()
var/verify = FALSE
/datum/asset/simple/register()
for(var/asset_name in assets)
register_asset(asset_name, assets[asset_name])
/datum/asset/simple/send(client)
send_asset_list(client,assets,verify)
// For registering or sending multiple others at once
/datum/asset/group
_abstract = /datum/asset/group
var/list/children
/datum/asset/group/register()
for(var/type in children)
get_asset_datum(type)
/datum/asset/group/send(client/C)
for(var/type in children)
var/datum/asset/A = get_asset_datum(type)
A.send(C)
// spritesheet implementation - coalesces various icons into a single .png file
// and uses CSS to select icons out of that file - saves on transferring some
// 1400-odd individual PNG files
#define SPR_SIZE 1
#define SPR_IDX 2
#define SPRSZ_COUNT 1
#define SPRSZ_ICON 2
#define SPRSZ_STRIPPED 3
/datum/asset/spritesheet
_abstract = /datum/asset/spritesheet
var/name
var/list/sizes = list() // "32x32" -> list(10, icon/normal, icon/stripped)
var/list/sprites = list() // "foo_bar" -> list("32x32", 5)
var/verify = FALSE
/datum/asset/spritesheet/register()
if (!name)
CRASH("spritesheet [type] cannot register without a name")
ensure_stripped()
var/res_name = "spritesheet_[name].css"
var/fname = "data/spritesheets/[res_name]"
fdel(fname)
text2file(generate_css(), fname)
register_asset(res_name, fcopy_rsc(fname))
fdel(fname)
for(var/size_id in sizes)
var/size = sizes[size_id]
register_asset("[name]_[size_id].png", size[SPRSZ_STRIPPED])
/datum/asset/spritesheet/send(client/C)
if (!name)
return
var/all = list("spritesheet_[name].css")
for(var/size_id in sizes)
all += "[name]_[size_id].png"
send_asset_list(C, all, verify)
/datum/asset/spritesheet/proc/ensure_stripped(sizes_to_strip = sizes)
for(var/size_id in sizes_to_strip)
var/size = sizes[size_id]
if (size[SPRSZ_STRIPPED])
continue
// save flattened version
var/fname = "data/spritesheets/[name]_[size_id].png"
fcopy(size[SPRSZ_ICON], fname)
var/error = rustg_dmi_strip_metadata(fname)
if(length(error))
stack_trace("Failed to strip [name]_[size_id].png: [error]")
size[SPRSZ_STRIPPED] = icon(fname)
fdel(fname)
/datum/asset/spritesheet/proc/generate_css()
var/list/out = list()
for (var/size_id in sizes)
var/size = sizes[size_id]
var/icon/tiny = size[SPRSZ_ICON]
out += ".[name][size_id]{display:inline-block;width:[tiny.Width()]px;height:[tiny.Height()]px;background:url('[name]_[size_id].png') no-repeat;}"
for (var/sprite_id in sprites)
var/sprite = sprites[sprite_id]
var/size_id = sprite[SPR_SIZE]
var/idx = sprite[SPR_IDX]
var/size = sizes[size_id]
var/icon/tiny = size[SPRSZ_ICON]
var/icon/big = size[SPRSZ_STRIPPED]
var/per_line = big.Width() / tiny.Width()
var/x = (idx % per_line) * tiny.Width()
var/y = round(idx / per_line) * tiny.Height()
out += ".[name][size_id].[sprite_id]{background-position:-[x]px -[y]px;}"
return out.Join("\n")
/datum/asset/spritesheet/proc/Insert(sprite_name, icon/I, icon_state="", dir=SOUTH, frame=1, moving=FALSE)
I = icon(I, icon_state=icon_state, dir=dir, frame=frame, moving=moving)
if (!I || !length(icon_states(I))) // that direction or state doesn't exist
return
var/size_id = "[I.Width()]x[I.Height()]"
var/size = sizes[size_id]
if (sprites[sprite_name])
CRASH("duplicate sprite \"[sprite_name]\" in sheet [name] ([type])")
if (size)
var/position = size[SPRSZ_COUNT]++
var/icon/sheet = size[SPRSZ_ICON]
size[SPRSZ_STRIPPED] = null
sheet.Insert(I, icon_state=sprite_name)
sprites[sprite_name] = list(size_id, position)
else
sizes[size_id] = size = list(1, I, null)
sprites[sprite_name] = list(size_id, 0)
/datum/asset/spritesheet/proc/InsertAll(prefix, icon/I, list/directions)
if (length(prefix))
prefix = "[prefix]-"
if (!directions)
directions = list(SOUTH)
for (var/icon_state_name in icon_states(I))
for (var/direction in directions)
var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]-" : ""
Insert("[prefix][prefix2][icon_state_name]", I, icon_state=icon_state_name, dir=direction)
/datum/asset/spritesheet/proc/css_tag()
return {"<link rel="stylesheet" href="spritesheet_[name].css" />"}
/datum/asset/spritesheet/proc/icon_tag(sprite_name)
var/sprite = sprites[sprite_name]
if (!sprite)
return null
var/size_id = sprite[SPR_SIZE]
return {"<span class="[name][size_id] [sprite_name]"></span>"}
/datum/asset/spritesheet/proc/icon_class_name(sprite_name)
var/sprite = sprites[sprite_name]
if (!sprite)
return null
var/size_id = sprite[SPR_SIZE]
return {"[name][size_id] [sprite_name]"}
#undef SPR_SIZE
#undef SPR_IDX
#undef SPRSZ_COUNT
#undef SPRSZ_ICON
#undef SPRSZ_STRIPPED
/datum/asset/spritesheet/simple
_abstract = /datum/asset/spritesheet/simple
var/list/assets
/datum/asset/spritesheet/simple/register()
for (var/key in assets)
Insert(key, assets[key])
..()
//Generates assets based on iconstates of a single icon
/datum/asset/simple/icon_states
_abstract = /datum/asset/simple/icon_states
var/icon
var/list/directions = list(SOUTH)
var/frame = 1
var/movement_states = FALSE
var/prefix = "default" //asset_name = "[prefix].[icon_state_name].png"
var/generic_icon_names = FALSE //generate icon filenames using generate_asset_name() instead the above format
verify = FALSE
/datum/asset/simple/icon_states/register(_icon = icon)
for(var/icon_state_name in icon_states(_icon))
for(var/direction in directions)
var/asset = icon(_icon, icon_state_name, direction, frame, movement_states)
if (!asset)
continue
asset = fcopy_rsc(asset) //dedupe
var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]." : ""
var/asset_name = sanitize_filename("[prefix].[prefix2][icon_state_name].png")
if (generic_icon_names)
asset_name = "[generate_asset_name(asset)].png"
register_asset(asset_name, asset)
/datum/asset/simple/icon_states/multiple_icons
_abstract = /datum/asset/simple/icon_states/multiple_icons
var/list/icons
/datum/asset/simple/icon_states/multiple_icons/register()
for(var/i in icons)
..(i)
//DEFINITIONS FOR ASSET DATUMS START HERE.
/* uncomment this and delete the tgui def bellow this for the new tgui
/datum/asset/simple/tgui
assets = list(
// tgui
"tgui.bundle.js" = 'tgui/packages/tgui/public/tgui.bundle.js',
"tgui.bundle.css" = 'tgui/packages/tgui/public/tgui.bundle.css',
)
*/
/datum/asset/simple/tgui
assets = list(
// Old TGUI
"tgui.css" = 'tgui/assets/tgui.css',
"tgui.js" = 'tgui/assets/tgui.js',
// tgui-next
"tgui-main.html" = 'tgui-next/packages/tgui/public/tgui-main.html',
"tgui-fallback.html" = 'tgui-next/packages/tgui/public/tgui-fallback.html',
"tgui.bundle.js" = 'tgui-next/packages/tgui/public/tgui.bundle.js',
"tgui.bundle.css" = 'tgui-next/packages/tgui/public/tgui.bundle.css',
// Old TGUI compatability
"tgui-fallback.html" = 'tgui-next/packages/tgui/public/tgui-fallback.html',
"shim-html5shiv.js" = 'tgui-next/packages/tgui/public/shim-html5shiv.js',
"shim-ie8.js" = 'tgui-next/packages/tgui/public/shim-ie8.js',
"shim-dom4.js" = 'tgui-next/packages/tgui/public/shim-dom4.js',
@@ -434,8 +57,16 @@ GLOBAL_LIST_EMPTY(asset_datums)
"smmon_4.gif" = 'icons/program_icons/smmon_4.gif',
"smmon_5.gif" = 'icons/program_icons/smmon_5.gif',
"smmon_6.gif" = 'icons/program_icons/smmon_6.gif'
//"borg_mon.gif" = 'icons/program_icons/borg_mon.gif'
)
/* uncomment if you're porting the new ntnet app
/datum/asset/simple/radar_assets
assets = list(
"ntosradarbackground.png" = 'icons/UI_Icons/tgui/ntosradar_background.png',
"ntosradarpointer.png" = 'icons/UI_Icons/tgui/ntosradar_pointer.png',
"ntosradarpointerS.png" = 'icons/UI_Icons/tgui/ntosradar_pointer_S.png'
)
*/
/datum/asset/spritesheet/simple/pda
name = "pda"
assets = list(
@@ -464,6 +95,7 @@ GLOBAL_LIST_EMPTY(asset_datums)
"refresh" = 'icons/pda_icons/pda_refresh.png',
"scanner" = 'icons/pda_icons/pda_scanner.png',
"signaler" = 'icons/pda_icons/pda_signaler.png',
//"skills" = 'icons/pda_icons/pda_skills.png',
"status" = 'icons/pda_icons/pda_status.png',
"dronephone" = 'icons/pda_icons/pda_dronephone.png'
)
@@ -482,51 +114,10 @@ GLOBAL_LIST_EMPTY(asset_datums)
"stamp-cap" = 'icons/stamp_icons/large_stamp-cap.png',
"stamp-qm" = 'icons/stamp_icons/large_stamp-qm.png',
"stamp-law" = 'icons/stamp_icons/large_stamp-law.png'
)
/datum/asset/spritesheet/simple/minesweeper
name = "minesweeper"
assets = list(
"1" = 'icons/UI_Icons/minesweeper_tiles/one.png',
"2" = 'icons/UI_Icons/minesweeper_tiles/two.png',
"3" = 'icons/UI_Icons/minesweeper_tiles/three.png',
"4" = 'icons/UI_Icons/minesweeper_tiles/four.png',
"5" = 'icons/UI_Icons/minesweeper_tiles/five.png',
"6" = 'icons/UI_Icons/minesweeper_tiles/six.png',
"7" = 'icons/UI_Icons/minesweeper_tiles/seven.png',
"8" = 'icons/UI_Icons/minesweeper_tiles/eight.png',
"empty" = 'icons/UI_Icons/minesweeper_tiles/empty.png',
"flag" = 'icons/UI_Icons/minesweeper_tiles/flag.png',
"hidden" = 'icons/UI_Icons/minesweeper_tiles/hidden.png',
"mine" = 'icons/UI_Icons/minesweeper_tiles/mine.png',
"minehit" = 'icons/UI_Icons/minesweeper_tiles/minehit.png'
)
/datum/asset/spritesheet/simple/pills
name = "pills"
assets = list(
"pill1" = 'icons/UI_Icons/Pills/pill1.png',
"pill2" = 'icons/UI_Icons/Pills/pill2.png',
"pill3" = 'icons/UI_Icons/Pills/pill3.png',
"pill4" = 'icons/UI_Icons/Pills/pill4.png',
"pill5" = 'icons/UI_Icons/Pills/pill5.png',
"pill6" = 'icons/UI_Icons/Pills/pill6.png',
"pill7" = 'icons/UI_Icons/Pills/pill7.png',
"pill8" = 'icons/UI_Icons/Pills/pill8.png',
"pill9" = 'icons/UI_Icons/Pills/pill9.png',
"pill10" = 'icons/UI_Icons/Pills/pill10.png',
"pill11" = 'icons/UI_Icons/Pills/pill11.png',
"pill12" = 'icons/UI_Icons/Pills/pill12.png',
"pill13" = 'icons/UI_Icons/Pills/pill13.png',
"pill14" = 'icons/UI_Icons/Pills/pill14.png',
"pill15" = 'icons/UI_Icons/Pills/pill15.png',
"pill16" = 'icons/UI_Icons/Pills/pill16.png',
"pill17" = 'icons/UI_Icons/Pills/pill17.png',
"pill18" = 'icons/UI_Icons/Pills/pill18.png',
"pill19" = 'icons/UI_Icons/Pills/pill19.png',
"pill20" = 'icons/UI_Icons/Pills/pill20.png',
"pill21" = 'icons/UI_Icons/Pills/pill21.png',
"pill22" = 'icons/UI_Icons/Pills/pill22.png',
//"stamp-chap" = 'icons/stamp_icons/large_stamp-chap.png',
//"stamp-mime" = 'icons/stamp_icons/large_stamp-mime.png',
//"stamp-centcom" = 'icons/stamp_icons/large_stamp-centcom.png',
//"stamp-syndicate" = 'icons/stamp_icons/large_stamp-syndicate.png'
)
/datum/asset/simple/IRV
@@ -572,23 +163,20 @@ GLOBAL_LIST_EMPTY(asset_datums)
)
/datum/asset/simple/jquery
verify = FALSE
assets = list(
"jquery.min.js" = 'code/modules/goonchat/browserassets/js/jquery.min.js',
)
/datum/asset/simple/goonchat
verify = FALSE
assets = list(
"json2.min.js" = 'code/modules/goonchat/browserassets/js/json2.min.js',
"browserOutput.js" = 'code/modules/goonchat/browserassets/js/browserOutput.js',
"browserOutput.css" = 'code/modules/goonchat/browserassets/css/browserOutput.css',
"browserOutput_dark.css" = 'code/modules/goonchat/browserassets/css/browserOutput_dark.css',
"browserOutput_dark.css" = 'code/modules/goonchat/browserassets/css/browserOutput_dark.css', //dark theme, cit specific
"browserOutput_light.css" = 'code/modules/goonchat/browserassets/css/browserOutput_light.css'
)
/datum/asset/simple/fontawesome
verify = FALSE
assets = list(
"fa-regular-400.eot" = 'html/font-awesome/webfonts/fa-regular-400.eot',
"fa-regular-400.woff" = 'html/font-awesome/webfonts/fa-regular-400.woff',
@@ -629,6 +217,90 @@ GLOBAL_LIST_EMPTY(asset_datums)
"none_button.png" = 'html/none_button.png',
)
/datum/asset/spritesheet/simple/minesweeper
name = "minesweeper"
assets = list(
"1" = 'icons/UI_Icons/minesweeper_tiles/one.png',
"2" = 'icons/UI_Icons/minesweeper_tiles/two.png',
"3" = 'icons/UI_Icons/minesweeper_tiles/three.png',
"4" = 'icons/UI_Icons/minesweeper_tiles/four.png',
"5" = 'icons/UI_Icons/minesweeper_tiles/five.png',
"6" = 'icons/UI_Icons/minesweeper_tiles/six.png',
"7" = 'icons/UI_Icons/minesweeper_tiles/seven.png',
"8" = 'icons/UI_Icons/minesweeper_tiles/eight.png',
"empty" = 'icons/UI_Icons/minesweeper_tiles/empty.png',
"flag" = 'icons/UI_Icons/minesweeper_tiles/flag.png',
"hidden" = 'icons/UI_Icons/minesweeper_tiles/hidden.png',
"mine" = 'icons/UI_Icons/minesweeper_tiles/mine.png',
"minehit" = 'icons/UI_Icons/minesweeper_tiles/minehit.png'
)
/* Port the app game thing
/datum/asset/simple/arcade
assets = list(
"boss1.gif" = 'icons/UI_Icons/Arcade/boss1.gif',
"boss2.gif" = 'icons/UI_Icons/Arcade/boss2.gif',
"boss3.gif" = 'icons/UI_Icons/Arcade/boss3.gif',
"boss4.gif" = 'icons/UI_Icons/Arcade/boss4.gif',
"boss5.gif" = 'icons/UI_Icons/Arcade/boss5.gif',
"boss6.gif" = 'icons/UI_Icons/Arcade/boss6.gif',
)
*/
/*
/datum/asset/spritesheet/simple/achievements
name ="achievements"
assets = list(
"default" = 'icons/UI_Icons/Achievements/default.png',
"basemisc" = 'icons/UI_Icons/Achievements/basemisc.png',
"baseboss" = 'icons/UI_Icons/Achievements/baseboss.png',
"baseskill" = 'icons/UI_Icons/Achievements/baseskill.png',
"bbgum" = 'icons/UI_Icons/Achievements/Boss/bbgum.png',
"colossus" = 'icons/UI_Icons/Achievements/Boss/colossus.png',
"hierophant" = 'icons/UI_Icons/Achievements/Boss/hierophant.png',
"legion" = 'icons/UI_Icons/Achievements/Boss/legion.png',
"miner" = 'icons/UI_Icons/Achievements/Boss/miner.png',
"swarmer" = 'icons/UI_Icons/Achievements/Boss/swarmer.png',
"tendril" = 'icons/UI_Icons/Achievements/Boss/tendril.png',
"featofstrength" = 'icons/UI_Icons/Achievements/Misc/featofstrength.png',
"helbital" = 'icons/UI_Icons/Achievements/Misc/helbital.png',
"jackpot" = 'icons/UI_Icons/Achievements/Misc/jackpot.png',
"meteors" = 'icons/UI_Icons/Achievements/Misc/meteors.png',
"timewaste" = 'icons/UI_Icons/Achievements/Misc/timewaste.png',
"upgrade" = 'icons/UI_Icons/Achievements/Misc/upgrade.png',
"clownking" = 'icons/UI_Icons/Achievements/Misc/clownking.png',
"clownthanks" = 'icons/UI_Icons/Achievements/Misc/clownthanks.png',
"rule8" = 'icons/UI_Icons/Achievements/Misc/rule8.png',
"snail" = 'icons/UI_Icons/Achievements/Misc/snail.png',
"mining" = 'icons/UI_Icons/Achievements/Skills/mining.png',
)
*/
/datum/asset/spritesheet/simple/pills
name ="pills"
assets = list(
"pill1" = 'icons/UI_Icons/Pills/pill1.png',
"pill2" = 'icons/UI_Icons/Pills/pill2.png',
"pill3" = 'icons/UI_Icons/Pills/pill3.png',
"pill4" = 'icons/UI_Icons/Pills/pill4.png',
"pill5" = 'icons/UI_Icons/Pills/pill5.png',
"pill6" = 'icons/UI_Icons/Pills/pill6.png',
"pill7" = 'icons/UI_Icons/Pills/pill7.png',
"pill8" = 'icons/UI_Icons/Pills/pill8.png',
"pill9" = 'icons/UI_Icons/Pills/pill9.png',
"pill10" = 'icons/UI_Icons/Pills/pill10.png',
"pill11" = 'icons/UI_Icons/Pills/pill11.png',
"pill12" = 'icons/UI_Icons/Pills/pill12.png',
"pill13" = 'icons/UI_Icons/Pills/pill13.png',
"pill14" = 'icons/UI_Icons/Pills/pill14.png',
"pill15" = 'icons/UI_Icons/Pills/pill15.png',
"pill16" = 'icons/UI_Icons/Pills/pill16.png',
"pill17" = 'icons/UI_Icons/Pills/pill17.png',
"pill18" = 'icons/UI_Icons/Pills/pill18.png',
"pill19" = 'icons/UI_Icons/Pills/pill19.png',
"pill20" = 'icons/UI_Icons/Pills/pill20.png',
"pill21" = 'icons/UI_Icons/Pills/pill21.png',
"pill22" = 'icons/UI_Icons/Pills/pill22.png',
)
//this exists purely to avoid meta by pre-loading all language icons.
/datum/asset/language/register()
for(var/path in typesof(/datum/language))
@@ -639,7 +311,7 @@ GLOBAL_LIST_EMPTY(asset_datums)
/datum/asset/spritesheet/pipes
name = "pipes"
/datum/asset/spritesheet/pipes/register()
/datum/asset/spritesheet/pipes/register() //we do not have chempipes
for (var/each in list('icons/obj/atmospherics/pipes/pipe_item.dmi', 'icons/obj/atmospherics/pipes/disposal.dmi', 'icons/obj/atmospherics/pipes/transit_tube.dmi'))
InsertAll("", each, GLOB.alldirs)
..()
@@ -649,7 +321,7 @@ GLOBAL_LIST_EMPTY(asset_datums)
name = "design"
/datum/asset/spritesheet/research_designs/register()
for (var/path in subtypesof(/datum/design))
for(var/path in subtypesof(/datum/design))
var/datum/design/D = path
var/icon_file
@@ -0,0 +1,28 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
</head>
<body>
<script>
//this is used over window.location because window.location has a character limit in IE.
function sendbyond(text) {
var xhr = new XMLHttpRequest();
xhr.open('GET', '?'+text, true);
xhr.send(null);
}
var xhr = new XMLHttpRequest();
xhr.open('GET', 'asset_data.json', true);
xhr.responseType = 'text';
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
var status = xhr.status;
if (status >= 200 && status < 400) {
sendbyond('asset_cache_preload_data=' + encodeURIComponent(xhr.responseText));
}
}
};
xhr.send(null);
</script>
</body>
</html>
@@ -0,0 +1,23 @@
//areas
//The stargate map is always fully powered because of "muh advanced alien tech". this may be changed in the future
/area/awaymission/stargate
name = "Alien desert"
icon_state = "awaycontent31"
requires_power = FALSE
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/awaymission/stargate/building
name = "Ancient buildings"
icon_state = "awaycontent32"
requires_power = FALSE
/area/awaymission/stargate/building/mountain
name = "Montain desert"
icon_state = "awaycontent33"
requires_power = FALSE
/area/awaymission/stargate/building/flesh
name = "The Flesh"
icon_state = "awaycontent34"
requires_power = FALSE
+1
View File
@@ -162,6 +162,7 @@
else
SSshuttle.shuttle_loan.loan_shuttle()
say("The supply shuttle has been loaned to CentCom.")
log_game("[key_name(usr)] accepted a shuttle loan event.")
. = TRUE
if("add")
var/id = text2path(params["id"])
+2 -1
View File
@@ -225,7 +225,8 @@
contains = list(/obj/item/survivalcapsule/reactor,
/obj/machinery/computer/reactor/control_rods/cargo,
/obj/machinery/computer/reactor/stats/cargo,
/obj/machinery/computer/reactor/fuel_rods/cargo)
/obj/machinery/computer/reactor/fuel_rods/cargo,
/obj/item/paper/fluff/rbmkcargo)
crate_name = "Build Your Own Reactor Kit"
crate_type = /obj/structure/closet/crate/secure/engineering
dangerous = TRUE
+8
View File
@@ -94,3 +94,11 @@
/// Messages currently seen by this client
var/list/seen_messages
// List of all asset filenames sent to this client by the asset cache, along with their assoicated md5s
var/list/sent_assets = list()
/// List of all completed blocking send jobs awaiting acknowledgement by send_asset
var/list/completed_asset_jobs = list()
/// Last asset send job id.
var/last_asset_job = 0
var/last_completed_asset_job = 0
+31 -22
View File
@@ -36,29 +36,11 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null
return
// asset_cache
var/asset_cache_job
if(href_list["asset_cache_confirm_arrival"])
var/job = text2num(href_list["asset_cache_confirm_arrival"])
//because we skip the limiter, we have to make sure this is a valid arrival and not somebody tricking us
// into letting append to a list without limit.
if (job && job <= last_asset_job && !(job in completed_asset_jobs))
completed_asset_jobs += job
asset_cache_job = asset_cache_confirm_arrival(href_list["asset_cache_confirm_arrival"])
if (!asset_cache_job)
return
else if (job in completed_asset_jobs) //byond bug ID:2256651
to_chat(src, "<span class='danger'>An error has been detected in how your client is receiving resources. Attempting to correct.... (If you keep seeing these messages you might want to close byond and reconnect)</span>")
src << browse("...", "window=asset_cache_browser")
// Keypress passthrough
if(href_list["__keydown"])
var/keycode = browser_keycode_to_byond(href_list["__keydown"])
if(keycode)
keyDown(keycode)
return
if(href_list["__keyup"])
var/keycode = browser_keycode_to_byond(href_list["__keyup"])
if(keycode)
keyUp(keycode)
return
var/mtl = CONFIG_GET(number/minute_topic_limit)
if (!holder && mtl)
@@ -75,7 +57,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
topiclimiter[ADMINSWARNED_AT] = minute
msg += " Administrators have been informed."
log_game("[key_name(src)] Has hit the per-minute topic limit of [mtl] topic calls in a given game minute")
message_admins("[ADMIN_LOOKUPFLW(src)] [ADMIN_KICK(usr)] Has hit the per-minute topic limit of [mtl] topic calls in a given game minute")
message_admins("[ADMIN_LOOKUPFLW(usr)] [ADMIN_KICK(usr)] Has hit the per-minute topic limit of [mtl] topic calls in a given game minute")
to_chat(src, "<span class='danger'>[msg]</span>")
return
@@ -96,6 +78,27 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
if(!(href_list["_src_"] == "chat" && href_list["proc"] == "ping" && LAZYLEN(href_list) == 2))
log_href("[src] (usr:[usr]\[[COORD(usr)]\]) : [hsrc ? "[hsrc] " : ""][href]")
//byond bug ID:2256651
if (asset_cache_job && (asset_cache_job in completed_asset_jobs))
to_chat(src, "<span class='danger'>An error has been detected in how your client is receiving resources. Attempting to correct.... (If you keep seeing these messages you might want to close byond and reconnect)</span>")
src << browse("...", "window=asset_cache_browser")
return
if (href_list["asset_cache_preload_data"])
asset_cache_preload_data(href_list["asset_cache_preload_data"])
return
// Keypress passthrough
if(href_list["__keydown"])
var/keycode = browser_keycode_to_byond(href_list["__keydown"])
if(keycode)
keyDown(keycode)
return
if(href_list["__keyup"])
var/keycode = browser_keycode_to_byond(href_list["__keyup"])
if(keycode)
keyUp(keycode)
return
// Admin PM
if(href_list["priv_msg"])
cmd_admin_pm(href_list["priv_msg"],null)
@@ -830,8 +833,14 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
'html/browser/playeroptions.css',
)
spawn (10) //removing this spawn causes all clients to not get verbs.
//load info on what assets the client has
src << browse('code/modules/asset_cache/validate_assets.html', "window=asset_cache_browser")
//Precache the client with all other assets slowly, so as to not block other browse() calls
getFilesSlow(src, SSassets.preload, register_asset = FALSE)
addtimer(CALLBACK(GLOBAL_PROC, /proc/getFilesSlow, src, SSassets.preload, FALSE), 5 SECONDS)
#if (PRELOAD_RSC == 0)
for (var/name in GLOB.vox_sounds)
var/file = GLOB.vox_sounds[name]
+12
View File
@@ -0,0 +1,12 @@
/client/verb/show_station_minimap()
set category = "OOC"
set name = "Show Station Minimap"
set desc = "Shows a minimap of the currently loaded station map."
if(!CONFIG_GET(flag/minimaps_enabled))
to_chat(usr, "<span class='boldwarning'>Minimap generation is not enabled in the server's configuration.</span>")
return
if(!SSminimaps.station_minimap)
to_chat(usr, "<span class='boldwarning'>Minimap generation is in progress, please wait!</span>")
return
SSminimaps.station_minimap.show(src)
@@ -408,16 +408,12 @@ Contains:
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor/miner
name = "inquisitor's hardsuit"
icon_state = "hardsuit-inq"
item_state = "hardsuit-inq"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor/miner
armor = list("melee" = 70, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80)
slowdown = 1
/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor/miner
name = "inquisitor's helmet"
icon_state = "hardsuit0-inq"
item_state = "hardsuit0-inq"
armor = list("melee" = 70, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80)
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker/miner
+1 -1
View File
@@ -63,7 +63,7 @@
else
D = new virus_type()
else
D = new /datum/disease/advance/random(max_severity, max_severity)
D = new /datum/disease/advance/random(TRUE, max_severity, max_severity)
D.carrier = TRUE
H.ForceContractDisease(D, FALSE, TRUE)
+2 -2
View File
@@ -53,8 +53,8 @@
/datum/reagent/carpet,
/datum/reagent/firefighting_foam,
/datum/reagent/consumable/tearjuice,
/datum/reagent/medicine/strange_reagent
/datum/reagent/medicine/strange_reagent,
/datum/reagent/medicine/copium
)
//needs to be chemid unit checked at some point
+1 -1
View File
@@ -138,7 +138,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
Show()
/obj/effect/hallucination/simple/Destroy()
if(target.client)
if(target && target.client)
target.client.images.Remove(current_image)
active = FALSE
return ..()
@@ -191,7 +191,7 @@
desc = "A synthetic chunk of meat."
icon_state = "meatproduct" //growing meat will make it look like a lumpo
foodtype = RAW | MEAT //hurr durr chemicals we're harmed in the production of this meat thus its non-vegan.
cooked_type = /obj/item/reagent_containers/food/snacks/meat/steak/meatproduct
cooked_type = /obj/item/reagent_containers/food/snacks/meat/steak/plain/meatproduct
/obj/item/reagent_containers/food/snacks/meat/slab/meatproduct
name = "meat product"
@@ -280,7 +280,7 @@
bitesize = 4
tastes = list("meat" = 1, "wheat" = 1)
foodtype = GRAIN
cooked_type = /obj/item/reagent_containers/food/snacks/meat/steak/meatproduct
cooked_type = /obj/item/reagent_containers/food/snacks/meat/steak/plain/meatproduct
/obj/item/reagent_containers/food/snacks/meat/slab/gorilla
name = "gorilla meat"
@@ -340,7 +340,7 @@
/obj/item/reagent_containers/food/snacks/meat/steak/plain
foodtype = MEAT
/obj/item/reagent_containers/food/snacks/meat/steak/meatproduct
/obj/item/reagent_containers/food/snacks/meat/steak/plain/meatproduct
foodtype = MEAT
icon_state = "meatproduct_steak"
@@ -497,4 +497,4 @@
/obj/item/reagent_containers/food/snacks/meat/cutlet/chicken
name = "chicken cutlet"
tastes = list("chicken" = 1)
icon_state = "bird_cutlet_cooked"
icon_state = "bird_cutlet_cooked"
@@ -46,7 +46,8 @@ God bless America.
/obj/item/reagent_containers/syringe,
/obj/item/reagent_containers/food/condiment,
/obj/item/storage/part_replacer,
/obj/item/his_grace))
/obj/item/his_grace,
/obj/item/portallight))
var/datum/looping_sound/deep_fryer/fry_loop
/obj/machinery/deepfryer/Initialize()
+22
View File
@@ -0,0 +1,22 @@
/// A deck of unum cards. Classic.
/obj/item/toy/cards/deck/unum
name = "\improper UNUM deck"
desc = "A deck of unum cards. House rules to argue over not included."
icon = 'icons/obj/toy.dmi'
icon_state = "deck_unum_full"
deckstyle = "unum"
original_size = 108
//Populate the deck.
/obj/item/toy/cards/deck/unum/populate_deck()
for(var/colour in list("Red","Yellow","Green","Blue"))
cards += "[colour] 0" //Uno, i mean, cough cough, Unum decks have only one colour of each 0, weird huh?
for(var/k in 0 to 1) //two of each colour of number
cards += "[colour] skip"
cards += "[colour] reverse"
cards += "[colour] draw 2"
for(var/i in 1 to 9)
cards += "[colour] [i]"
for(var/k in 0 to 3) //4 wilds and draw 4s
cards += "Wildcard"
cards += "Draw 4"
+188
View File
@@ -0,0 +1,188 @@
/datum/minimap
var/name = "minimap"
var/icon/overlay_icon
// The map icons
var/icon/map_icon
var/icon/meta_icon
var/list/color_area_names = list()
var/minx
var/maxx
var/miny
var/maxy
var/z_level
var/id = ""
/datum/minimap/New(z, x1 = 1, y1 = 1, x2 = world.maxx, y2 = world.maxy, name = "minimap")
if(!z)
CRASH("ERROR: new minimap requested without z level") //CRASH to halt the operatio
src.name = name
z_level = z
id = "[md5("[z_level]" + src.name + REF(src))]" //use it's own md5 as a special identifier
var/crop_x1 = x2
var/crop_x2 = x1
var/crop_y1 = y2
var/crop_y2 = y1
// do the generating
map_icon = new('html/blank.png')
meta_icon = new('html/blank.png')
map_icon.Scale(x2 - x1 + 1, y2 - y1 + 1) // arrays start at 1
meta_icon.Scale(x2 - x1 + 1, y2 - y1 + 1)
var/list/area_to_color = list()
for(var/turf/T in block(locate(x1, y1, z_level), locate(x2, y2, z_level)))
var/area/A = T.loc
var/img_x = T.x - x1 + 1 // arrays start at 1
var/img_y = T.y - y1 + 1
if(!istype(A, /area/space) || istype(T, /turf/closed/wall))
crop_x1 = min(crop_x1, T.x)
crop_x2 = max(crop_x2, T.x)
crop_y1 = min(crop_y1, T.y)
crop_y2 = max(crop_y2, T.y)
var/meta_color = area_to_color[A]
if(!meta_color)
meta_color = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) // technically conflicts could happen but it's like very unlikely and it's not that big of a deal if one happens
area_to_color[A] = meta_color
color_area_names[meta_color] = A.name
meta_icon.DrawBox(meta_color, img_x, img_y)
if(istype(T, /turf/closed/wall))
map_icon.DrawBox("#000000", img_x, img_y)
else if(!istype(A, /area/space))
var/color = A.minimap_color || "#FF00FF"
if(locate(/obj/machinery/power/solar) in T)
color = "#02026a"
if((locate(/obj/effect/spawner/structure/window) in T) || (locate(/obj/structure/grille) in T))
color = BlendRGB(color, "#000000", 0.5)
map_icon.DrawBox(color, img_x, img_y)
map_icon.Crop(crop_x1, crop_y1, crop_x2, crop_y2)
meta_icon.Crop(crop_x1, crop_y1, crop_x2, crop_y2)
minx = crop_x1
maxx = crop_x2
miny = crop_y1
maxy = crop_y2
overlay_icon = new(map_icon)
overlay_icon.Scale(16, 16)
//we're done baking, now we ship it.
register_asset("minimap-[id].png", map_icon)
register_asset("minimap-[id]-meta.png", meta_icon)
/datum/minimap/proc/send(mob/user)
if(!id)
CRASH("ERROR: send called, but the minimap id is null/missing. ID: [id]")
send_asset_list(user, list("minimap-[id].png" = map_icon, "minimap-[id]-meta.png" = meta_icon))
/datum/minimap_group
var/list/minimaps = list()
var/static/next_id = 0
var/id
var/name
/datum/minimap_group/New(list/maps, name)
id = ++next_id
src.name = name
if(maps)
minimaps = maps
/datum/minimap_group/proc/show(mob/user)
if(!length(minimaps))
to_chat(user, "<span class='boldwarning'>ERROR: Attempted to access an empty datum/minimap_group. This should probably not happen.</span>")
return
var/list/datas = list()
var/list/info = list()
for(var/i in 1 to length(minimaps))// OLD: for(var/i in 1 to length(minimaps))
var/datum/minimap/M = minimaps[i]
M.send(user)
info += {"
<div class="block">
<div> <!-- The div is in here to fit it both in the block div -->
<img id='map-[i]' src='minimap-[M.id].png' />
<img id='map-[i]-meta' src='minimap-[M.id]-meta.png' style='display: none' />
</div>
<div class="statusDisplay" id='label-[i]'></div>
</div>
"}
datas += json_encode(M.color_area_names);
info = info.Join()
//this is bad. Too bad!
var/headerJS = {"
<script>
function hexify(num) {
if(!num){
num = 0;
}
num = num.toString(16);
if(num.length == 1){
num = "0" + num;
}
return num;
}
window.onload = function() {
var datas = \[[jointext(datas, ",")]]
if(!window.HTMLCanvasElement){
//something has gone horribly wrong!
return false
}
for(var i = 0; i < [length(minimaps)]; i++){
//the fuck is this wrapped?
var data = datas\[i];
var img = document.getElementById("map-" + (i + 1));
if(!img){
return; //if it does not exist, it means it's done!
}
var canvas = document.createElement("canvas");
canvas.width = img.width * 2;
canvas.height = img.height * 2;
var ctx = canvas.getContext('2d');
ctx.msImageSmoothingEnabled = false;
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
img.parentNode.replaceChild(canvas, img);
ctx = document.createElement("canvas").getContext('2d');
ctx.canvas.width = img.width;
ctx.canvas.height = img.height;
ctx.drawImage(document.getElementById("map-" + (i+1) + "-meta"), 0, 0);
var imagedata = ctx.getImageData(0, 0, img.width, img.height);
var label = document.getElementById("label-" + (i+1));
canvas.onmousemove = function(e){
var rect = canvas.getBoundingClientRect();
var x = Math.floor(e.offsetX * img.width / rect.width);
var y = Math.floor(e.offsetY * img.height / rect.height);
var color_idx = x * 4 + (y * 4 * imagedata.width);
var color = "#" + hexify(imagedata.data\[color_idx]) + hexify(imagedata.data\[color_idx+1]) + hexify(imagedata.data\[color_idx+2]);
label.textContent = data\[color];
canvas.title = data\[color];
}
canvas.onmouseout = function(e){
canvas.title = "";
}
}
}
</script>
<style>
img, canvas {
width: 100%;
background-color: white;
}
</style>
"}
var/datum/browser/popup = new(user, "minimap_[id]", name, 500, 700)
popup.add_head_content(headerJS) //set the head
popup.set_content(info)
var/datum/minimap/MICO = minimaps[1]
popup.set_title_image(MICO.overlay_icon)
popup.open(FALSE)
@@ -79,6 +79,10 @@
name = "Witch Wing"
icon_state = "witchwing"
/datum/sprite_accessory/moth_wings/bee
name = "Bee Wing"
icon_state = "bee"
/datum/sprite_accessory/moth_markings // the markings that moths can have. finally something other than the boring tan
icon = 'icons/mob/moth_markings.dmi'
color_src = null
@@ -141,4 +145,4 @@
/datum/sprite_accessory/moth_markings/witchwing
name = "Witch Wing"
icon_state = "witchwing"
icon_state = "witchwing"
+1
View File
@@ -75,3 +75,4 @@
user.nextsoundemote = world.time + 7
playsound(user, 'modular_citadel/sound/voice/speen.ogg', 50, 1, -1)
. = ..()
+16
View File
@@ -845,6 +845,22 @@
update_inv_handcuffed()
update_hud_handcuffed()
/mob/living/carbon/proc/can_defib()
var/tlimit = DEFIB_TIME_LIMIT * 10
var/obj/item/organ/heart = getorgan(/obj/item/organ/heart)
if(suiciding || hellbound || HAS_TRAIT(src, TRAIT_HUSK))
return
if((world.time - timeofdeath) > tlimit)
return
if((getBruteLoss() >= MAX_REVIVE_BRUTE_DAMAGE) || (getFireLoss() >= MAX_REVIVE_FIRE_DAMAGE))
return
if(!heart || (heart.organ_flags & ORGAN_FAILING))
return
var/obj/item/organ/brain/BR = getorgan(/obj/item/organ/brain)
if(QDELETED(BR) || BR.brain_death || (BR.organ_flags & ORGAN_FAILING) || suiciding)
return
return TRUE
/mob/living/carbon/fully_heal(admin_revive = FALSE)
if(reagents)
reagents.clear_reagents()
@@ -1428,7 +1428,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/grav_force = min(gravity - STANDARD_GRAVITY,3)
. += 1 + grav_force
var/datum/component/mood/mood = H.GetComponent(/datum/component/mood)
/*var/datum/component/mood/mood = H.GetComponent(/datum/component/mood)
//removed because mood now influences action speed. Hyperstation 13.
if(mood && !flight) //How can depression slow you down if you can just fly away from your problems?
switch(mood.sanity)
if(SANITY_INSANE to SANITY_CRAZY)
@@ -1437,9 +1438,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
. += 1
if(SANITY_UNSTABLE to SANITY_DISTURBED)
. += 0.5
*/
if(HAS_TRAIT(H, TRAIT_FAT))
. += (1.5 - flight)
. += (1.2 - flight)
if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !HAS_TRAIT(H, TRAIT_RESISTCOLD))
. += (BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR
return .
File diff suppressed because it is too large Load Diff
+2
View File
@@ -873,6 +873,8 @@
return 0
if(digitalcamo || digitalinvis)
return 0
if(ismimic(src)) // Are we a mimic? Mimics should not be tracked to prevent AI camera cheese.
return 0
// Now, are they viewable by a camera? (This is last because it's the most intensive check)
if(!near_camera(src))
+1
View File
@@ -892,6 +892,7 @@
/mob/living/silicon/ai/revive(full_heal = 0, admin_revive = 0)
. = ..()
if(.) //successfully ressuscitated from death
set_eyeobj_visible(TRUE)
set_core_display_icon(display_icon_override)
/mob/living/silicon/ai/proc/malfhacked(obj/machinery/power/apc/apc)
@@ -18,6 +18,7 @@
update_canmove()
if(eyeobj)
eyeobj.setLoc(get_turf(src))
set_eyeobj_visible(FALSE)
GLOB.shuttle_caller_list -= src
SSshuttle.autoEvac()
@@ -6,6 +6,8 @@
/mob/camera/aiEye
name = "Inactive AI Eye"
icon_state = "ai_camera"
icon = 'icons/mob/cameramob.dmi'
invisibility = INVISIBILITY_MAXIMUM
hud_possible = list(ANTAG_HUD, AI_DETECT_HUD = HUD_LIST_LIST)
var/list/visibleCameraChunks = list()
@@ -158,11 +160,11 @@
cameraFollow = null
unset_machine()
if(!eyeobj || !eyeobj.loc || QDELETED(eyeobj))
if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc))
to_chat(src, "ERROR: Eyeobj not found. Creating new eye...")
create_eye()
eyeobj.setLoc(loc)
eyeobj?.setLoc(loc)
/mob/living/silicon/ai/proc/create_eye()
if(eyeobj)
@@ -172,6 +174,13 @@
eyeobj.ai = src
eyeobj.setLoc(loc)
eyeobj.name = "[name] (AI Eye)"
set_eyeobj_visible(TRUE)
/mob/living/silicon/ai/proc/set_eyeobj_visible(state = TRUE)
if(!eyeobj)
return
eyeobj.mouse_opacity = state ? MOUSE_OPACITY_ICON : initial(eyeobj.mouse_opacity)
eyeobj.invisibility = state ? INVISIBILITY_OBSERVER : initial(eyeobj.invisibility)
/mob/living/silicon/ai/verb/toggle_acceleration()
set category = "AI Commands"
+1 -1
View File
@@ -19,7 +19,7 @@
// messenging the client
malfhacked(malfhack)
if(!eyeobj || QDELETED(eyeobj) || !eyeobj.loc)
if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc))
view_core()
if(machine)
@@ -6,6 +6,7 @@
O.mode = 1
O.emotion = "Neutral"
O.update()
set_eyeobj_visible(TRUE)
if(multicam_on)
end_multicam()
view_core()
@@ -4,4 +4,5 @@
var/obj/machinery/status_display/ai/O = each
O.mode = 0
O.update()
set_eyeobj_visible(FALSE)
view_core()
@@ -120,6 +120,9 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room)
/mob/camera/aiEye/pic_in_pic
name = "Secondary AI Eye"
invisibility = INVISIBILITY_OBSERVER
mouse_opacity = MOUSE_OPACITY_ICON
icon_state = "ai_pip_camera"
var/obj/screen/movable/pic_in_pic/ai/screen
var/list/cameras_telegraphed = list()
var/telegraph_cameras = TRUE
@@ -21,6 +21,9 @@
locked = FALSE //unlock cover
if(connected_ai)
deployed = FALSE
update_canmove()
if(!QDELETED(builtInCamera) && builtInCamera.status)
builtInCamera.toggle_cam(src,0)
@@ -1232,7 +1232,6 @@
/mob/living/silicon/robot/proc/TryConnectToAI()
set_connected_ai(select_active_ai_with_fewest_borgs(z))
if(connected_ai)
connected_ai.connected_robots += src
lawsync()
lawupdate = 1
return TRUE
@@ -1270,4 +1269,4 @@
var/mob/living/silicon/ai/old_ai = .
old_ai.connected_robots -= src
if(connected_ai)
connected_ai.connected_robots |= src
connected_ai.connected_robots |= src
@@ -198,20 +198,19 @@
return 2
/mob/living/simple_animal/slime/get_status_tab_items()
if(..())
if(!docile)
. += "Nutrition: [nutrition]/[get_max_nutrition()]"
if(amount_grown >= SLIME_EVOLUTION_THRESHOLD)
if(is_adult)
. += "You can reproduce!"
else
. += "You can evolve!"
if(stat == UNCONSCIOUS)
. += "You are knocked out by high levels of BZ!"
. = ..()
if(!docile)
. += "Nutrition: [nutrition]/[get_max_nutrition()]"
if(amount_grown >= SLIME_EVOLUTION_THRESHOLD)
if(is_adult)
. += "You can reproduce!"
else
. += "Power Level: [powerlevel]"
. += "You can evolve!"
if(stat == UNCONSCIOUS)
. += "You are knocked out by high levels of BZ!"
else
. += "Power Level: [powerlevel]"
/mob/living/simple_animal/slime/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)

Some files were not shown because too many files have changed in this diff Show More