Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into various_appearance_fixes

This commit is contained in:
Crazylemon64
2016-03-21 22:39:45 -07:00
122 changed files with 2094 additions and 870 deletions
+74 -45
View File
@@ -327,15 +327,27 @@
"go" = (/obj/effect/landmark{name = "prisonwarp"},/turf/unsimulated/floor{name = "plating"},/area/centcom)
"gp" = (/obj/docking_port/stationary/transit{dwidth = 3; height = 5; id = "science_transit"; name = "science in transit"; turf_type = /turf/space/transit/horizontal; width = 7},/turf/space/transit/horizontal,/area/space)
"gq" = (/obj/machinery/computer/supplycomp,/turf/unsimulated/floor{dir = 8; heat_capacity = 1; icon_state = "warning"},/area/centcom/suppy)
"gr" = (/obj/docking_port/stationary/transit{dwidth = 3; height = 7; id = "steel_rain_transit"; name = "steel_rain in transit"; width = 7},/turf/space/transit/horizontal,/area/space)
"gs" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/suppy)
"gt" = (/obj/structure/urinal{pixel_y = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"gu" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/suppy)
"gv" = (/obj/structure/closet/crate,/turf/unsimulated/floor{tag = "icon-plating"; icon_state = "plating"},/area/centcom/suppy)
"gw" = (/obj/item/weapon/mop,/obj/structure/mirror{pixel_x = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"gx" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"gy" = (/obj/structure/toilet{dir = 8},/obj/structure/window/reinforced/tinted{dir = 1},/obj/machinery/door/window{dir = 8; name = "Tactical Toilet"; opacity = 1; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"gz" = (/turf/unsimulated/wall/fakeglass,/area/centcom/suppy)
"gA" = (/obj/machinery/door/airlock/centcom{name = "Crate Storage"; req_access_txt = "106"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/suppy)
"gB" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"gC" = (/obj/effect/decal/warning_stripes/southeastcorner,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"gD" = (/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"gE" = (/obj/effect/decal/warning_stripes/south,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"gF" = (/obj/structure/table,/obj/item/weapon/paper_bin,/turf/unsimulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/centcom/suppy)
"gG" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/coin/silver,/turf/unsimulated/floor,/area/centcom/suppy)
"gH" = (/obj/structure/table,/obj/item/weapon/pen/blue{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red,/obj/item/weapon/pen{pixel_x = 8; pixel_y = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/suppy)
"gI" = (/turf/unsimulated/floor,/area/centcom/suppy)
"gJ" = (/obj/effect/decal/warning_stripes/south,/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"gK" = (/obj/effect/decal/warning_stripes/southwestcorner,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"gL" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"gM" = (/obj/machinery/door/airlock/centcom{name = "Centcom Supply"; req_access_txt = "106"},/turf/unsimulated/floor{tag = "icon-brown"; icon_state = "brown"},/area/centcom/suppy)
"gN" = (/turf/unsimulated/wall,/area/centcom/evac)
"gO" = (/turf/unsimulated/wall,/area/centcom/control)
@@ -358,6 +370,13 @@
"hf" = (/turf/unsimulated/wall/fakeglass,/area/centcom/control)
"hg" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/turf/unsimulated/floor{tag = "icon-darkred (WEST)"; icon_state = "darkred"; dir = 8},/area/centcom/evac)
"hh" = (/obj/structure/stool/bed/chair/office/dark,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac)
"hi" = (/obj/effect/decal/warning_stripes/southeast,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"hj" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/assault_pod)
"hk" = (/turf/space,/obj/machinery/gun_turret/assault_pod,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/assault_pod)
"hl" = (/obj/machinery/door/airlock/centcom{aiControlDisabled = 1; name = "Assault Pod"; opacity = 1; req_one_access_txt = "150"},/turf/simulated/floor/plating,/area/shuttle/assault_pod)
"hm" = (/obj/effect/decal/warning_stripes/southwest,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"hn" = (/turf/space,/obj/machinery/gun_turret/assault_pod,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/assault_pod)
"ho" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"hp" = (/obj/structure/table/woodentable,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
"hq" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
"hr" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/centcom/control)
@@ -365,6 +384,19 @@
"ht" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/area/centcom/evac)
"hu" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/unsimulated/floor{tag = "icon-darkred"; icon_state = "darkred"; dir = 2},/area/centcom/evac)
"hv" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/unsimulated/floor{tag = "icon-darkred"; icon_state = "darkred"; dir = 2},/area/centcom/evac)
"hw" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"hx" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"hy" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"hz" = (/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"hA" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"hB" = (/turf/simulated/floor/plating,/area/syndicate_mothership)
"hC" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plating,/area/syndicate_mothership)
"hD" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/syndicate_mothership)
"hE" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"hF" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"hG" = (/obj/machinery/computer/shuttle/syndicate/drop_pod,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/assault_pod)
"hH" = (/obj/structure/stool/bed/chair,/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"hI" = (/turf/space,/obj/machinery/gun_turret/assault_pod,/turf/simulated/shuttle/wall{tag = "icon-diagonalWall3"; icon_state = "diagonalWall3"; dir = 2},/area/shuttle/assault_pod)
"hJ" = (/obj/machinery/vending/clothing,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
"hK" = (/turf/unsimulated/floor/grass,/area/centcom/control)
"hL" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 8},/area/centcom/control)
@@ -375,12 +407,21 @@
"hQ" = (/obj/structure/rack,/turf/unsimulated/floor{dir = 1; icon_state = "green"},/area/centcom/evac)
"hR" = (/obj/structure/rack,/obj/item/weapon/storage/fancy/crayons,/obj/item/toy/sword,/turf/unsimulated/floor{dir = 1; icon_state = "green"},/area/centcom/evac)
"hS" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/evac)
"hT" = (/turf/space,/obj/machinery/gun_turret/assault_pod,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/assault_pod)
"hU" = (/obj/effect/decal/warning_stripes/northeast,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"hV" = (/obj/effect/decal/warning_stripes/northeastcorner,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"hW" = (/obj/machinery/door/airlock/centcom{aiControlDisabled = 1; name = "Assault Pod"; opacity = 1; req_one_access_txt = "150"},/obj/docking_port/mobile/assault_pod,/turf/simulated/floor/plating,/area/shuttle/assault_pod)
"hX" = (/obj/machinery/door/airlock/centcom{name = "Dressing Room"; opacity = 1; req_access_txt = "0"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
"hY" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/control)
"hZ" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 4},/area/centcom/control)
"ia" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/evac)
"ib" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac)
"ic" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/evac)
"id" = (/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"ie" = (/obj/effect/decal/warning_stripes/northwestcorner,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"if" = (/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"ig" = (/obj/effect/decal/warning_stripes/north,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"ih" = (/obj/effect/decal/warning_stripes/north,/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"ii" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry)
"ij" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/ferry)
"ik" = (/turf/unsimulated/floor{tag = "icon-warndark (WEST)"; icon_state = "warndark"; dir = 8},/area/centcom/ferry)
@@ -395,6 +436,9 @@
"it" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 4},/area/centcom/evac)
"iu" = (/obj/machinery/door/airlock/centcom{name = "Centcom Security"; opacity = 1; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac)
"iv" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/centcom/evac)
"iw" = (/obj/item/weapon/soap/syndie,/obj/structure/mopbucket,/obj/machinery/light{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"ix" = (/obj/structure/table/woodentable,/obj/item/pizzabox,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"iy" = (/obj/structure/table/woodentable,/obj/item/toy/nuke,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"iD" = (/turf/unsimulated/floor{name = "plating"},/area/space)
"iE" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/ferry)
"iF" = (/obj/effect/landmark{name = "Deathsquad"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
@@ -501,10 +545,6 @@
"mn" = (/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"mo" = (/obj/machinery/vending/syndisnack,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"mp" = (/obj/machinery/vending/syndicigs,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"mq" = (/obj/effect/spawner/window/reinforced,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"mr" = (/obj/structure/table/woodentable,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"ms" = (/obj/structure/stool/bed/chair/comfy/teal,/obj/machinery/light{dir = 1; on = 1},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"mt" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/engineering_hacking,/obj/item/weapon/book/manual/robotics_cyborgs,/obj/item/weapon/book/manual/engineering_singularity_safety,/obj/item/weapon/book/manual/detective,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"mu" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
"mv" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
"mw" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/tdome/tdomeobserve)
@@ -520,8 +560,6 @@
"mT" = (/mob/living/simple_animal/pet/fox/Syndifox,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"mU" = (/obj/effect/decal/warning_stripes/southeastcorner,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"mV" = (/obj/effect/decal/warning_stripes/south,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"mW" = (/obj/machinery/door/airlock/centcom{name = "Study"; opacity = 1; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"mX" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"mY" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/drinkingglasses,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
"mZ" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
"na" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/gun/syringe/rapidsyringe,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
@@ -535,11 +573,8 @@
"np" = (/turf/unsimulated/wall{tag = "icon-uranium3"; icon_state = "uranium3"},/area/wizard_station)
"nu" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"nv" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/cans/beer{pixel_x = -2; pixel_y = 5},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"nw" = (/obj/structure/table/woodentable,/obj/item/pizzabox,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"nx" = (/obj/structure/stool{pixel_y = 8},/obj/effect/landmark{name = "Syndicate-Spawn"},/obj/effect/decal/warning_stripes/east,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"ny" = (/obj/machinery/computer/telecrystals/uplinker,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership)
"nz" = (/obj/structure/dresser,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"nA" = (/obj/structure/table/woodentable,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"nB" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = -5},/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey{pixel_x = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
"nC" = (/turf/unsimulated/floor{tag = "icon-darkblue"; icon_state = "darkblue"; dir = 2},/area/centcom/ferry)
"nD" = (/obj/structure/extinguisher_cabinet{pixel_y = -28},/turf/unsimulated/floor{tag = "icon-darkbrown"; icon_state = "darkbrown"; dir = 2},/area/centcom/ferry)
@@ -575,9 +610,6 @@
"oA" = (/obj/structure/mirror{pixel_x = 28},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"oD" = (/turf/unsimulated/wall/fakeglass,/area/syndicate_mothership)
"oF" = (/obj/machinery/door_control{id = "nukeop_ready"; name = "Mission Launch Control"; pixel_x = -26; pixel_y = -2; req_access_txt = "151"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"oG" = (/obj/structure/urinal{pixel_y = 28},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"oH" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/door/window{dir = 2; name = "Tactical Toilet"; opacity = 1; req_access_txt = "150"},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"oI" = (/obj/effect/decal/cleanable/fungus,/turf/unsimulated/wall,/area/syndicate_mothership)
"oK" = (/turf/simulated/shuttle/wall{icon_state = "swall0"; dir = 2},/area/wizard_station)
"oL" = (/turf/unsimulated/wall/fakedoor{name = "Squad 4 Pod"},/area/wizard_station)
"oM" = (/turf/simulated/shuttle/wall{icon_state = "swall4"; dir = 2},/area/wizard_station)
@@ -592,7 +624,6 @@
"pb" = (/obj/effect/decal/warning_stripes/north,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pc" = (/obj/machinery/door/airlock/centcom{name = "Restroom"; opacity = 1; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pd" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"pe" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"pf" = (/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 2},/area/tdome/tdomeobserve)
"pg" = (/obj/structure/stool/bed/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 2},/area/tdome/tdomeobserve)
"ph" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space/transit,/area/wizard_station)
@@ -606,8 +637,6 @@
"pw" = (/obj/effect/decal/warning_stripes/south,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"px" = (/obj/effect/decal/warning_stripes/southwestcorner,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"py" = (/obj/machinery/door/window{dir = 4; name = "Uplink Management Control"; req_access_txt = "151"},/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"pz" = (/obj/item/weapon/soap/syndie,/obj/structure/mopbucket,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"pA" = (/obj/item/weapon/mop,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"pB" = (/turf/unsimulated/wall/fakedoor{name = "Thunderdome"},/area/tdome/tdomeobserve)
"pC" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 2},/area/tdome/tdomeobserve)
"pD" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/wizard_station)
@@ -855,24 +884,24 @@ ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglgl
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabglglglglglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVaVaVaVaVeqepepepepepepeperaVaVesaVaVabababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabglglglglglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVeteteteubTbTbTbTbTbTbTbTeueueubTetaVabababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVeubTbTbTbTbTbTbTevbTbTbTbTbTbTbTetaVabababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVewbTbTbTbTbTbTexexexbTbTbTbTbTbTetaVabababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVewbTbTbTbTbTeVexexexeVbTbTbTbTbTeuaVabababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVewbTbTbTbTbTbTeVeVeVbTbTbTbTbTbTbTaVabababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVbTbTbTbTbTbTbTbTbTbTbTbTbTbTbTbTbTaVabababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVbTbTeueteteubTbTbTbTbTbTbTbTbTbTbTaVabababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVaVeZaVaVaVaVaVaVaVaVaVaVaVaVaVeZaVaVabababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglgpglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVfAfAaVabababababababababababaVfAfAaVabababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVfAfAaVabababababababababababaVfAfAaVabababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVaVfAfAaVaVaVaVaVaVaVaVaVaVaVaVaVfAfAaVaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVababababababababababababababababfEababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyezeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVewbTbTbTbTbTbTexexexbTbTbTbTbTbTetaVabababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVewbTbTbTbTbTeVexexexeVbTbTbTbTbTeuaVabababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVewbTbTbTbTbTbTeVeVeVbTbTbTbTbTbTbTaVabababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVbTbTbTbTbTbTbTbTbTbTbTbTbTbTbTbTbTaVabababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVbTbTeueteteubTbTbTbTbTbTbTbTbTbTbTaVabababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVaVeZaVaVaVaVaVaVaVaVaVaVaVaVaVeZaVaVabababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglgpglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVfAfAaVabababababababababababaVfAfAaVabababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVfAfAaVabababababababababababaVfAfAaVabababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVaVfAfAaVaVaVaVaVaVaVaVaVaVaVaVaVfAfAaVaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVababababababababababababababababfEababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglgrglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyezeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyabababglglglglglglglglglglglglglglglglglglglglglglglglabglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyababababababababababababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyababababababababababababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyababababababababababababababababababababababababababababglglglglglglglglglglglglglglglglglglglglglglglabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eyeyeyeyeyeyeyeyeyeyeyeyeyeyeyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
eAeyeyeyeyeyeyeyeyeyeyeyeyeyeyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaVabababababababababababababababababababaVababababababababababababababababababababababababababababababababababababababababababab
@@ -951,18 +980,18 @@ ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababiSamamamamamazabababababababazatamamamamamaAaxaxaBaxaBamamawamiSabababababababababababababababababababababababababababababgVililililkTilkTililililililkUgVkVkVkWkXkYkZlakVkVkVabababgNkyibibibibibibicibibibiKfYiMfYababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababiSamamamamamabababababababababaCamamamataDiSiSlmlniSiSaEaxaxaxiSabababababababababababababababababababababababababababababgVloilillplplplplqililililillrgVlsltlulvlwlxlultltkVabababgNlylzlzlzlAlBlClDibibibiKivisitababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababiSamamamamamabababababababababaCamamamaWiSiSlPlQlQlRiSiSiSiSiSiSiSiSabababababababababababababababababababababababababababgVlSillTlplUlVlpilililililillWgVltlXlYlvlwlxlYlZltkVabababgNgNgNgNgNgNgNgNgNibmambmcgNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamfmgmhmiaaaaaaaaaaaaaaaaaaaaaaababababababiSamamamamamabababababababababaCamamauaWiSaXmnmnmnmnaYmompmqmrmsmtiSabababababababababababababababababababababababababababgVmuilillplplplplqilililililmvgVmwltmwlvlwlxmwltmwkVabababababababababababgNibmxkzmygNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaamHaamIgamKmLmMaaaaaaaaaaaaaaaaaaaaababababababiSamamamamamazabababababababazamamamambIiSmRmnmSmSmTmnmUmVmWmXmXmXiSabababababababababababababababababababababababababababgVmYililmZilmZilililililililnagVnbltltlvlwlxltltnckVabababababababababababndibibibibgNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaamHnlnmnnmKnonpaaaaaaaaaaaaaaaaaaaaababababababiSamamamamamamamabababababbKaxaxamambLaDiSnumSnvnwmSmnnxnymqnznAiSiSabababababababababababababababababababababababababababgVnBilililililililnCnDnEnFnanGgVnHnInIlvlwlxnJnJnKkVabababababababababababgNnLnMnMnNgNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaanpnXnYnonZoanpaaaaaaaaaaaaaaaaaaaaababababababiSamamamamamamamabababababodoeoeoeoeoelniSmnmSofogmSmnnxnyiSiSiSiSababababababababababababababababababababababababababababgVgVgVgVgVohgVgVgVgVgVgVgVgVgVgVkVkVkVkVlwkVkVkVkVkVabababababababababababgNgNgNgNgNgNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaamLmMolomolonooaaaaaaaaaaaaaaaaaaaaababababababiSamamazabababababababababopoqoroqoqoqoqotmnbMmnmnmnmnnxnyiSiSiSiSabababababababababababababababababababababababababababababababababababababababababababababababkVlwkVabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaamHmHoooyozoAmLaaaaaaaaaaaaaaaaaaaaaaababababababiSamamababababababababababoDbNlmoeoeoelniSoFmSmSmSmnmnnxnyiSoGoHoIiSabababababababababababababababababababababababababababababababababababababababkVkVkVkVkVkVkVkVkYkVkVkVkVkVkVkVkVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaoKoLoMoNoOoPmKoQmHaaaaaaaaaaaaaaaaaaaaababababababiSamamabababababababababababbOabazamambPiSoXoYoZoYoYmnpapbpcpdpdpeiSabababababababababababababababababababababababababababababababababababababababkVpfpgpgpgpgpgpfpfpfpgpgpgpgpgpfkVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaphpipjpkploOmKnYpmpnmHmHaaaaaaaaaaaaaaaaababababababiSbUamababababababababababababababbWamaWiScfpvpwpxpymnmnmniSpzpApeiSabababababababababababababababababababababababababababababababababababababababpBpfpfpfpCpfpfpfpfpfpfpfpCpfpfpfpBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaamHaaoMpDpDpEoOmKpFnYpnaapGpHaaaaaaaaaaaaaaababababababiSamamababababababababababababababaCamaWiSiSnypPcgcmiSpSmniSiSiSiSiSabababababababababababababababababababababababababababababababababababababababkVpfpgpgpgpgpgpfpfpfpgpgpgpgpgpfkVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaoQmHaaaamHpTpUnnpVnnoQmHmHaaaaaaaaaaaaaaaaababababababiSamamababababababababababababababaEamamamiSiSiSiSiSiSqcqcqdqeqfqgiSabababababababababababababababababababababababababababababababababababababababkVkZqhqhqhqhqhqhqhqhqhqhqhqhqhkXkVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaonqiqjqkqlqmqlqlqiqnqkqlqlqmqlqlaamHaaaaaaaaaaababababababiSamazabababababababababababababababazamamamcncncobPiSqrqsqsqsqsqsiSabababababababababababababababababababababababababababababababqtqtqtqtqtqtqtqtqtquqvqvqvqvqvqvqvqvqvqvqvqvqvquqtqtqtqtqtqtqtqtqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaqwqxmKmKqxqwqyqzmKmKmKqAqBqwqCozoQqDmHmHaaaaaaababababababiSamabababababababababababababababababaCamamatamamaWqOqsqsqsqsqsqPiSabababababababababababababababababababababababababababababababqtqQqRqSqSqSqSqSqTqUqvqvqvqvqvqvqvqvqvqvqvqvqvqVqTqWqWqWqWqWqRqXqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamfmgmhmiaaaaaaaaaaaaaaaaaaaaaaababababababiSamamamamamabababababababababaCamamauaWiSaXmnmnmnmnaYmompiSgtiwgwiSabababababababababababababababababababababababababababgVmuilillplplplplqilililililmvgVmwltmwlvlwlxmwltmwkVabababababababababababgNibmxkzmygNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaamHaamIgamKmLmMaaaaaaaaaaaaaaaaaaaaababababababiSamamamamamazabababababababazamamamambIiSmRmnmSmSmTmnmUmVpcpdpdgxiSiSiSiSiSiSiSiSiSiSiSiSababababababababababababababababgVmYililmZilmZilililililililnagVnbltltlvlwlxltltnckVabababababababababababndibibibibgNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaamHnlnmnnmKnonpaaaaaaaaaaaaaaaaaaaaababababababiSamamamamamamamabababababbKaxaxamambLaDiSnumSnvixmSmnnxnyiSpdgyiSiSgBgDgCgEgEgJgEgEgKgLiSababababababababababababababababgVnBilililililililnCnDnEnFnanGgVnHnInIlvlwlxnJnJnKkVabababababababababababgNnLnMnMnNgNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaanpnXnYnonZoanpaaaaaaaaaaaaaaaaaaaaababababababiSamamamamamamamabababababodoeoeoeoeoelniSmnmSofogmSmnnxnyiSiSiSiSiSgDgChihkhjhlhjhnhmgKiSababababababababababababababababgVgVgVgVgVohgVgVgVgVgVgVgVgVgVgVkVkVkVkVlwkVkVkVkVkVabababababababababababgNgNgNgNgNgNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaamLmMolomolonooaaaaaaaaaaaaaaaaaaaaababababababiSamamazabababababababababopoqoroqoqoqoqotmnbMmnmnmnmnnxnyiSiSiSiSiSgDhohkhjhwhyhxhjhnhziSabababababababababababababababababababababababababababababababababababkVlwkVabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaamHmHoooyozoAmLaaaaaaaaaaaaaaaaaaaaaaababababababiSamamababababababababababoDbNlmoeoeoelniSoFmSmSmSmnmnnxnylmoeoeoeoeoeoehjhwhyhAhyhxhjhziSababababababababababababababababababababababababababababkVkVkVkVkVkVkVkVkYkVkVkVkVkVkVkVkVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaoKoLoMoNoOoPmKoQmHaaaaaaaaaaaaaaaaaaaaababababababiSamamabababababababababababbOabazamambPiSoXoYoZoYiymnpapbhChBhBhDhBhBhChlhyhEhGhFhyhlhziSababababababababababababababababababababababababababababkVpfpgpgpgpgpgpfpfpfpgpgpgpgpgpfkVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaphpipjpkploOmKnYpmpnmHmHaaaaaaaaaaaaaaaaababababababiSbUamababababababababababababababbWamaWiScfpvpwpxpymnmnmnlmoeoeoeoeoeoehjhwhyhHhyhyhjhziSababababababababababababababababababababababababababababpBpfpfpfpCpfpfpfpfpfpfpfpCpfpfpfpBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaamHaaoMpDpDpEoOmKpFnYpnaapGpHaaaaaaaaaaaaaaababababababiSamamababababababababababababababaCamaWiSiSnypPcgcmiSpSmniSiSiSiSiSgDhohIhjhwhyhxhjhThziSababababababababababababababababababababababababababababkVpfpgpgpgpgpgpfpfpfpgpgpgpgpgpfkVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaoQmHaaaamHpTpUnnpVnnoQmHmHaaaaaaaaaaaaaaaaababababababiSamamababababababababababababababaEamamamiSiSiSiSiSiSqcqcqdqeqfqgiSgDhVhUhIhjhWhjhTidieiSababababababababababababababababababababababababababababkVkZqhqhqhqhqhqhqhqhqhqhqhqhqhkXkVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaonqiqjqkqlqmqlqlqiqnqkqlqlqmqlqlaamHaaaaaaaaaaababababababiSamazabababababababababababababababazamamamcncncobPiSqrqsqsqsqsqsiSifgDhVigigihigigieifiSababababababababababababababababababababqtqtqtqtqtqtqtqtqtquqvqvqvqvqvqvqvqvqvqvqvqvqvquqtqtqtqtqtqtqtqtqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaqwqxmKmKqxqwqyqzmKmKmKqAqBqwqCozoQqDmHmHaaaaaaababababababiSamabababababababababababababababababaCamamatamamaWqOqsqsqsqsqsqPiSiSiSiSiSiSiSiSiSiSiSiSababababababababababababababababababababqtqQqRqSqSqSqSqSqTqUqvqvqvqvqvqvqvqvqvqvqvqvqvqVqTqWqWqWqWqWqRqXqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaqYqZmKmKqZqYqDqDmKmKmKmKraqYrbrcpDpDrdaaaaaaaaababababababiSamabababababababababababababababababaCamamaucpaBaDiSrjrjrjrjrjrkiSabababababababababababababababababababababababababababababababqtqQqRqSrlqSrlqSqTqUqvqvqvqvqvqvqvqvqvqvqvqvqvqVqTqWrmqWrmqWqRqXqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaarnromKnYmKrppFnYmKgbmKmKrrrnrsrtrurvrwrxaaaaaaababababababiSamabababababababababababababababababaCamamaWiSiSiSiSiSiSiSiSiSiSiSabababababababababababababababababababababababababababababababqtqQqRqSqSrCqSqSqTqUqvqvqvqvqvrDrErDqvqvqvqvqvqVqTqWqWrFqWqWqRqXqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaarGqZmKnnpFrHnnmKmKrImKmKmKrGrJrKrdrLoKaaaaaaaaababababababiSamabababababababababababababababababcqamamamiSabababababababababababababababababababababababababababababababababababababababababqtqQqRqSqSqSqSqSqTqUqvqvqvqvqvrDrVrDqvqvqvqvqvqVqTqWqWqWqWqWqRqXqtababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+99 -70
View File
@@ -308,11 +308,18 @@
"fV" = (/obj/structure/holowindow,/turf/simulated/floor/holofloor,/area/holodeck/source_thunderdomecourt)
"fW" = (/obj/structure/holowindow,/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/source_thunderdomecourt)
"fX" = (/turf/space,/turf/unsimulated/wall{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "diagonalWall3"},/area/centcom/control)
"fY" = (/obj/structure/urinal{pixel_y = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"fZ" = (/obj/item/weapon/mop,/obj/structure/mirror{pixel_x = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"ga" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"gb" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding)
"gc" = (/obj/structure/table,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding)
"gd" = (/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding)
"ge" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding)
"gf" = (/obj/item/device/camera,/turf/unsimulated/beach/sand,/area/ninja/holding)
"gg" = (/obj/structure/toilet{dir = 8},/obj/structure/window/reinforced/tinted{dir = 1},/obj/machinery/door/window{dir = 8; name = "Tactical Toilet"; opacity = 1; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"gh" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"gi" = (/obj/effect/decal/warning_stripes/southeastcorner,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"gj" = (/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"gk" = (/obj/structure/flora/tree/dead,/turf/simulated/floor/holofloor{tag = "icon-snow"; icon_state = "snow"},/area/holodeck/source_snowfield)
"gl" = (/obj/structure/stool,/turf/simulated/floor/holofloor{tag = "icon-carpet7-0 (EAST)"; icon_state = "carpet7-0"; dir = 4},/area/holodeck/source_meetinghall)
"gm" = (/obj/structure/stool,/turf/simulated/floor/holofloor{tag = "icon-carpet15-0 (EAST)"; icon_state = "carpet15-0"; dir = 4},/area/holodeck/source_meetinghall)
@@ -326,6 +333,7 @@
"gu" = (/obj/structure/holowindow{dir = 1},/turf/simulated/floor/holofloor{dir = 4; icon_state = "green"},/area/holodeck/source_thunderdomecourt)
"gv" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "green"},/area/holodeck/source_boxingcourt)
"gw" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "green"},/area/holodeck/source_boxingcourt)
"gx" = (/obj/effect/decal/warning_stripes/south,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"gy" = (/turf/unsimulated/wall/fakeglass{dir = 1; icon_state = "fakewindows"; tag = "icon-fakewindows (WEST)"},/area/ninja/outpost)
"gz" = (/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/unsimulated/floor{icon_state = "grimy"},/area/ninja/outpost)
"gA" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/sleeper/upgraded,/turf/unsimulated/floor{icon_state = "grimy"},/area/ninja/outpost)
@@ -360,6 +368,7 @@
"hd" = (/obj/machinery/vending/snack,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding)
"he" = (/turf/unsimulated/beach/coastline,/area/ninja/holding)
"hf" = (/obj/item/clothing/head/collectable/paper,/turf/unsimulated/beach/coastline,/area/ninja/holding)
"hg" = (/obj/effect/decal/warning_stripes/south,/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"hh" = (/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/source_basketball)
"hi" = (/obj/structure/holohoop{dir = 1},/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/source_basketball)
"hj" = (/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_basketball)
@@ -376,6 +385,7 @@
"hu" = (/obj/machinery/vending/cola,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding)
"hv" = (/turf/unsimulated/beach/water,/area/ninja/holding)
"hw" = (/obj/machinery/light/spot,/turf/unsimulated/beach/water,/area/ninja/holding)
"hx" = (/obj/effect/decal/warning_stripes/southwestcorner,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"hy" = (/turf/unsimulated/wall{tag = "icon-iron5"; icon_state = "iron5"},/area/space)
"hz" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/wall{tag = "icon-iron12"; icon_state = "iron12"},/area/space)
"hA" = (/turf/unsimulated/wall{tag = "icon-iron13"; icon_state = "iron13"},/area/space)
@@ -384,6 +394,7 @@
"hD" = (/turf/unsimulated/floor{icon_state = "delivery"},/area/ninja/holding)
"hE" = (/obj/effect/landmark{name = "Holding Facility"},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/unsimulated/floor{icon_state = "engine"},/area/ninja/holding)
"hF" = (/obj/effect/landmark{name = "Holding Facility"},/turf/unsimulated/floor{icon_state = "engine"},/area/ninja/holding)
"hG" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"hH" = (/obj/machinery/vending/sovietsoda,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/wood,/area/dynamic/source/lobby_russian)
"hI" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 4},/turf/simulated/floor/wood,/area/dynamic/source/lobby_russian)
"hJ" = (/obj/structure/table/woodentable,/obj/item/weapon/gun/projectile/revolver/russian,/turf/simulated/floor/wood,/area/dynamic/source/lobby_russian)
@@ -423,6 +434,9 @@
"ir" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/syndicate_mothership)
"is" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/syndicate_mothership)
"it" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_mothership)
"iu" = (/obj/effect/decal/warning_stripes/southeast,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"iv" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/assault_pod)
"iw" = (/turf/space,/obj/machinery/gun_turret/assault_pod,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/assault_pod)
"ix" = (/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/wizard_station)
"iy" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/wizard_station)
"iz" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/wizard_station)
@@ -431,6 +445,12 @@
"iC" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (NORTH)"; icon_state = "propulsion"; dir = 1},/turf/space,/area/shuttle/syndicate_elite/mothership)
"iD" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (NORTH)"; icon_state = "propulsion_l"; dir = 1},/turf/space,/area/shuttle/syndicate_elite/mothership)
"iE" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite/mothership)
"iF" = (/obj/machinery/door/airlock/centcom{aiControlDisabled = 1; name = "Assault Pod"; opacity = 1; req_one_access_txt = "150"},/turf/simulated/floor/plating,/area/shuttle/assault_pod)
"iG" = (/obj/effect/decal/warning_stripes/southwest,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"iH" = (/turf/space,/obj/machinery/gun_turret/assault_pod,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/assault_pod)
"iI" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"iJ" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"iK" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"iL" = (/obj/structure/bookcase{name = "bookcase (Tactics)"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"iM" = (/obj/item/device/radio/intercom/syndicate{pixel_x = 28},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"iN" = (/obj/structure/table/woodentable,/obj/item/trash/tray,/obj/item/weapon/paper/spells,/turf/unsimulated/floor{dir = 10; icon_state = "carpetside"},/area/wizard_station)
@@ -438,6 +458,13 @@
"iP" = (/obj/structure/table/woodentable,/obj/effect/landmark{name = "Teleport-Scroll"},/turf/unsimulated/floor{dir = 6; icon_state = "carpetside"},/area/wizard_station)
"iQ" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/shuttle/syndicate_elite/mothership)
"iR" = (/obj/structure/window/reinforced,/obj/structure/shuttle/engine/heater{tag = "icon-heater (NORTH)"; icon_state = "heater"; dir = 1},/turf/simulated/floor/plating/airless,/area/shuttle/syndicate_elite/mothership)
"iS" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"iT" = (/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"iU" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"iV" = (/turf/simulated/floor/plating,/area/syndicate_mothership)
"iW" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plating,/area/syndicate_mothership)
"iX" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/syndicate_mothership)
"iY" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"iZ" = (/obj/machinery/door/poddoor{id_tag = "thunderdomeaxe"; name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source)
"ja" = (/turf/unsimulated/wall,/area/tdome/arena)
"jb" = (/obj/machinery/igniter,/turf/simulated/floor/plasteel,/area/tdome/arena)
@@ -447,6 +474,9 @@
"jf" = (/obj/effect/landmark{name = "Syndicate-Commando-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
"jg" = (/mob/living/silicon/decoy{icon_state = "ai-malf"; name = "GLaDOS"},/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/syndicate_mothership/control)
"jh" = (/obj/structure/window/reinforced{dir = 4},/obj/item/device/radio/intercom/syndicate,/turf/unsimulated/floor{icon_state = "circuit"},/area/syndicate_mothership)
"ji" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"jj" = (/obj/machinery/computer/shuttle/syndicate/drop_pod,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/assault_pod)
"jk" = (/obj/structure/stool/bed/chair,/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/assault_pod)
"jl" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/energy/sword/saber/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source)
"jm" = (/obj/machinery/door/poddoor{id_tag = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source)
"jn" = (/obj/machinery/door/poddoor{id_tag = "thunderdome"; name = "Thunderdome Blast Door"},/turf/unsimulated/floor{name = "plating"},/area/tdome/arena_source)
@@ -454,6 +484,14 @@
"jp" = (/turf/simulated/floor/plasteel,/area/tdome/arena_source)
"jq" = (/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/tdome/arena_source)
"jr" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/energy/sword/saber/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source)
"js" = (/turf/space,/obj/machinery/gun_turret/assault_pod,/turf/simulated/shuttle/wall{tag = "icon-diagonalWall3"; icon_state = "diagonalWall3"; dir = 2},/area/shuttle/assault_pod)
"jt" = (/turf/space,/obj/machinery/gun_turret/assault_pod,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/assault_pod)
"ju" = (/obj/effect/decal/warning_stripes/northeast,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"jv" = (/obj/effect/decal/warning_stripes/northeastcorner,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"jw" = (/obj/machinery/door/airlock/centcom{aiControlDisabled = 1; name = "Assault Pod"; opacity = 1; req_one_access_txt = "150"},/obj/docking_port/mobile/assault_pod,/turf/simulated/floor/plating,/area/shuttle/assault_pod)
"jx" = (/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"jy" = (/obj/effect/decal/warning_stripes/northwestcorner,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"jz" = (/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"jA" = (/obj/structure/bookcase,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"jB" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"jC" = (/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 0},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
@@ -463,6 +501,12 @@
"jG" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
"jH" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
"jI" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
"jJ" = (/obj/effect/decal/warning_stripes/north,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"jK" = (/obj/effect/decal/warning_stripes/north,/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"jL" = (/obj/docking_port/stationary/transit{dwidth = 3; height = 7; id = "steel_rain_transit"; name = "steel_rain in transit"; width = 7},/turf/space/transit/horizontal,/area/space)
"jM" = (/obj/item/weapon/soap/syndie,/obj/structure/mopbucket,/obj/machinery/light{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"jN" = (/obj/structure/table/woodentable,/obj/item/pizzabox,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"jO" = (/obj/structure/table/woodentable,/obj/item/toy/nuke,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"kb" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"kc" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/mugwort,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"kd" = (/obj/structure/table/woodentable,/obj/item/weapon/spacecash,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
@@ -542,24 +586,15 @@
"oP" = (/obj/item/device/radio/intercom/syndicate{pixel_x = 0; pixel_y = 25},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"oQ" = (/obj/machinery/vending/syndisnack,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"oR" = (/obj/machinery/vending/syndicigs,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"oS" = (/obj/effect/spawner/window/reinforced,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"oT" = (/obj/structure/table/woodentable,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"oU" = (/obj/structure/stool/bed/chair/comfy/teal,/obj/machinery/light{dir = 1; on = 1},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"oV" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/engineering_hacking,/obj/item/weapon/book/manual/robotics_cyborgs,/obj/item/weapon/book/manual/engineering_singularity_safety,/obj/item/weapon/book/manual/detective,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"pa" = (/obj/structure/noticeboard{pixel_x = -32},/obj/item/weapon/paper/syndimemo,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pb" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pc" = (/mob/living/simple_animal/pet/fox/Syndifox,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pd" = (/obj/effect/decal/warning_stripes/southeastcorner,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pe" = (/obj/effect/decal/warning_stripes/south,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pf" = (/obj/machinery/door/airlock/centcom{name = "Study"; opacity = 1; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pg" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"pl" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pm" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/cans/beer{pixel_x = -2; pixel_y = 5},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pn" = (/obj/structure/table/woodentable,/obj/item/pizzabox,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"po" = (/obj/structure/stool{pixel_y = 8},/obj/effect/landmark{name = "Syndicate-Spawn"},/obj/effect/decal/warning_stripes/east,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pp" = (/obj/machinery/computer/telecrystals/uplinker,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership)
"pq" = (/obj/structure/dresser,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"pr" = (/obj/structure/table/woodentable,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"pu" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (NORTHWEST)"; icon_state = "fakewindows"; dir = 9},/area/syndicate_mothership)
"pv" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (WEST)"; icon_state = "fakewindows2"; dir = 8},/area/syndicate_mothership)
"pw" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice{pixel_x = -5; pixel_y = 5},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
@@ -570,9 +605,6 @@
"pC" = (/obj/machinery/door/poddoor{id_tag = "nukeop_ready"; name = "Shuttle Dock Door"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"pF" = (/turf/unsimulated/wall/fakeglass,/area/syndicate_mothership)
"pH" = (/obj/machinery/door_control{id = "nukeop_ready"; name = "Mission Launch Control"; pixel_x = -26; pixel_y = -2; req_access_txt = "151"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pI" = (/obj/structure/urinal{pixel_y = 28},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"pJ" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/door/window{dir = 2; name = "Tactical Toilet"; opacity = 1; req_access_txt = "150"},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"pK" = (/obj/effect/decal/cleanable/fungus,/turf/unsimulated/wall,/area/syndicate_mothership)
"pR" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"pS" = (/obj/structure/table/woodentable,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"pT" = (/obj/structure/table/woodentable,/obj/item/device/syndicatedetonator,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
@@ -580,14 +612,11 @@
"pV" = (/obj/effect/decal/warning_stripes/north,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pW" = (/obj/machinery/door/airlock/centcom{name = "Restroom"; opacity = 1; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"pX" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"pY" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"qf" = (/obj/effect/decal/warning_stripes/southeastcorner,/obj/item/device/radio/intercom/syndicate{pixel_x = -28},/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"qg" = (/obj/effect/landmark{name = "Syndicate-Spawn"},/obj/effect/decal/warning_stripes/south,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"qh" = (/obj/effect/decal/warning_stripes/south,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"qi" = (/obj/effect/decal/warning_stripes/southwestcorner,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"qj" = (/obj/machinery/door/window{dir = 4; name = "Uplink Management Control"; req_access_txt = "151"},/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"qk" = (/obj/item/weapon/soap/syndie,/obj/structure/mopbucket,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"ql" = (/obj/item/weapon/mop,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"qr" = (/obj/structure/sign/double/map/left{pixel_y = -32},/obj/effect/decal/warning_stripes/west,/obj/machinery/light,/obj/structure/rack/skeletal_bar/left,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"qt" = (/obj/machinery/computer/telecrystals/boss,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership)
"qu" = (/obj/structure/sign/double/map/right{pixel_y = -32},/obj/structure/rack/skeletal_bar/right,/obj/item/weapon/reagent_containers/food/drinks/bottle/gin,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
@@ -1281,43 +1310,43 @@ ckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbphWhWhWhWhWbshYhZhZhZhYbsiaiaiaiaiabD
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbpibichWicibbshYidhZidhYbsieifiaigiebD
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZhzhzhzhzhzbZhzhzhzhzhzbZhzhzhzhzhzbZ
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihihihihihihihihihihihihaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatatatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihiiijikiliminihioipiqihaNaNirisisisisisitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihikikikikikikikixiyizihaNaNisiAiBiCiDiEitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauayauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZdEdEdEdEdEbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZdFdFdFdFdFbZaNaNaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihiLiLikikikiMihiNiOiPihaNaNisiQiRiRiRiQititititaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZiZiZiZiZiZjajbjcjcjcjcjcjcjcjcjcjcjcjcjcjbjaiZiZiZiZiZbZbZbZaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihikikikikjdjdihihjeihihaNaNisiQjfjfjfiQitjgjhitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatatatataFaGaGaGaGaGaGaGaHatataIatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpjpjpjpjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihjAjAikjBjCjDihjEjejFihaNaNisiQjGjHjIiQititititititititititititaNaNaNaNaNaNaNaNaNaNaNataJaJaJaKauauauauauauauauaKaKaKauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpjpjpjpjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihkbikikjBkckdihkekfkgihaNaNisiQkhjHjIiQkikjkkklkmknkjkokpkqkrksaNaNaNaNaNaNaNaNaNaNaNataKauauauauauauauaMauauauauauauauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpkBkCkBjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihkJikikikikihihihihihihaNaNisiQkhjHjIiQkKkjknknkLknkjknkrkrkrksaNaNaNaNaNaNaNaNaNaNaNatbhauauauauauaubibibiauauauauauauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpkBkTkBjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihkWkXkYkZiklalblcldleihaNaNisiQjHjHjHlflglhknknkLknkjkokpkrkrksaNaNaNaNaNaNaNaNaNaNaNatbhauauauauaubjbibibibjauauauauauaKataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpjpjpjpjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihlolplqikikiklrlsltluihaNaNisiQlvjHjHlwlglhknknknknlxknkrkrkrksaNaNaNaNaNaNaNaNaNaNaNatbhauauauauauaubjbjbjauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZlBlBlBlBlBlClDjpjpjpjpjpjplEjpjpjpjpjpjplDlClBlBlBlBlBbZbZbZaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihlGlplqikikiklHlIlHlIihaNaNisiQlJjHlKiQkKkjknknkLknkjkokpkrkrksaNaNaNaNaNaNaNaNaNaNaNatauauauauauauauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZlWlWlWlWlWbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZlXlXlXlXlXbZaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihlomambkJmcladclumeddihaNaNismgmhmimhmjkikjknknkLknkjknkrkrkrksaNaNaNaNaNaNaNaNaNaNaNatauauaKaJaJaKauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihihihihihihihihihihihihaNaNisaNmgmsmjaNmtkjknknmuknkjkokpmvkrksaNaNaNaNaNaNaNaNaNaNaNatatbkatatatatatatatatatatatatatbkatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNititititititititititititititititititaNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckbmckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckaackckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjaNaNaNaNaNaNaNaNaNaNatatblblatatatatatatatatatatatatatblblatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckaEckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababababababacababababababababababababababababababnjaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbnaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababababacabababababababababababababababababababababababababnjaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababababadababababababababababababaeababacabafababnjaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckawckckckckckaxckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababababababababababababababafabafababababafabababnjaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababababababababababababacababadababacafabadabababnjaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababababababagagagagagagagababababahababacabahabababacabababnjaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaiaNaNaNaNaNaNaNaiacabababababajagagakagakababafabnjaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalabababacamnjnjoBoCnjnjanagagagnjaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalabababaonjnjoHoIoIoJnjnjnjnjnjnjnjnjaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalababadaonjaLoOoOoOoOoPoQoRoSoToUoVnjaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaiaNaNaNaNaNaNaNaiababababaSnjpaoOpbpbpcoOpdpepfpgpgpgnjaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababaNaNaNaNaNaTagagababaUamnjplpbpmpnpboOpoppoSpqprnjnjaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababaNaNaNaNaNpupvpvpvpvpvoCnjoOpbpwpxpboOpoppnjnjnjnjaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaiaNaNaNaNaNaNaNaNaNpypzpApzpzpzpzpCoOJboOoOoOoOpoppnjnjnjnjaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNpFaVoBpvpvpvoCnjpHpbpbpboOoOpoppnjpIpJpKnjaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNaNaWaNaiababaXnjpRpSpTpSpSoOpUpVpWpXpXpYnjaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjaYabaNaNaNaNaNaNaNaNaNaNaNaNaNaNaZabaonjqfqgqhqiqjoOoOoOnjqkqlpYnjaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNaNaNaNaNalabaonjnjppqtqrqunjqwoOnjnjnjnjnjaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNaNaNaNaNanabababnjnjnjnjnjnjqDqDqEqFqGqHnjaNaNaNaNaNaNaNaNatatatatatatatatatatatatatatatatatatatatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaiabababbababbaXnjqLqMqMqMqMqMnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNalababacababaoqXqMqMqMqMqMqYnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihihihihihihihihihihihihaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatatatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihiiijikiliminihioipiqihaNaNirisisisisisitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauauauataNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihikikikikikikikixiyizihaNaNisiAiBiCiDiEitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauayauataNaNaNaNaNaNaNaNaNaNaNbZdEdEdEdEdEbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZdFdFdFdFdFbZaNaNaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihiLiLikikikiMihiNiOiPihaNaNisiQiRiRiRiQititititaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauauauataNaNaNaNaNaNaNaNaNbZbZbZiZiZiZiZiZjajbjcjcjcjcjcjcjcjcjcjcjcjcjcjbjaiZiZiZiZiZbZbZbZaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihikikikikjdjdihihjeihihaNaNisiQjfjfjfiQitjgjhitaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatatatataFaGaGaGaGaGaGaGaHatataIatataNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpjpjpjpjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihjAjAikjBjCjDihjEjejFihaNaNisiQjGjHjIiQititititititititititititaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataJaJaJaKauauauauauauauauaKaKaKauaJataNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpjpjpjpjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN
ckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihkbikikjBkckdihkekfkgihaNaNisiQkhjHjIiQkikjkkklkmknkjkokpkqkrksaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataKauauauauauauauaMauauauauauauauaJataNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpkBkCkBjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihkJikikikikihihihihihihaNaNisiQkhjHjIiQkKkjknknkLknkjknkrkrkrksaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatbhauauauauauaubibibiauauauauauauaJataNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpkBkTkBjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihkWkXkYkZiklalblcldleihaNaNisiQjHjHjHlflglhknknkLknkjkokpkrkrksaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatbhauauauauaubjbibibibjauauauauauaKataNaNaNaNaNaNaNaNaNbZjljmbZbZbZbZbZjnjojpjpjpjpjpjpjpjpjpjpjpjpjpjqjnbZbZbZbZbZjmjrbZaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihlolplqikikiklrlsltluihaNaNisiQlvjHjHlwlglhknknknknlxknkrkrkrksaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatbhauauauauauaubjbjbjauauauauauauauataNaNaNaNaNaNaNaNaNbZbZbZlBlBlBlBlBlClDjpjpjpjpjpjplEjpjpjpjpjpjplDlClBlBlBlBlBbZbZbZaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihlGlplqikikiklHlIlHlIihaNaNisiQlJjHlKiQkKkjknknkLknkjkokpkrkrksaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauauauauauauauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNbZlWlWlWlWlWbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZlXlXlXlXlXbZaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihlomambkJmcladclumeddihaNaNismgmhmimhmjkikjknknkLknkjknkrkrkrksaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauauaKaJaJaKauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZbZbZaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNihihihihihihihihihihihihaNaNisaNmgmsmjaNmtkjknknmuknkjkokpmvkrksaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatbkatatatatatatatatatatatatatbkatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNititititititititititititititititititaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckbmckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckaackckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatblblatatatatatatatatatatatatatblblatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckaEckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababababababacababababababababababababababababababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbnaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababababacabababababababababababababababababababababababababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababababadababababababababababababaeababacabafababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckawckckckckckaxckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababababababababababababababafabafababababafabababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababababababababababababacababadababacafabadabababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababababababagagagagagagagababababahababacabahabababacabababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaiaNaNaNaNaNaNaNaiacabababababajagagakagakababafabnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalabababacamnjnjoBoCnjnjanagagagnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalabababaonjnjoHoIoIoJnjnjnjnjnjnjnjnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalababadaonjaLoOoOoOoOoPoQoRnjfYjMfZnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaiaNaNaNaNaNaNaNaiababababaSnjpaoOpbpbpcoOpdpepWpXpXganjnjnjnjnjnjnjnjnjnjnjnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababaNaNaNaNaNaTagagababaUamnjplpbpmjNpboOpoppnjpXggnjnjghgjgigxgxhggxgxhxhGnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababaNaNaNaNaNpupvpvpvpvpvoCnjoOpbpwpxpboOpoppnjnjnjnjnjgjgiiuiwiviFiviHiGhxnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaiaNaNaNaNaNaNaNaNaNpypzpApzpzpzpzpCoOJboOoOoOoOpoppnjnjnjnjnjgjiIiwiviJiSiKiviHiTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNpFaVoBpvpvpvoCnjpHpbpbpboOoOpoppoBpvpvpvpvpvpviviJiSiUiSiKiviTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNaNaWaNaiababaXnjpRpSpTpSjOoOpUpViWiViViXiViViWiFiSiYjjjiiSiFiTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjaYabaNaNaNaNaNaNaNaNaNaNaNaNaNaNaZabaonjqfqgqhqiqjoOoOoOoBpvpvpvpvpvpviviJiSjkiSiSiviTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNaNaNaNaNalabaonjnjppqtqrqunjqwoOnjnjnjnjnjgjiIjsiviJiSiKivjtiTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNaNaNaNaNanabababnjnjnjnjnjnjqDqDqEqFqGqHnjgjjvjujsivjwivjtjxjynjaNaNaNatatatatatatatatatatatatatatatatatatatatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaiabababbababbaXnjqLqMqMqMqMqMnjjzgjjvjJjJjKjJjJjyjznjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNalababacababaoqXqMqMqMqMqMqYnjnjnjnjnjnjnjnjnjnjnjnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNalababadbcakamnjrerererererfnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNalababaonjnjnjnjnjnjnjnjnjnjnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbdabababnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
@@ -1453,24 +1482,24 @@ aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbW
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDtaNaNaNaNaNDuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDvDtDwDxDyDyDyDzDwDuDvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDtDADBDCDDDEDFDGDHDADuaNaNaNaNaNaNDuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDIDJDKDKDKDKDKDLDADwDMDwDMDwDMDwDwDuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNDODKDPcQDRDKDSDADTDKDUDKDVDWDXDYDADuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNDZDKEaEbEcDKEdDADKDKDKDKDKDKDKEeDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEfEgEhDKDKDKEhEiDAEjDKEkDKElDWDXDYEfaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDADwDwDKDKDKDwDwDADKDKDKDKDKDKDKEmDAEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDuaNDADwDwDMEoDMDwDwDwDwDwDMEpDMDwDwDwEnaNDtDwEqErErEsDwDuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDADwDwEtDKDKDKDKDKDKDKDKDKDKDKDKEuDAEnaNDtDwEvEwExEyEwEzDwEAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEBDKECDKDKDKDKDKDKDKDKDKDKDKDKDKDKDAaNaNaNEDEEEFEwEwEwEGEDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDADwDwDwDwDwDMEHDMDwDwDwDwDwEIDKDKDAaNaNaNEJEKEwEwEwEwELEJaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEnaNEMDAENEOEPDKDKEQERESETEuDADKDKDAaNaNDtDAEUEwEVEWEwEXDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEYDKDKDKDKDKDKDKDKDKDKEYDKDKDADwEZDwDwDwFaDwDwFaDwDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAFbFcFdDKDKDKFeFeFeDKEHDKDKDAFfEwEwdfDADKDAFhFiFjDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEYDKDKDKDKDKFkDwDwDwDwDADKDKDAEwEwFlFmDADKDAFnFoFpDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAFqFrFsDKFtDAFuFvFwFxDADKDKDAFyEwEwFzDADKDAFAFBFCDNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEYDKDKDKDKFDDAFEFvFvFvFFDKDKDAFGEwEwFHDADKDKDKDKDKEfaNaNaNaNDtDwFIFJFKDwDuaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAFMFNFODKFPDAFQFvFRFSDADKDKDAFTFUEwEwFVDKDKDKDKDKDAaNaNaNDtDwFWFXFXFXFYDwDuaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDtDwDwDwDwDwDwDwDwDwDwDwGaDKDKGbDwDwDwDwDwDwDwDwGcDwDADuaNDtDwFWFXFXFXFXFXFYDADuaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDtDADBDCDDDEDFDGDHDADuaNaNaNaNaNaNDuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDIDJDKDKDKDKDKDLDADwDMDwDMDwDMDwDwDuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNDODKDPcQDRDKDSDADTDKDUDKDVDWDXDYDADuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNDZDKEaEbEcDKEdDADKDKDKDKDKDKDKEeDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEfEgEhDKDKDKEhEiDAEjDKEkDKElDWDXDYEfaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDADwDwDKDKDKDwDwDADKDKDKDKDKDKDKEmDAEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDuaNDADwDwDMEoDMDwDwDwDwDwDMEpDMDwDwDwEnaNDtDwEqErErEsDwDuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDADwDwEtDKDKDKDKDKDKDKDKDKDKDKDKEuDAEnaNDtDwEvEwExEyEwEzDwEAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEBDKECDKDKDKDKDKDKDKDKDKDKDKDKDKDKDAaNaNaNEDEEEFEwEwEwEGEDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDADwDwDwDwDwDMEHDMDwDwDwDwDwEIDKDKDAaNaNaNEJEKEwEwEwEwELEJaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEnaNEMDAENEOEPDKDKEQERESETEuDADKDKDAaNaNDtDAEUEwEVEWEwEXDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWjLbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEYDKDKDKDKDKDKDKDKDKDKEYDKDKDADwEZDwDwDwFaDwDwFaDwDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAFbFcFdDKDKDKFeFeFeDKEHDKDKDAFfEwEwdfDADKDAFhFiFjDAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEYDKDKDKDKDKFkDwDwDwDwDADKDKDAEwEwFlFmDADKDAFnFoFpDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAFqFrFsDKFtDAFuFvFwFxDADKDKDAFyEwEwFzDADKDAFAFBFCDNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEYDKDKDKDKFDDAFEFvFvFvFFDKDKDAFGEwEwFHDADKDKDKDKDKEfaNaNaNaNDtDwFIFJFKDwDuaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAFMFNFODKFPDAFQFvFRFSDADKDKDAFTFUEwEwFVDKDKDKDKDKDAaNaNaNDtDwFWFXFXFXFYDwDuaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDtDwDwDwDwDwDwDwDwDwDwDwGaDKDKGbDwDwDwDwDwDwDwDwGcDwDADuaNDtDwFWFXFXFXFXFXFYDADuaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDtDAGdGeGfGgGhGiGjGbDAGaDKDKDKDKDKDKGbDwDwDwDwDwGaDKGbDwDwGkDwFWFXFXFXGlFXFXFXFYDAaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDIGmDKDKGnDKDKDKDKDKGoDKDKGpGpGpGpDKDKDKDKDKDKDKDKDKDKGqFXFXFXFXFXFXGrGsGtFXFXFXGuaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNGvGwDKDKDKDKDKDKDKGoDKDKGpGpGpGpDKDKDKDKDKDKDKDKDKDKGqFXFXFXFXFXGxGyGrGrGxFXFXGzaNaNaNaNaN
+1
View File
@@ -49,6 +49,7 @@
#define NO_INTORGANS 4096
#define NO_POISON 8192
#define RADIMMUNE 16384
#define ALL_RPARTS 32768
//Species clothing flags
#define HAS_UNDERWEAR 1
+3 -1
View File
@@ -91,4 +91,6 @@
#define POCKET_STRIP_DELAY 40 //time taken (in deciseconds) to search somebody's pockets
#define DEFAULT_ITEM_STRIP_DELAY 40 //time taken (in deciseconds) to strip somebody
#define DEFAULT_ITEM_PUTON_DELAY 20 //time taken (in deciseconsd) to reverse-strip somebody
#define DEFAULT_ITEM_PUTON_DELAY 20 //time taken (in deciseconsd) to reverse-strip somebody
#define IGNORE_ACCESS -1
+1
View File
@@ -46,6 +46,7 @@ proc/random_hair_style(var/gender, species = "Human")
continue
if( !(species in S.species_allowed))
continue
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
if(valid_hairstyles.len)
+1 -1
View File
@@ -357,7 +357,7 @@ proc/checkhtml(var/t)
if(!lentext(string))
return "\[...\]"
else
return string
return html_encode(string) //NO DECODED HTML YOU CHUCKLEFUCKS
else
return "[copytext_preserve_html(string, 1, 37)]..."
+1 -1
View File
@@ -2,7 +2,7 @@
//Head accessory styles
var/global/list/head_accessory_styles_list = list() //stores /datum/sprite_accessory/head_accessory indexed by name
//Marking styles
var/global/list/marking_styles_list = list() //stores /datum/sprite_accessory/horns indexed by name
var/global/list/marking_styles_list = list() //stores /datum/sprite_accessory/body_markings indexed by name
//Hairstyles
var/global/list/hair_styles_list = list() //stores /datum/sprite_accessory/hair indexed by name
var/global/list/hair_styles_male_list = list()
+4 -2
View File
@@ -96,6 +96,8 @@ var/datum/global_hud/global_hud = new()
var/obj/screen/lingchemdisplay
var/obj/screen/lingstingdisplay
var/obj/screen/guardianhealthdisplay
var/obj/screen/blobpwrdisplay
var/obj/screen/blobhealthdisplay
var/obj/screen/vampire_blood_display
@@ -192,8 +194,6 @@ datum/hud/New(mob/owner)
ai_hud()
else if(isrobot(mymob))
robot_hud()
else if(iscorgi(mymob))
corgi_hud()
else if(isobserver(mymob))
ghost_hud()
else if(isovermind(mymob))
@@ -204,6 +204,8 @@ datum/hud/New(mob/owner)
swarmer_hud()
else if(isguardian(mymob))
guardian_hud()
else if(ispet(mymob))
corgi_hud()
//Triggered when F12 is pressed (Unless someone changed something in the DMF)
/mob/verb/button_pressed_F12(var/full = 0 as null)
+9
View File
@@ -856,6 +856,15 @@ var/list/uplink_items = list()
gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
/datum/uplink_item/device_tools/assault_pod
name = "Assault Pod Targetting Device"
desc = "Use to select the landing zone of your assault pod."
item = /obj/item/device/assault_pod
reference = "APT"
cost = 30
gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
/datum/uplink_item/device_tools/shield
name = "Energy Shield"
desc = "An incredibly useful personal shield projector, capable of reflecting energy projectiles and defending against other attacks."
+13 -6
View File
@@ -56,19 +56,19 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/air_doors_activated = 0
var/tele_proof = 0
var/no_teleportlocs = 0
/*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*/
var/list/teleportlocs = list()
/hook/startup/proc/process_teleport_locs()
for(var/area/AR in world)
if(AR.no_teleportlocs) continue
if(teleportlocs.Find(AR.name)) continue
var/list/turfs = get_area_turfs(AR.type)
if(turfs.len)
var/turf/picked = pick(turfs)
if ((picked.z in config.station_levels))
teleportlocs += AR.name
teleportlocs[AR.name] = AR
var/turf/picked = safepick(get_area_turfs(AR.type))
if (picked && (picked.z == ZLEVEL_STATION))
teleportlocs += AR.name
teleportlocs[AR.name] = AR
teleportlocs = sortAssoc(teleportlocs)
@@ -145,6 +145,7 @@ var/list/ghostteleportlocs = list()
//All shuttles show now be under shuttle since we have smooth-wall code.
/area/shuttle
no_teleportlocs = 1
requires_power = 0
/area/shuttle/arrival
@@ -302,6 +303,10 @@ var/list/ghostteleportlocs = list()
name = "\improper Syndicate Elite Shuttle"
icon_state = "shuttlered2"
/area/shuttle/assault_pod
name = "Steel Rain"
icon_state = "shuttle"
/area/shuttle/administration
name = "\improper Administration Shuttle"
icon_state = "shuttlered"
@@ -622,6 +627,7 @@ var/list/ghostteleportlocs = list()
name = "\improper Ninja Area Parent"
icon_state = "ninjabase"
requires_power = 0
no_teleportlocs = 1
/area/ninja/outpost
name = "\improper SpiderClan Outpost"
@@ -634,6 +640,7 @@ var/list/ghostteleportlocs = list()
icon_state = "yellow"
requires_power = 0
lighting_use_dynamic = 0
no_teleportlocs = 1
/area/vox_station/transit
name = "\improper Hyperspace"
+18 -4
View File
@@ -108,13 +108,27 @@
..()
/atom/movable/proc/forceMove(atom/destination)
if(loc)
loc.Exited(src)
var/turf/old_loc = loc
if(old_loc)
old_loc.Exited(src)
loc = destination
if(destination)
loc.Entered(src)
for(var/atom/movable/AM in loc)
destination.Entered(src)
for(var/atom/movable/AM in destination)
AM.Crossed(src)
if(isturf(destination) && opacity)
var/turf/new_loc = destination
new_loc.reconsider_lights()
if(isturf(old_loc) && opacity)
old_loc.reconsider_lights()
for(var/datum/light_source/L in light_sources)
L.source_atom.update_light()
return 1
//called when src is thrown into hit_atom
+1 -12
View File
@@ -137,18 +137,7 @@
useMS.send_pda_message("[P.owner]", "[command_name()] Payroll", msg)
var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger)
if(PM)
PM.play_ringtone()
//Search for holder of the PDA.
var/mob/living/L = null
if(P.loc && isliving(P.loc))
L = P.loc
//Maybe they are a pAI!
else
L = get(P, /mob/living/silicon)
if(L)
L << "\icon[P] <b>Message from [command_name()] (Payroll), </b>\"[msg]\" (<i>Unable to Reply</i>)"
PM.notify("<b>Message from [command_name()] (Payroll), </b>\"[msg]\" (<i>Unable to Reply</i>)", 0)
break
/datum/game_mode/proc/check_finished() //to be called by ticker
@@ -6,17 +6,17 @@
response_help = "passes through"
response_disarm = "flails at"
response_harm = "punches"
icon = 'icons/mob/mob.dmi'
icon_state = "stand"
icon_living = "stand"
icon_dead = "stand"
icon = 'icons/mob/guardian.dmi'
icon_state = "magicOrange"
icon_living = "magicOrange"
icon_dead = "magicOrange"
speed = 0
a_intent = I_HARM
stop_automated_movement = 1
floating = 1
attack_sound = 'sound/weapons/punch1.ogg'
minbodytemp = 0
maxbodytemp = 10000000
maxbodytemp = INFINITY
min_oxy = 0
max_oxy = INFINITY
min_tox = 0
@@ -33,7 +33,6 @@
melee_damage_upper = 15
AIStatus = AI_OFF
var/summoned = FALSE
var/animated_manifest = FALSE
var/cooldown = 0
var/damage_transfer = 1 //how much damage from each attack we transfer to the owner
var/mob/living/summoner
@@ -60,7 +59,7 @@
src << "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]"
visible_message("<span class='danger'>The [src] jumps back to its user.</span>")
Recall()
if(summoned && !summoner)
if(summoned && !summoner && !adminseal)
src << "<span class='danger'>You somehow lack a summoner! As a result, you dispel!</span>"
ghostize()
qdel()
@@ -80,6 +79,17 @@
summoner << "<span class='danger'><B>Your [name] died somehow!</span></B>"
summoner.death()
/mob/living/simple_animal/hostile/guardian/handle_hud_icons_health()
if(summoner)
var/resulthealth
if(iscarbon(summoner))
resulthealth = round((abs(config.health_threshold_dead - summoner.health) / abs(config.health_threshold_dead - summoner.maxHealth)) * 100)
else
resulthealth = round((summoner.health / summoner.maxHealth) * 100)
hud_used.guardianhealthdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#efeeef'>[resulthealth]%</font></div>"
/mob/living/simple_animal/hostile/guardian/adjustBruteLoss(amount) //The spirit is invincible, but passes on damage to the summoner
var/damage = amount * damage_transfer
if (summoner)
@@ -118,20 +128,16 @@
return
if(!summoner) return
if(loc == summoner)
loc = get_turf(summoner)
forceMove(get_turf(summoner))
src.client.eye = loc
cooldown = world.time + 30
if(animated_manifest)
var/end_icon = icon_state
icon_state = "parasite_forming"
spawn(6)
icon_state = end_icon
/mob/living/simple_animal/hostile/guardian/proc/Recall()
if(cooldown > world.time)
return
if(!summoner) return
loc = summoner
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(src))
forceMove(summoner)
buckled = null
cooldown = world.time + 30
@@ -204,8 +210,10 @@
/mob/living/simple_animal/hostile/guardian/proc/ToggleLight()
if(!luminosity)
set_light(3)
src << "<span class='notice'>You activate your light.</span>"
else
set_light(0)
src << "<span class='notice'>You deactivate your light.</span>"
//////////////////////////TYPES OF GUARDIANS
@@ -226,6 +234,7 @@
magic_fluff_string = "..And draw the Wizard, bringer of endless chaos!"
tech_fluff_string = "Boot sequence complete. Crowd control modules activated. Holoparasite swarm online."
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, ready to sow havoc at random."
var/toggle = FALSE
/mob/living/simple_animal/hostile/guardian/fire/Life() //Dies if the summoner dies
..()
@@ -233,13 +242,29 @@
summoner.ExtinguishMob()
summoner.adjust_fire_stacks(-20)
/mob/living/simple_animal/hostile/guardian/fire/ToggleMode()
if(src.loc == summoner)
if(toggle)
src << "You switch to dispersion mode, and will teleport victims away from your master."
toggle = FALSE
else
src << "You switch to deception mode, and will turn your victims against their allies."
toggle = TRUE
/mob/living/simple_animal/hostile/guardian/fire/AttackingTarget()
..()
if(prob(45))
if(istype(target, /atom/movable))
var/atom/movable/M = target
if(!M.anchored && M != summoner)
do_teleport(M, M, 10)
if(..())
if(toggle)
if(ishuman(target) && !summoner)
spawn(0)
new /obj/effect/hallucination/delusion(target.loc, target, force_kind="custom", duration=200, skip_nearby=0, custom_icon = src.icon_state, custom_icon_file = src.icon)
else
if(prob(45))
if(istype(target, /atom/movable))
var/atom/movable/M = target
if(!M.anchored && M != summoner)
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(M))
do_teleport(M, M, 10)
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(M))
/mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj)
..()
@@ -446,7 +471,9 @@
if((Z.temperature > 270) && (Z.temperature < 360))
var/pressure = Z.return_pressure()
if((pressure > 20) && (pressure < 550))
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(A))
do_teleport(A, beacon, 0)
new /obj/effect/overlay/temp/guardian/phase(get_turf(A))
else
src << "<span class='danger'><B>The beacon isn't in a safe location!</span></B>"
else
@@ -476,7 +503,10 @@
ranged_cooldown_cap = 1
projectilesound = 'sound/effects/hit_on_shattered_glass.ogg'
ranged = 1
rapid = 1
range = 13
see_invisible = SEE_INVISIBLE_MINIMUM
see_in_dark = 8
playstyle_string = "As a ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit."
magic_fluff_string = "..And draw the Sentinel, an alien master of ranged combat."
tech_fluff_string = "Boot sequence complete. Ranged combat modules active. Holoparasite swarm online."
@@ -507,6 +537,14 @@
else
src << "<span class='danger'><B>You have to be recalled to toggle modes!</span></B>"
/mob/living/simple_animal/hostile/guardian/ranged/ToggleLight()
if(see_invisible == SEE_INVISIBLE_MINIMUM)
src << "<span class='notice'>You deactivate your night vision.</span>"
see_invisible = SEE_INVISIBLE_LIVING
else
src << "<span class='notice'>You activate your night vision.</span>"
see_invisible = SEE_INVISIBLE_MINIMUM
/mob/living/simple_animal/hostile/guardian/ranged/verb/Snare()
set name = "Set Surveillance Trap"
set category = "Guardian"
@@ -675,7 +713,6 @@
else
gaurdiantype = input(user, "Pick the type of [mob_name]", "[mob_name] Creation") as null|anything in possible_guardians
var/pickedtype = /mob/living/simple_animal/hostile/guardian/punch
var/picked_color = pick("#FFFFFF","#000000","#808080","#A52A2A","#FF0000","#8B0000","#DC143C","#FFA500","#FFFF00","#008000","#00FF00","#006400","#00FFFF","#0000FF","#000080","#008080","#800080","#4B0082")
switch(gaurdiantype)
if("Chaos")
@@ -705,29 +742,42 @@
user.verbs += /mob/living/proc/guardian_comm
user.verbs += /mob/living/proc/guardian_recall
user.verbs += /mob/living/proc/guardian_reset
var/magic_suite = pick("Wands","Cups","Swords","Pentacles")
var/picked_name = pick("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces")
var/color
var/picked_name
var/picked_color = pick("#FFFFFF","#000000","#808080","#A52A2A","#FF0000","#8B0000","#DC143C","#FFA500","#FFFF00","#008000","#00FF00","#006400","#00FFFF","#0000FF","#000080","#008080","#800080","#4B0082")
switch (theme)
if("magic")
G.name = "[mob_name] of [magic_suite]"
G.color = picked_color
G.real_name = "[mob_name] of [magic_suite]"
color = pick("Pink", "Red", "Orange", "Green", "Blue")
picked_name = pick("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces")
G.name = "[picked_name] [color]"
G.real_name = "[picked_name] [color]"
G.icon_living = "[theme][color]"
G.icon_state = "[theme][color]"
G.icon_dead = "[theme][color]"
user << "[G.magic_fluff_string]."
if("tech")
var/colour = pick("orange", "neon", "pink", "red", "blue", "green")
G.name = "[picked_name] [capitalize(colour)]"
G.real_name = "[picked_name] [capitalize(colour)]"
G.icon_living = "parasite[colour]"
G.icon_state = "parasite[colour]"
G.icon_dead = "parasite[colour]"
G.animated_manifest = TRUE
color = pick("Rose", "Peony", "Lily", "Daisy", "Zinnia", "Ivy", "Iris", "Petunia", "Violet", "Lilac", "Orchid") //technically not colors, just flowers that can be specific colors
picked_name = pick("Gallium", "Indium", "Thallium", "Bismuth", "Aluminium", "Mercury", "Iron", "Silver", "Zinc", "Titanium", "Chromium", "Nickel", "Platinum", "Tellurium", "Palladium", "Rhodium", "Cobalt", "Osmium", "Tungsten", "Iridium")
G.name = "[picked_name] [color]"
G.real_name = "[picked_name] [color]"
G.icon_living = "[theme][color]"
G.icon_state = "[theme][color]"
G.icon_dead = "[theme][color]"
user << "[G.tech_fluff_string]."
G.speak_emote = list("states")
if("bio")
G.icon = 'icons/mob/mob.dmi'
picked_name = pick("brood", "hive", "nest")
user << "[G.bio_fluff_string]."
G.name = "[mob_name] [picked_name]"
G.name = "[picked_name] swarm"
G.color = picked_color
G.real_name = "[mob_name] [picked_name]"
G.real_name = "[picked_name] swarm"
G.icon_living = "headcrab"
G.icon_state = "headcrab"
G.attacktext = "swarms"
@@ -798,17 +848,17 @@
///HUD
/datum/hud/proc/guardian_hud(ui_style = 'icons/mob/screen1_midnight.dmi')
/datum/hud/proc/guardian_hud(ui_style = 'icons/mob/screen1_Midnight.dmi')
adding = list()
var/obj/screen/using
guardianhealthdisplay = new /obj/screen/guardian()
guardianhealthdisplay.name = "summoner health"
guardianhealthdisplay.screen_loc = ui_health
guardianhealthdisplay.mouse_opacity = 0
adding += guardianhealthdisplay
using = new /obj/screen/guardian/Manifest()
using.screen_loc = ui_rhand
adding += using
@@ -834,12 +884,11 @@
mymob.client.screen += adding
//HUD BUTTONS
/obj/screen/guardian
icon = 'icons/mob/guardian.dmi'
icon_state = "base"
/obj/screen/guardian/Manifest
icon_state = "manifest"
@@ -882,6 +931,7 @@
var/mob/living/simple_animal/hostile/guardian/G = usr
G.Communicate()
/obj/screen/guardian/ToggleLight
icon_state = "light"
name = "Toggle Light"
+1 -3
View File
@@ -107,9 +107,7 @@ datum/game_mode/mutiny
var/datum/data/pda/app/messenger/pdam = pda.find_program(/datum/data/pda/app/messenger)
if(pdam)
pdam.play_ringtone()
head_mutineer.current << fluff.get_pda_body()
pdam.notify(fluff.get_pda_body(), 0)
return 1
proc/get_equipment_slots()
+32 -32
View File
@@ -108,63 +108,61 @@
//returns 1 if this mob has sufficient access to use this object
/obj/proc/allowed(mob/M)
//check if it doesn't require any access at all
if(src.check_access(null))
generate_req_lists()
//check if we don't require any access at all
if(check_access())
return 1
if(istype(M, /mob/living/silicon))
//AI can do whatever he wants
return 1
else if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
//if they are holding or wearing a card that has access, that works
if(src.check_access(H.get_active_hand()) || src.check_access(H.wear_id))
return 1
else if(istype(M, /mob/living/carbon/alien/humanoid))
var/mob/living/carbon/george = M
//they can only hold things :(
if(src.check_access(george.get_active_hand()))
return 1
var/acc = M.get_access() //see mob.dm
if(acc == IGNORE_ACCESS)
return 1 //Mob ignores access
else
return check_access_list(acc)
return 0
/obj/item/proc/GetAccess()
return list()
/obj/item/proc/GetID()
return null
/obj/proc/check_access(obj/item/I)
/obj/proc/generate_req_lists()
//These generations have been moved out of /obj/New() because they were slowing down the creation of objects that never even used the access system.
if(!src.req_access)
src.req_access = list()
if(src.req_access_txt)
var/list/req_access_str = text2list(req_access_txt,";")
if(!req_access)
req_access = list()
if(req_access_txt)
var/list/req_access_str = text2list(req_access_txt, ";")
for(var/x in req_access_str)
var/n = text2num(x)
if(n)
req_access += n
if(!src.req_one_access)
src.req_one_access = list()
if(src.req_one_access_txt)
if(!req_one_access)
req_one_access = list()
if(req_one_access_txt)
var/list/req_one_access_str = text2list(req_one_access_txt,";")
for(var/x in req_one_access_str)
var/n = text2num(x)
if(n)
req_one_access += n
if(!istype(src.req_access, /list)) //something's very wrong
/obj/proc/check_access(obj/item/I)
if(!istype(req_access, /list))
return 1
var/list/L = src.req_access
if(!L.len && (!src.req_one_access || !src.req_one_access.len)) //no requirements
if(!req_access.len && (!req_one_access || !req_one_access.len))
return 1
if(!I)
return 0
for(var/req in src.req_access)
if(!(req in I.GetAccess())) //doesn't have this access
return 0
if(src.req_one_access && src.req_one_access.len)
for(var/req in src.req_one_access)
if(req_one_access && req_one_access.len)
for(var/req in req_one_access)
if(req in I.GetAccess()) //has an access from the single access list
return 1
return 0
@@ -172,10 +170,12 @@
/obj/proc/check_access_list(var/list/L)
if(!req_access) req_access = list()
if(!req_one_access) req_one_access = list()
if(!L) return 0
if(!istype(L, /list)) return 0
generate_req_lists()
if(!L)
return 0
if(!istype(L, /list))
return 0
return has_access(req_access, req_one_access, L)
/proc/has_access(var/list/req_access, var/list/req_one_access, var/list/accesses)
+3
View File
@@ -389,6 +389,8 @@
organStatus["splinted"] = 1
if(E.status & ORGAN_BLEEDING)
organStatus["bleeding"] = 1
if(E.status & ORGAN_DEAD)
organStatus["dead"] = 1
organData["status"] = organStatus
@@ -415,6 +417,7 @@
organData["bruised"] = I.min_broken_damage
organData["broken"] = I.min_bruised_damage
organData["robotic"] = I.robotic
organData["dead"] = (I.status & ORGAN_DEAD)
intOrganData.Add(list(organData))
+14 -1
View File
@@ -43,7 +43,8 @@
"Medical",
"Miscellaneous",
"Security",
"Tools"
"Tools",
"Imported"
)
/obj/machinery/autolathe/New()
@@ -128,6 +129,18 @@
if (stat)
return 1
if(istype(O, /obj/item/weapon/disk/design_disk))
user.visible_message("[user] begins to load \the [O] in \the [src]...",
"You begin to load a design from \the [O]...",
"You hear the chatter of a floppy drive.")
busy = 1
var/obj/item/weapon/disk/design_disk/D = O
if(do_after(user, 14.4, target = src))
files.AddDesign2Known(D.blueprint)
busy = 0
return
var/material_amount = materials.get_item_material_amount(O)
if(!material_amount)
user << "<span class='warning'>This object does not contain sufficient amounts of metal or glass to be accepted by the autolathe.</span>"
+54 -13
View File
@@ -22,17 +22,18 @@
var/defaultmsg = "<span class='notice'>Welcome. Please select an option.</span>"
var/rebootmsg = "<span class='warning'>%$&(£: Critical %$$@ Error // !RestArting! <lOadiNg backUp iNput ouTput> - ?pLeaSe wAit!</span>"
//Computer properties
var/screen = 0 // 0 = Main menu, 1 = Message Logs, 2 = Hacked screen, 3 = Custom Message
var/screen = 0 // 0 = Main menu, 1 = Message Logs, 2 = Hacked screen, 3 = Custom Message, 4 = chat room selection, 5 = chat room logs
var/hacking = 0 // Is it being hacked into by the AI/Cyborg
var/emag = 0 // When it is emagged.
var/message = "<span class='notice'>System bootup complete. Please select an option.</span>" // The message that shows on the main menu.
var/auth = 0 // Are they authenticated?
var/optioncount = 7
var/optioncount = 8
// Custom Message Properties
var/customsender = "System Administrator"
var/obj/item/device/pda/customrecepient = null
var/customjob = "Admin"
var/custommessage = "This is a test, please ignore."
var/datum/chatroom/current_chatroom = null
light_color = LIGHT_COLOR_DARKGREEN
@@ -130,6 +131,7 @@
dat += "<dd><A href='?src=\ref[src];clearr=1'>&#09;[++i]. Clear Request Console Logs</a><br></dd>"
dat += "<dd><A href='?src=\ref[src];pass=1'>&#09;[++i]. Set Custom Key</a><br></dd>"
dat += "<dd><A href='?src=\ref[src];msg=1'>&#09;[++i]. Send Admin Message</a><br></dd>"
dat += "<dd><A href='?src=\ref[src];chatroom=1'>&#09;[++i]. View Chatrooms</a><br></dd>"
else
for(var/n = ++i; n <= optioncount; n++)
dat += "<dd><font color='blue'>&#09;[n]. ---------------</font><br></dd>"
@@ -247,7 +249,41 @@
dat += {"<tr><td width = '5%'><center><A href='?src=\ref[src];deleter=\ref[rc]' style='color: rgb(255,0,0)'>X</a></center></td><td width='15%'>[rc.send_dpt]</td>
<td width='15%'>[rc.rec_dpt]</td><td width='300px'>[rc.message]</td><td width='15%'>[rc.stamp]</td><td width='15%'>[rc.id_auth]</td><td width='15%'>[rc.priority]</td></tr>"}
dat += "</table>"
//Chat room list
if(5)
dat += "<center><A href='?src=\ref[src];back=1'>Back</a> - <A href='?src=\ref[src];refresh=1'>Refresh</center><hr>"
dat += {"<table border='1' width='100%'>
<tr>
<th width='40%'>Room Name</th>
<th width='20%'>Users</th>
<th width='20%'>Invites</th>
<th width='20%'>Messages</th>
</tr>"}
for(var/datum/chatroom/C in chatrooms)
var/list/invites = (C.invites - C.users)
dat += {"<tr>
<td><a href='?src=\ref[src];viewroom=\ref[C]'>[C.name]</a></td>
<td>[C.users.len]</td>
<td>[invites.len]</td>
<td>[C.logs.len]</td>
</tr>"}
dat += "</table>"
//View chat room logs
if(6)
dat += "<center><A href='?src=\ref[src];chatroom=1'>Back</a> - <A href='?src=\ref[src];refresh=1'>Refresh</center><hr>"
dat += {"<table border='1' width='100%'>
<tr>
<th width='25%'>Name</th>
<th width='75%'>Message</th>
</tr>"}
if(current_chatroom)
for(var/M in current_chatroom.logs)
var/list/message = M
dat += {"<tr>
<td>[message["username"]]</td>
<td>[message["message"]]</td>
</tr>"}
dat += "</table>"
dat += "</body>"
message = defaultmsg
@@ -459,12 +495,8 @@
//Sender isn't faking as someone who exists
if(isnull(PDARec))
src.linkedServer.send_pda_message("[customrecepient.owner]", "[customsender]","[custommessage]")
recipient_messenger.play_ringtone()
if( customrecepient.loc && ishuman(customrecepient.loc) )
var/mob/living/carbon/human/H = customrecepient.loc
H << "\icon[customrecepient] <b>Message from [customsender] ([customjob]), </b>\"[custommessage]\" (<a href='byond://?src=\ref[src];choice=Message;target=\ref[src]'>Reply</a>)"
recipient_messenger.notify("<b>Message from [customsender] ([customjob]), </b>\"[custommessage]\" (<a href='?src=\ref[src];choice=Message;target=\ref[src]'>Reply</a>)")
log_pda("[usr] (PDA: [customsender]) sent \"[custommessage]\" to [customrecepient.owner]")
recipient_messenger.set_new(1)
//Sender is faking as someone who exists
else
src.linkedServer.send_pda_message("[customrecepient.owner]", "[PDARec.owner]","[custommessage]")
@@ -473,12 +505,8 @@
if(!recipient_messenger.conversations.Find("\ref[PDARec]"))
recipient_messenger.conversations.Add("\ref[PDARec]")
recipient_messenger.play_ringtone()
if( customrecepient.loc && ishuman(customrecepient.loc) )
var/mob/living/carbon/human/H = customrecepient.loc
H << "\icon[customrecepient] <b>Message from [PDARec.owner] ([customjob]), </b>\"[custommessage]\" (<a href='byond://?src=\ref[recipient_messenger];choice=Message;target=\ref[PDARec]'>Reply</a>)"
recipient_messenger.notify("<b>Message from [PDARec.owner] ([customjob]), </b>\"[custommessage]\" (<a href='?src=\ref[recipient_messenger];choice=Message;target=\ref[PDARec]'>Reply</a>)")
log_pda("[usr] (PDA: [PDARec.owner]) sent \"[custommessage]\" to [customrecepient.owner]")
recipient_messenger.set_new(1)
//Finally..
ResetMessage()
@@ -494,6 +522,19 @@
if (href_list["back"])
src.screen = 0
// View chat room list
if (href_list["chatroom"])
if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
else if(auth)
screen = 5
if (href_list["viewroom"])
if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
else if(auth)
current_chatroom = locate(href_list["viewroom"])
if(current_chatroom)
screen = 6
return src.attack_hand(usr)
-74
View File
@@ -1,74 +0,0 @@
/obj/machinery/computer/emergency_shuttle
name = "emergency shuttle console"
desc = "For shuttle control."
icon_screen = "shuttle"
icon_keyboard = "tech_key"
var/auth_need = 3
var/list/authorized = list()
/obj/machinery/computer/emergency_shuttle/attackby(obj/item/weapon/card/W, mob/user, params)
if(stat & (BROKEN|NOPOWER)) return
if(!istype(W, /obj/item/weapon/card))
return
if(shuttle_master.emergency.mode != SHUTTLE_DOCKED)
return
if(!user)
return
if(shuttle_master.emergency.timeLeft() < 11)
return
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (istype(W, /obj/item/device/pda))
var/obj/item/device/pda/pda = W
W = pda.id
if (!W:access) //no access
user << "The access level of [W:registered_name]\'s card is not high enough. "
return
var/list/cardaccess = W:access
if(!istype(cardaccess, /list) || !cardaccess.len) //no access
user << "The access level of [W:registered_name]\'s card is not high enough. "
return
if(!(access_heads in W:access)) //doesn't have this access
user << "The access level of [W:registered_name]\'s card is not high enough. "
return 0
var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort")
if(shuttle_master.emergency.mode != SHUTTLE_DOCKED || user.get_active_hand() != W)
return 0
var/seconds = shuttle_master.emergency.timeLeft()
if(seconds <= 10)
return 0
switch(choice)
if("Authorize")
if(!authorized.Find(W:registered_name))
authorized += W:registered_name
if(auth_need - authorized.len > 0)
message_admins("[key_name_admin(user)] has authorized early shuttle launch.")
log_game("[key_name(user)] has authorized early shuttle launch in ([x], [y], [z]).")
minor_announcement.Announce("[auth_need - authorized.len] more authorization(s) needed until shuttle is launched early")
else
message_admins("[key_name_admin(user)] has launched the emergency shuttle [seconds] seconds before launch.")
log_game("[key_name(user)] has launched the emergency shuttle in ([x], [y], [z]) [seconds] seconds before launch.")
minor_announcement.Announce("The emergency shuttle will launch in 10 seconds")
shuttle_master.emergency.setTimer(100)
if("Repeal")
if(authorized.Remove(W:registered_name))
minor_announcement.Announce("[auth_need - authorized.len] authorizations needed until shuttle is launched early")
if("Abort")
if(authorized.len)
minor_announcement.Announce("All authorizations to launch the shuttle early have been revoked.")
authorized.Cut()
/obj/machinery/computer/emergency_shuttle/emag_act(mob/user)
if(!emagged && shuttle_master.emergency.mode == SHUTTLE_DOCKED)
var/time = shuttle_master.emergency.timeLeft()
message_admins("[key_name_admin(user)] has emagged the emergency shuttle: [time] seconds before launch.")
log_game("[key_name(user)] has emagged the emergency shuttle in ([x], [y], [z]): [time] seconds before launch.")
minor_announcement.Announce("The emergency shuttle will launch in 10 seconds", "SYSTEM ERROR:")
shuttle_master.emergency.setTimer(100)
emagged = 1
+18 -8
View File
@@ -431,18 +431,22 @@
/obj/machinery/gun_turret/proc/take_damage(damage)
health -= damage
switch(health)
if(101 to INFINITY)
state = 0
if(1 to 100)
state = 1
if(-INFINITY to 0)
var/orig_health = initial(health)
var/health_percent = (health/orig_health) * 100
if(health_percent > 50)
state = 0
else
state = 1
if(health_percent <= 0)
if(state != 2)
die()
return
state = 2
update_icon()
return
/obj/machinery/gun_turret/bullet_act(var/obj/item/projectile/Proj)
@@ -566,4 +570,10 @@
/obj/machinery/gun_turret/grenade
name = "mounted grenade launcher (40mm)"
desc = "Syndicate 40mm grenade launcher defense turret. If you've had this much time to look at it, you're probably already dead."
bullet_type = /obj/item/projectile/bullet/a40mm
bullet_type = /obj/item/projectile/bullet/a40mm
/obj/machinery/gun_turret/assault_pod
name = "machine gun turret (4.6x30mm)"
desc = "Syndicate exterior defense turret chambered for 4.6x30mm rounds. Designed to be fitted to assault pods, it uses low calliber bullets to save space."
health = 100
bullet_type = /obj/item/projectile/bullet/weakbullet3
+1
View File
@@ -1026,6 +1026,7 @@
/obj/item/clothing/glasses/monocle =1,/obj/item/clothing/head/bowlerhat = 1,/obj/item/weapon/cane = 1,/obj/item/clothing/under/sl_suit = 1,
/obj/item/clothing/mask/fakemoustache = 1,/obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 1,/obj/item/clothing/head/plaguedoctorhat = 1,/obj/item/clothing/mask/gas/plaguedoctor = 1,
/obj/item/clothing/suit/apron = 1,/obj/item/clothing/under/waiter = 1,/obj/item/clothing/suit/jacket/miljacket = 1,
/obj/item/clothing/suit/jacket/miljacket/white = 1, /obj/item/clothing/suit/jacket/miljacket/desert = 1, /obj/item/clothing/suit/jacket/miljacket/navy = 1,
/obj/item/clothing/under/pirate = 1,/obj/item/clothing/suit/pirate_brown = 1,/obj/item/clothing/suit/pirate_black =1,/obj/item/clothing/under/pirate_rags =1,/obj/item/clothing/head/pirate = 1,/obj/item/clothing/head/bandana = 1,
/obj/item/clothing/head/bandana = 1,/obj/item/clothing/under/soviet = 1,/obj/item/clothing/head/ushanka = 1,/obj/item/clothing/suit/imperium_monk = 1,
/obj/item/clothing/mask/gas/cyborg = 1,/obj/item/clothing/suit/holidaypriest = 1,/obj/item/clothing/head/wizard/marisa/fake = 1,
+10
View File
@@ -43,6 +43,16 @@
icon_state = "purplecrack"
duration = 6
/obj/effect/overlay/temp/guardian
randomdir = 0
/obj/effect/overlay/temp/guardian/phase
duration = 5
icon_state = "phasein"
/obj/effect/overlay/temp/guardian/phase/out
icon_state = "phaseout"
/obj/effect/overlay/temp/emp
name = "emp sparks"
icon = 'icons/effects/effects.dmi'
@@ -95,6 +95,10 @@
if(!get_location_accessible(H, "mouth"))
user << "<span class='warning'>The mask is in the way.</span>"
return
if(H.species && H.species.flags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, but doesn't have one...
if(!H.client.prefs.rlimb_data["head"])
user << "<span class='warning'>You find yourself disappointed at the appalling lack of facial hair.</span>"
return
if(H.f_style == "Shaved")
user << "<span class='notice'>Already clean-shaven.</span>"
return
@@ -123,6 +127,10 @@
if(!get_location_accessible(H, "head"))
user << "<span class='warning'>The headgear is in the way.</span>"
return
if(H.species && H.species.flags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, but doesn't have one...
if(!H.client.prefs.rlimb_data["head"])
user << "<span class='warning'>You find yourself disappointed at the appalling lack of hair.</span>"
return
if(H.h_style == "Bald" || H.h_style == "Balding Hair" || H.h_style == "Skinhead")
user << "<span class='notice'>There is not enough hair left to shave...</span>"
return
+16 -2
View File
@@ -34,8 +34,14 @@
if(H.species)
for(var/i in facial_hair_styles_list)
var/datum/sprite_accessory/facial_hair/tmp_facial = facial_hair_styles_list[i]
if(H.species.name in tmp_facial.species_allowed)
if(H.species.name in tmp_facial.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human hair styles.
species_facial_hair += i
else
if(H.species.flags & ALL_RPARTS)
if(("head" in H.client.prefs.rlimb_data) && ("Human" in tmp_facial.species_allowed))
species_facial_hair += i
else
return
else
species_facial_hair = facial_hair_styles_list
var/f_new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in species_facial_hair
@@ -44,8 +50,16 @@
if(H.species)
for(var/i in hair_styles_list)
var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i]
if(H.species.name in tmp_hair.species_allowed)
if(H.species.name in tmp_hair.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human facial hair styles.
if((H.species.flags & ALL_RPARTS) && !("head" in H.client.prefs.rlimb_data))
return
species_hair += i
else
if(H.species.flags & ALL_RPARTS)
if(("head" in H.client.prefs.rlimb_data) && ("Human" in tmp_hair.species_allowed))
species_facial_hair += i
else
return
else
species_hair = hair_styles_list
var/h_new_style = input(user, "Select a hair style", "Grooming") as null|anything in species_hair
+1 -1
View File
@@ -113,7 +113,7 @@
_y = min
var/turf/T = locate(_x, _y, _z)
AM.loc = T
AM.forceMove(T)
AM.newtonian_move(dir)
+23 -3
View File
@@ -446,7 +446,7 @@ var/list/admin_verbs_proccall = list (
/client/proc/big_brother()
set category = "Admin"
set name = "Big Brother Mode"
if(!check_rights(R_PERMISSIONS))
return
@@ -809,7 +809,17 @@ var/list/admin_verbs_proccall = list (
return
if(!istype(H))
return
if(istype(H, /mob/living/carbon/brain))
var/mob/living/carbon/brain/B = H
if(istype(B.container, /obj/item/device/mmi/posibrain/ipc))
var/obj/item/device/mmi/posibrain/ipc/C = B.container
var/obj/item/organ/internal/brain/mmi_holder/posibrain/P = C.loc
if(istype(P.owner, /mob/living/carbon/human))
H = P.owner
else
return
else
return
if(holder)
admin_log_and_message_admins("is altering the appearance of [H].")
@@ -825,7 +835,17 @@ var/list/admin_verbs_proccall = list (
return
if(!istype(H))
return
if(istype(H, /mob/living/carbon/brain))
var/mob/living/carbon/brain/B = H
if(istype(B.container, /obj/item/device/mmi/posibrain/ipc))
var/obj/item/device/mmi/posibrain/ipc/C = B.container
var/obj/item/organ/internal/brain/mmi_holder/posibrain/P = C.loc
if(istype(P.owner, /mob/living/carbon/human))
H = P.owner
else
return
else
return
if(!H.client)
usr << "Only mobs with clients can alter their own appearance."
+29 -9
View File
@@ -91,7 +91,10 @@
// To stop any procs which sleep from executing slowly.
if(d)
if(hascall(d, v))
spawn() call(d, v)(arglist(args_list)) // Spawn in case the function sleeps.
var/list/arguments[0]
for(var/list/arg in args_list)
arguments += SDQL_expression(d, arg)
spawn() call(d, v)(arglist(arguments)) // Spawn in case the function sleeps.
if("delete")
for(var/datum/d in objs)
@@ -357,22 +360,39 @@
return list("val" = val, "i" = i)
/proc/SDQL_var(datum/object, list/expression, start = 1)
var/v
if(expression[start] in object.vars)
if(start < expression.len && expression[start + 1] == ".")
return SDQL_var(object.vars[expression[start]], expression[start + 2])
v = object.vars[expression[start]]
else if(expression[start] == "src")
v = object
else if(expression[start] == "usr")
v = usr
else if(expression[start] == "marked")
if(usr.client && usr.client.holder && usr.client.holder.marked_datum)
v = usr.client.holder.marked_datum
else
return object.vars[expression[start]]
return null
else if(expression[start] == "\[" && start < expression.len)
if(lowertext(copytext(expression[start + 1], 1, 3)) != "0x")
usr << "<span class='danger'>Invalid ref syntax: [expression[start + 1]]</span>"
return null
v = locate("\[[expression[start + 1]]\]")
if(!v)
usr << "<span class='danger'>Invalid ref: [expression[start + 1]]</span>"
return null
start++
else
return null
if(start < expression.len && expression[start + 1] == ".")
return SDQL_var(v, expression[start + 2])
else
return v
/proc/SDQL2_tokenize(query_text)
var/list/whitespace = list(" ", "\n", "\t")
var/list/single = list("(", ")", ",", "+", "-", ".", ";")
var/list/single = list("(", ")", ",", "+", "-", ".", ";", "\[", "\]")
var/list/multi = list(
"=" = list("", "="),
"<" = list("", "=", ">"),
@@ -25,7 +25,7 @@
//
// assignments : assignment, [',' assignments]
// assignment : <variable name> '=' expression
// variable : <variable name> | <variable name> '.' variable
// variable : <variable name> | <variable name> '.' variable | '[' <hex number> ']' | '[' <hex number> ']' '.' variable
//
// bool_expression : expression comparitor expression [bool_operator bool_expression]
// expression : ( unary_expression | '(' expression ')' | value ) [binary_operator expression]
@@ -336,6 +336,13 @@
variable(i, list/node)
var/list/L = list(token(i))
node[++node.len] = L
if(token(i) == "\[")
L += token(i + 1)
i += 2
if(token(i) != "\]")
parse_error("Missing \] at end of reference.")
if(token(i + 1) == ".")
L += "."
@@ -397,16 +404,20 @@
//call_function: <function name> ['(' [arguments] ')']
call_function(i, list/node, list/arguments)
var/list/cur_argument = list()
if(length(tokenl(i)))
node += token(i++)
if(token(i) != "(")
parse_error("Expected ( but found '[token(i)]'")
else if(token(i + 1) != ")")
do
i = expression(i + 1, arguments)
i = expression(i + 1, cur_argument)
if(token(i) == ",")
arguments += list(cur_argument)
cur_argument = list()
continue
while(token(i) && token(i) != ")")
arguments += list(cur_argument)
else
i++
else
@@ -515,7 +526,11 @@
if(token(i) == "null")
node += "null"
i++
else if(lowertext(copytext(token(i), 1, 3)) == "0x" && isnum(hex2num(copytext(token(i), 3))))
node += hex2num(copytext(token(i), 3))
i++
else if(isnum(text2num(token(i))))
node += text2num(token(i))
i++
+115 -43
View File
@@ -255,7 +255,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
// dat += "Skin pattern: <a href='byond://?src=\ref[user];preference=skin_style;task=input'>Adjust</a><br>"
dat += "<br><b>Handicaps</b><br>"
dat += "\t<a href='?_src_=prefs;preference=disabilities'><b>\[Set Disabilities\]</b></a><br>"
dat += "Limbs: <a href='?_src_=prefs;preference=limbs;task=input'>Adjust</a><br>"
dat += "Limbs and Parts: <a href='?_src_=prefs;preference=limbs;task=input'>Adjust</a><br>"
if(species != "Slime People" && species != "Machine")
dat += "Internal Organs: <a href='?_src_=prefs;preference=organs;task=input'>Adjust</a><br>"
@@ -266,6 +266,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/status = organ_data[name]
var/organ_name = null
switch(name)
if("chest")
organ_name = "torso"
if("groin")
organ_name = "lower body"
if("head")
organ_name = "head"
if("l_arm")
organ_name = "left arm"
if("r_arm")
@@ -296,7 +302,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
R = all_robolimbs[rlimb_data[name]]
else
R = basic_robolimb
dat += "\t[R.company] [organ_name] prothesis"
dat += "\t[R.company] [organ_name] prosthesis"
else if(status == "amputated")
@@ -350,7 +356,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "[TextPreview(flavor_text)]...<br>"
dat += "<br>"
if((species in list("Unathi", "Vulpkanin", "Tajaran"))) //Species that have head accessories.
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have head accessories.
var/headaccessoryname = "Head Accessory"
if(species == "Unathi")
headaccessoryname = "Horns"
@@ -358,23 +364,22 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<a href='?_src_=prefs;preference=headaccessory;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_headacc, 2)][num2hex(g_headacc, 2)][num2hex(b_headacc, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_headacc, 2)][num2hex(g_headacc, 2)][num2hex(b_headacc)]'><tr><td>__</td></tr></table></font> "
dat += "Style: <a href='?_src_=prefs;preference=ha_style;task=input'>[ha_style]</a><br>"
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have body markings.
dat += "<br><b>Body Markings</b><br>"
dat += "<a href='?_src_=prefs;preference=markings;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_markings, 2)][num2hex(g_markings, 2)][num2hex(b_markings, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_markings, 2)][num2hex(g_markings, 2)][num2hex(b_markings)]'><tr><td>__</td></tr></table></font> "
dat += "<br>Style: <a href='?_src_=prefs;preference=m_style;task=input'>[m_style]</a><br>"
var/hairname = "Hair"
if(species == "Machine")
hairname = "Frame Color"
dat += "<br><b>[hairname]</b><br>"
dat += "<br><b>Hair</b><br>"
dat += "<a href='?_src_=prefs;preference=hair;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_hair, 2)][num2hex(g_hair, 2)][num2hex(b_hair, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_hair, 2)][num2hex(g_hair, 2)][num2hex(b_hair)]'><tr><td>__</td></tr></table></font> "
dat += " <br>Style: <a href='?_src_=prefs;preference=h_style;task=input'>[h_style]</a><br>"
dat += "<br><b>Facial</b><br>"
dat += "<br><b>Facial Hair</b><br>"
dat += "<a href='?_src_=prefs;preference=facial;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_facial, 2)][num2hex(g_facial, 2)][num2hex(b_facial, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_facial, 2)][num2hex(g_facial, 2)][num2hex(b_facial)]'><tr><td>__</td></tr></table></font> "
dat += " <br>Style: <a href='?_src_=prefs;preference=f_style;task=input'>[f_style]</a><br>"
dat += " <br>Style: <a href='?_src_=prefs;preference=f_style;task=input'>[f_style ? "[f_style]" : "Shaved"]</a><br>"
dat += "<br><b>Eyes</b><br>"
dat += "<a href='?_src_=prefs;preference=eyes;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes)]'><tr><td>__</td></tr></table></font><br>"
if(species != "Machine")
dat += "<br><b>Eyes</b><br>"
dat += "<a href='?_src_=prefs;preference=eyes;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes)]'><tr><td>__</td></tr></table></font><br>"
if((species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) //admins can always fuck with this, because they are admins
dat += "<br><b>Body Color</b><br>"
@@ -1060,7 +1065,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN)
if("species")
var/list/new_species = list("Human","Tajaran","Skrell","Unathi","Diona", "Vulpkanin")
var/list/new_species = list("Human", "Tajaran", "Skrell", "Unathi", "Diona", "Vulpkanin")
var/prev_species = species
// var/whitelisted = 0
@@ -1085,8 +1090,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
continue
if(gender == FEMALE && S.gender == MALE)
continue
if( !(species in S.species_allowed))
if(!(species in S.species_allowed))
continue
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
if(valid_hairstyles.len)
@@ -1103,7 +1109,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
continue
if(gender == FEMALE && S.gender == MALE)
continue
if( !(species in S.species_allowed))
if(!(species in S.species_allowed))
continue
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
@@ -1138,6 +1144,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
m_style = "None" // No Unathi markings on Tajara
body_accessory = null //no vulptail on humans damnit
//Reset prosthetics.
organ_data = list()
rlimb_data = list()
if("speciesprefs")//oldvox code
speciesprefs = !speciesprefs
@@ -1176,7 +1186,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if("hair")
if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell" || species == "Machine" || species == "Vulpkanin")
var/input = "Choose your character's hair colour:"
if(species == "Machine")
if(species == "Machine" && !("head" in rlimb_data))
input = "Choose your character's frame colour:"
var/new_hair = input(user, input, "Character Preference", rgb(r_hair, g_hair, b_hair)) as color|null
if(new_hair)
@@ -1188,17 +1198,31 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/list/valid_hairstyles = list()
for(var/hairstyle in hair_styles_list)
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
if( !(species in S.species_allowed))
continue
if(species == "Machine") //Species that can use prosthetic heads.
if(species in S.species_allowed)
if(!rlimb_data["head"])
valid_hairstyles[hairstyle] = S
continue
else
continue
else
if(!rlimb_data["head"])
continue
else if("Human" in S.species_allowed)
valid_hairstyles[hairstyle] = S
continue
else
if(!(species in S.species_allowed))
continue
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
valid_hairstyles[hairstyle] = S
var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_hairstyles
if(new_h_style)
h_style = new_h_style
if("headaccessory")
if((species in list("Unathi", "Vulpkanin", "Tajaran"))) // Species with head accessories
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) // Species with head accessories
var/input = "Choose the colour of your your character's head accessory:"
var/new_head_accessory = input(user, input, "Character Preference", rgb(r_headacc, g_headacc, b_headacc)) as color|null
if(new_head_accessory)
@@ -1207,11 +1231,11 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
b_headacc = hex2num(copytext(new_head_accessory, 6, 8))
if("ha_style")
if((species in list("Unathi", "Vulpkanin", "Tajaran"))) // Species with head accessories
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) // Species with head accessories
var/list/valid_head_accessory_styles = list()
for(var/head_accessory_style in head_accessory_styles_list)
var/datum/sprite_accessory/H = head_accessory_styles_list[head_accessory_style]
if( !(species in H.species_allowed))
if(!(species in H.species_allowed))
continue
valid_head_accessory_styles[head_accessory_style] = head_accessory_styles_list[head_accessory_style]
@@ -1221,8 +1245,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
ha_style = new_head_accessory_style
if("markings")
if((species in list("Unathi", "Vulpkanin", "Tajaran"))) // Species with markings
var/input = "Choose the colour of your your character's body markings:"
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) // Species with markings
var/input = "Choose the colour of your your character's markings:"
var/new_markings = input(user, input, "Character Preference", rgb(r_markings, g_markings, b_markings)) as color|null
if(new_markings)
r_markings = hex2num(copytext(new_markings, 2, 4))
@@ -1230,16 +1254,22 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
b_markings = hex2num(copytext(new_markings, 6, 8))
if("m_style")
if((species in list("Unathi", "Vulpkanin", "Tajaran"))) // Species with markings
if(species in list("Unathi", "Vulpkanin", "Tajaran")) // Species with markings
var/list/valid_markings = list()
for(var/markingstyle in marking_styles_list)
var/datum/sprite_accessory/M = marking_styles_list[markingstyle]
if( !(species in M.species_allowed))
if(!(species in M.species_allowed))
continue
if(species == "Machine") //Species that can use prosthetic heads.
if(!("head" in rlimb_data) && M.name != "None") //If the character can have prosthetic heads and they have the default head (with screen), no optic markings.
continue
else if(("head" in rlimb_data) && M.name == "None") //Otherwise, if they DON'T have the default head and since they must have optics, give them a list of styles excluding the "None" option.
continue
valid_markings[markingstyle] = marking_styles_list[markingstyle]
var/new_marking_style = input(user, "Choose the style of your character's body markings:", "Character Preference") as null|anything in valid_markings
var/new_marking_style = input(user, "Choose the style of your character's markings:", "Character Preference", m_style) as null|anything in valid_markings
if(new_marking_style)
m_style = new_marking_style
@@ -1275,8 +1305,24 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
continue
if(gender == FEMALE && S.gender == MALE)
continue
if( !(species in S.species_allowed))
continue
if(species == "Machine") //Species that can use prosthetic heads.
if(species in S.species_allowed)
if(!rlimb_data["head"])
valid_facialhairstyles[facialhairstyle] = S
continue
else
continue
else
if(!rlimb_data["head"])
continue
else if("Human" in S.species_allowed)
valid_facialhairstyles[facialhairstyle] = S
continue
else
continue
else
if(!(species in S.species_allowed))
continue
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
@@ -1370,14 +1416,29 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
flavor_text = msg
if("limbs")
var/limb_name = input(user, "Which limb do you want to change?") as null|anything in list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand")
var/valid_limbs = list("Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand")
if(species == "Machine")
valid_limbs = list("Torso", "Lower Body", "Head", "Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand")
var/limb_name = input(user, "Which limb do you want to change?") as null|anything in valid_limbs
if(!limb_name) return
var/limb = null
var/second_limb = null // if you try to change the arm, the hand should also change
var/third_limb = null // if you try to unchange the hand, the arm should also change
var/valid_limb_states=list("Normal","Amputated","Prothesis")
var/valid_limb_states = list("Normal", "Amputated", "Prosthesis")
var/no_amputate = 0
switch(limb_name)
if("Torso")
limb = "chest"
second_limb = "groin"
no_amputate = 1
if("Lower Body")
limb = "groin"
no_amputate = 1
if("Head")
limb = "head"
no_amputate = 1
if("Left Leg")
limb = "l_leg"
second_limb = "l_foot"
@@ -1392,37 +1453,50 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
second_limb = "r_hand"
if("Left Foot")
limb = "l_foot"
third_limb = "l_leg"
if(species != "Machine")
third_limb = "l_leg"
if("Right Foot")
limb = "r_foot"
third_limb = "r_leg"
if(species != "Machine")
third_limb = "r_leg"
if("Left Hand")
limb = "l_hand"
third_limb = "l_arm"
if(species != "Machine")
third_limb = "l_arm"
if("Right Hand")
limb = "r_hand"
third_limb = "r_arm"
if(species != "Machine")
third_limb = "r_arm"
var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in valid_limb_states
if(!new_state) return
switch(new_state)
if("Normal")
if(limb == "head")
m_style = "None"
h_style = random_hair_style(gender, species)
f_style = facial_hair_styles_list["Shaved"]
organ_data[limb] = null
rlimb_data[limb] = null
if(third_limb)
organ_data[third_limb] = null
rlimb_data[third_limb] = null
if("Amputated")
organ_data[limb] = "amputated"
rlimb_data[limb] = null
if(second_limb)
organ_data[second_limb] = "amputated"
rlimb_data[second_limb] = null
if("Prothesis")
if(!no_amputate)
organ_data[limb] = "amputated"
rlimb_data[limb] = null
if(second_limb)
organ_data[second_limb] = "amputated"
rlimb_data[second_limb] = null
if("Prosthesis")
var/choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in chargen_robolimbs
if(!choice)
return
if(limb == "head")
m_style = "Humanoid Optics"
ha_style = "None"
h_style = hair_styles_list["Bald"]
rlimb_data[limb] = choice
organ_data[limb] = "cyborg"
if(second_limb)
@@ -1499,7 +1573,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
UI_style_color = UI_style_color_new
if("UIalpha")
var/UI_style_alpha_new = input(user, "Select a new alpha(transparence) parametr for UI, between 50 and 255") as num
var/UI_style_alpha_new = input(user, "Select a new alpha(transparence) parameter for UI, between 50 and 255", UI_style_alpha) as num
if(!UI_style_alpha_new | !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) return
UI_style_alpha = UI_style_alpha_new
@@ -1619,9 +1693,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
character.h_style = h_style
character.f_style = f_style
// Destroy/cyborgize organs
for(var/name in organ_data)
var/status = organ_data[name]
+14 -4
View File
@@ -306,8 +306,14 @@ BLIND // can't see anything
user << "You push \the [src] back into place."
mask_adjusted = 0
slot_flags = initial(slot_flags)
if(flags_inv != initial(flags_inv)) //If the mask is one that hides the face and can be adjusted yet lost that trait when it was adjusted, make it hide the face again.
flags_inv += HIDEFACE
if(flags_inv != initial(flags_inv))
if(initial(flags_inv) & HIDEFACE) //If the mask is one that hides the face and can be adjusted yet lost that trait when it was adjusted, make it hide the face again.
flags_inv |= HIDEFACE
if(flags != initial(flags))
if(initial(flags) & MASKCOVERSMOUTH) //If the mask covers the mouth when it's down and can be adjusted yet lost that trait when it was adjusted, make it cover the mouth again.
flags |= MASKCOVERSMOUTH
if(initial(flags) & AIRTIGHT) //If the mask is airtight and thus, one that you'd be able to run internals from yet can't because it was adjusted, make it airtight again.
flags |= AIRTIGHT
if(H.head == src)
if(flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer.
if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground.
@@ -331,9 +337,13 @@ BLIND // can't see anything
if(H.internals)
H.internals.icon_state = "internal0"
H.internal = null
if(flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer.
flags_inv -= HIDEFACE /*Done after the above to avoid having to do a check for initial(src.flags_inv == HIDEFACE).
if(flags_inv & HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer.
flags_inv &= ~HIDEFACE /*Done after the above to avoid having to do a check for initial(src.flags_inv == HIDEFACE).
This reveals the user's face since the bandana will now be going on their head.*/
if(flags & MASKCOVERSMOUTH) //Mask won't cover the mouth any more since it's been pushed out of the way. Allows for CPRing with adjusted masks.
flags &= ~MASKCOVERSMOUTH
if(flags & AIRTIGHT) //If the mask was airtight, it won't be anymore since you just pushed it off your face.
flags &= ~AIRTIGHT
if(user.wear_mask == src)
if(initial(flags_inv) == HIDEFACE) //Means that you won't have to take off and put back on simple things like breath masks which, realistically, can just be pulled down off your face.
if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground.
@@ -18,6 +18,7 @@
/obj/item/clothing/shoes/combat //basic syndicate combat boots for nuke ops and mob corpses
name = "combat boots"
desc = "High speed, low drag combat boots."
can_cut_open = 1
icon_state = "jackboots"
item_state = "jackboots"
armor = list(melee = 50, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 10, rad = 0)
@@ -93,6 +94,7 @@
/obj/item/clothing/shoes/jackboots/jacksandals
name = "jacksandals"
desc = "Nanotrasen-issue Security combat sandals for combat scenarios. They're jacksandals, however that works."
can_cut_open = 0
icon_state = "jacksandal"
item_color = "jacksandal"
species_restricted = null
+17 -2
View File
@@ -335,8 +335,8 @@
item_color = "mankini"
/obj/item/clothing/suit/jacket/miljacket
name = "military jacket"
desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable."
name = "olive military jacket"
desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. This one comes in olive."
icon_state = "militaryjacket"
item_state = "militaryjacket"
ignore_suitadjust = 1
@@ -344,6 +344,21 @@
adjust_flavour = null
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/weapon/gun/projectile/automatic/pistol,/obj/item/weapon/gun/projectile/revolver,/obj/item/weapon/gun/projectile/revolver/detective)
/obj/item/clothing/suit/jacket/miljacket/navy
name = "navy military jacket"
desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. This one comes in navy blue."
icon_state = "navy_jacket"
/obj/item/clothing/suit/jacket/miljacket/desert
name = "desert military jacket"
desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. This one comes in desert beige."
icon_state = "desert_jacket"
/obj/item/clothing/suit/jacket/miljacket/white
name = "white military jacket"
desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. This one comes in snow white."
icon_state = "white_jacket"
/obj/item/clothing/suit/xenos
name = "xenos suit"
desc = "A suit made out of chitinous alien hide."
@@ -339,13 +339,79 @@
/obj/item/clothing/accessory/petcollar
name = "pet collar"
desc = "The latest fashion accessory for your favorite pets!"
icon_state = "petcollar"
item_color = "petcollar"
var/tagname = null
var/obj/item/weapon/card/id/access_id
/obj/item/clothing/accessory/petcollar/Destroy()
if(access_id)
qdel(access_id)
access_id = null
processing_objects -= src
return ..()
/obj/item/clothing/accessory/petcollar/attack_self(mob/user as mob)
tagname = copytext(sanitize(input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot") as null|text),1,MAX_NAME_LEN)
name = "[initial(name)] - [tagname]"
var/option = "Change Name"
if(access_id)
option = input(user, "What do you want to do?", "[src]", option) as null|anything in list("Change Name", "Remove ID")
switch(option)
if("Change Name")
var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text
if(t)
tagname = copytext(sanitize(t), 1, MAX_NAME_LEN)
name = "[initial(name)] - [tagname]"
if("Remove ID")
if(access_id)
user.visible_message("<span class='warning'>[user] starts unclipping \the [access_id] from \the [src].</span>")
if(do_after(user, 50, target = user) && access_id)
user.visible_message("<span class='warning'>[user] unclips \the [access_id] from \the [src].</span>")
access_id.forceMove(get_turf(user))
user.put_in_hands(access_id)
access_id = null
/obj/item/clothing/accessory/petcollar/attackby(obj/item/weapon/card/id/W, mob/user, params)
if(!istype(W))
return ..()
if(access_id)
user << "<span class='warning'>There is already \a [access_id] clipped onto \the [src]</span>"
user.drop_item()
W.forceMove(src)
access_id = W
user << "<span class='notice'>\The [W] clips onto \the [src] snugly.</span>"
/obj/item/clothing/accessory/petcollar/GetAccess()
return access_id ? access_id.GetAccess() : ..()
/obj/item/clothing/accessory/petcollar/examine(mob/user)
..()
if(access_id)
user << "There is \icon[access_id] \a [access_id] clipped onto it."
/obj/item/clothing/accessory/petcollar/equipped(mob/living/simple_animal/user)
if(istype(user))
processing_objects |= src
/obj/item/clothing/accessory/petcollar/dropped(mob/living/simple_animal/user)
processing_objects -= src
/obj/item/clothing/accessory/petcollar/process()
var/mob/living/simple_animal/M = loc
// if it wasn't intentionally unequipped but isn't being worn, possibly gibbed
if(istype(M) && src == M.collar && M.stat != DEAD)
return
var/area/t = get_area(M)
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) )
//give the syndicats a bit of stealth
a.autosay("[tagname] has been vandalized in Space!", "[tagname]'s Death Alarm")
else
a.autosay("[tagname] has been vandalized in [t.name]!", "[tagname]'s Death Alarm")
qdel(a)
processing_objects -= src
/proc/english_accessory_list(obj/item/clothing/under/U)
if(!istype(U) || !U.accessories.len)
+7
View File
@@ -149,6 +149,13 @@
new /obj/item/weapon/reagent_containers/food/drinks/cans/cola(src)
/obj/item/device/guitar/jello_guitar //Antcolon3: Dan Jello
name = "Dan Jello's Pink Guitar"
desc = "Dan Jello's special pink guitar."
icon = 'icons/obj/custom_items.dmi'
icon_state = "jello_guitar"
item_state = "jello_guitar"
//////////////////////////////////
//////////// Clothing ////////////
//////////////////////////////////
+1 -14
View File
@@ -103,17 +103,4 @@
if(ai.aiPDA != P && ai.aiPDA != src)
ai.show_message("<i>Intercepted message from <b>[sender]</b></i> (Unknown / spam?) <i>to <b>[P:owner]</b>: [message]</i>")
//Commented out because we don't send messages like this anymore. Instead it will just popup in their chat window.
//P.tnote += "<i><b>&larr; From [sender] (Unknown / spam?):</b></i><br>[message]<br>"
PM.play_ringtone()
//Search for holder of the PDA.
var/mob/living/L = null
if(P.loc && isliving(P.loc))
L = P.loc
//Maybe they are a pAI!
else
L = get(P, /mob/living/silicon)
if(L)
L << "\icon[P] <b>Message from [sender] (Unknown / spam?), </b>\"[message]\" (Unable to Reply)"
PM.notify("<b>Message from [sender] (Unknown / spam?), </b>\"[message]\" (Unable to Reply)", 0)
+12 -8
View File
@@ -325,29 +325,33 @@ Gunshots/explosions/opening doors/less rare audio (done)
/obj/effect/hallucination/delusion
var/list/image/delusions = list()
/obj/effect/hallucination/delusion/New(loc,var/mob/living/carbon/T)
/obj/effect/hallucination/delusion/New(loc, mob/living/carbon/T, force_kind = null, duration = 300,skip_nearby = 1, custom_icon = null, custom_icon_file = null)
target = T
var/image/A = null
var/kind = rand(1,3)
var/kind = force_kind ? force_kind : pick("clown", "corgi", "carp", "skeleton", "demon")
for(var/mob/living/carbon/human/H in living_mob_list)
if(H == target)
continue
if(H in view(target))
if(skip_nearby && (H in view(target)))
continue
switch(kind)
if(1)//Clown
if("clown")//Clown
A = image('icons/mob/animal.dmi',H,"clown")
if(2)//Carp
if("carp")//Carp
A = image('icons/mob/animal.dmi',H,"carp")
if(3)//Corgi
if("corgi")//Corgi
A = image('icons/mob/pets.dmi',H,"corgi")
if(4)//Skeletons
if("skeleton")//Skeletons
A = image('icons/mob/human.dmi',H,"skeleton_s")
if("demon")//Demon
A = image('icons/mob/mob.dmi',H,"daemon")
if("custom")
A = image(custom_icon_file, H, custom_icon)
A.override = 1
if(target.client)
delusions |= A
target.client.images |= A
sleep(300)
sleep(duration)
for(var/image/I in delusions)
if(target.client)
target.client.images.Remove(I)
+1 -1
View File
@@ -78,4 +78,4 @@
/obj/item/dropped()
. = ..()
update_light()
update_light()
+3 -3
View File
@@ -52,9 +52,9 @@
if(lum_r / mx1 != (lum_r + delta_r) / mx2 || lum_g / mx1 != (lum_g + delta_g) / mx2 || lum_b / mx1 != (lum_b + delta_b) / mx2) //Stuff would change.
should_update = 1
lum_r += delta_r
lum_g += delta_g
lum_b += delta_b
lum_r = max(lum_r + delta_r, 0) //Lum shouldn't drop below 1
lum_g = max(lum_g + delta_g, 0)
lum_b = max(lum_b + delta_b, 0)
if(!needs_update && should_update)
needs_update = 1
@@ -317,22 +317,27 @@ In all, this is a lot like the monkey code. /N
/mob/living/carbon/alien/humanoid/var/temperature_resistance = T0C+75
/mob/living/carbon/alien/humanoid/show_inv(mob/user as mob)
user.set_machine(src)
var/dat = {"
<B><HR><FONT size=3>[name]</FONT></B>
<BR><HR>
<BR><B>Left Hand:</B> <A href='?src=\ref[src];item=l_hand'>[(l_hand ? text("[]", l_hand) : "Nothing")]</A>
<BR><B>Right Hand:</B> <A href='?src=\ref[src];item=r_hand'>[(r_hand ? text("[]", r_hand) : "Nothing")]</A>
<BR><B>Head:</B> <A href='?src=\ref[src];item=head'>[(head ? text("[]", head) : "Nothing")]</A>
<BR><B>(Exo)Suit:</B> <A href='?src=\ref[src];item=suit'>[(wear_suit ? text("[]", wear_suit) : "Nothing")]</A>
<BR><A href='?src=\ref[src];item=pockets'>Empty Pouches</A>
<BR><A href='?src=\ref[user];mach_close=mob[name]'>Close</A>
<BR>"}
user << browse(dat, text("window=mob[name];size=340x480"))
onclose(user, "mob[name]")
return
var/dat = {"<table>
<tr><td><B>Left Hand:</B></td><td><A href='?src=\ref[src];item=[slot_l_hand]'>[(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "<font color=grey>Empty</font>"]</A></td></tr>
<tr><td><B>Right Hand:</B></td><td><A href='?src=\ref[src];item=[slot_r_hand]'>[(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "<font color=grey>Empty</font>"]</A></td></tr>
<tr><td>&nbsp;</td></tr>"}
dat += "<tr><td><B>Head:</B></td><td><A href='?src=\ref[src];item=[slot_head]'>[(head && !(head.flags&ABSTRACT)) ? head : "<font color=grey>Empty</font>"]</A></td></tr>"
dat += "<tr><td>&nbsp;</td></tr>"
dat += "<tr><td><B>Exosuit:</B></td><td><A href='?src=\ref[src];item=[slot_wear_suit]'>[(wear_suit && !(wear_suit.flags&ABSTRACT)) ? wear_suit : "<font color=grey>Empty</font>"]</A></td></tr>"
dat += "<tr><td><B>Pouches:</B></td><td><A href='?src=\ref[src];item=pockets'>[((l_store && !(l_store.flags&ABSTRACT)) || (r_store && !(r_store.flags&ABSTRACT))) ? "Full" : "<font color=grey>Empty</font>"]</A>"
dat += {"</table>
<A href='?src=\ref[user];mach_close=mob\ref[src]'>Close</A>
"}
var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 500)
popup.set_content(dat)
popup.open()
/mob/living/carbon/alien/humanoid/canBeHandcuffed()
return 1
@@ -237,15 +237,6 @@
/mob/living/carbon/alien/larva/show_inv(mob/user as mob)
user.set_machine(src)
var/dat = {"
<B><HR><FONT size=3>[name]</FONT></B>
<BR><HR><BR>
<BR><A href='?src=\ref[user];mach_close=mob[name]'>Close</A>
<BR>"}
user << browse(dat, text("window=mob[name];size=340x480"))
onclose(user, "mob[name]")
return
/* Commented out because it's duplicated in life.dm
+30 -20
View File
@@ -546,31 +546,34 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
/mob/living/carbon/show_inv(mob/user)
user.set_machine(src)
var/dat = {"
<HR>
<B><FONT size=3>[name]</FONT></B>
<HR>
<BR><B>Head:</B> <A href='?src=\ref[src];item=[slot_head]'> [(head && !(head.flags&ABSTRACT)) ? head : "Nothing"]</A>
<BR><B>Mask:</B> <A href='?src=\ref[src];item=[slot_wear_mask]'> [(wear_mask && !(wear_mask.flags&ABSTRACT)) ? wear_mask : "Nothing"]</A>
<BR><B>Left Hand:</B> <A href='?src=\ref[src];item=[slot_l_hand]'> [(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "Nothing"]</A>
<BR><B>Right Hand:</B> <A href='?src=\ref[src];item=[slot_r_hand]'> [(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "Nothing"]</A>"}
dat += "<BR><B>Back:</B> <A href='?src=\ref[src];item=[slot_back]'>[back ? back : "Nothing"]</A>"
var/dat = {"<table>
<tr><td><B>Left Hand:</B></td><td><A href='?src=\ref[src];item=[slot_l_hand]'>[(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "<font color=grey>Empty</font>"]</A></td></tr>
<tr><td><B>Right Hand:</B></td><td><A href='?src=\ref[src];item=[slot_r_hand]'>[(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "<font color=grey>Empty</font>"]</A></td></tr>
<tr><td>&nbsp;</td></tr>"}
dat += "<tr><td><B>Back:</B></td><td><A href='?src=\ref[src];item=[slot_back]'>[(back && !(back.flags&ABSTRACT)) ? back : "<font color=grey>Empty</font>"]</A>"
if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank))
dat += "<BR><A href='?src=\ref[src];internal=1'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_back]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr><tr><td>&nbsp;</td></tr>"
dat += "<tr><td><B>Head:</B></td><td><A href='?src=\ref[src];item=[slot_head]'>[(head && !(head.flags&ABSTRACT)) ? head : "<font color=grey>Empty</font>"]</A></td></tr>"
dat += "<tr><td><B>Mask:</B></td><td><A href='?src=\ref[src];item=[slot_wear_mask]'>[(wear_mask && !(wear_mask.flags&ABSTRACT)) ? wear_mask : "<font color=grey>Empty</font>"]</A></td></tr>"
if(handcuffed)
dat += "<BR><A href='?src=\ref[src];item=[slot_handcuffed]'>Handcuffed</A>"
dat += "<tr><td><B>Handcuffed:</B> <A href='?src=\ref[src];item=[slot_handcuffed]'>Remove</A></td></tr>"
if(legcuffed)
dat += "<BR><A href='?src=\ref[src];item=[slot_legcuffed]'>Legcuffed</A>"
dat += "<tr><td><A href='?src=\ref[src];item=[slot_legcuffed]'>Legcuffed</A></td></tr>"
dat += {"
<BR>
<BR><A href='?src=\ref[user];mach_close=mob\ref[src]'>Close</A>
dat += {"</table>
<A href='?src=\ref[user];mach_close=mob\ref[src]'>Close</A>
"}
user << browse(dat, "window=mob\ref[src];size=325x500")
onclose(user, "mob\ref[src]")
var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 500)
popup.set_content(dat)
popup.open()
/mob/living/carbon/Topic(href, href_list)
..()
@@ -813,4 +816,11 @@ so that different stomachs can handle things in different ways VB*/
if(toEat.reagents.total_volume > toEat.bitesize)
toEat.reagents.trans_to(src, toEat.bitesize*toEat.transfer_efficiency)
else
toEat.reagents.trans_to(src, toEat.reagents.total_volume*toEat.transfer_efficiency)
toEat.reagents.trans_to(src, toEat.reagents.total_volume*toEat.transfer_efficiency)
/mob/living/carbon/get_access()
. = ..()
var/obj/item/I = get_active_hand()
if(I)
. |= I.GetAccess()
@@ -169,6 +169,12 @@
return valid_species
/mob/living/carbon/human/proc/generate_valid_hairstyles()
var/mob/living/carbon/human/user
if(istype(usr, /mob/new_player))
user = usr
else
user = src
var/list/valid_hairstyles = new()
for(var/hairstyle in hair_styles_list)
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
@@ -177,13 +183,34 @@
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(!(species.name in S.species_allowed))
continue
valid_hairstyles += hairstyle
if(species.flags & ALL_RPARTS) //If the user is a species who can have a robotic head...
if(species.name in S.species_allowed) //If this is a hairstyle native to the user's species...
if(!user.client.prefs.rlimb_data["head"]) //Check to see if they have the default head.
valid_hairstyles += hairstyle //Give them their hairstyles if they do.
continue
else //If they don't have the default head, they shouldn't be getting any hairstyles they wouldn't normally.
continue
else
if(!user.client.prefs.rlimb_data["head"]) //If the hairstyle is not native to the user's species, and they're using the default head, don't let them access it.
continue
else
if("Human" in S.species_allowed) //If the user has a robotic head and the hairstyle can fit humans, let them use it as a wig for their humanoid robot head.
valid_hairstyles += hairstyle
continue
else
if(!(species.name in S.species_allowed)) //If the user is not a species who can have robotic heads, use the default handling.
continue
valid_hairstyles += hairstyle
return valid_hairstyles
/mob/living/carbon/human/proc/generate_valid_facial_hairstyles()
var/mob/living/carbon/human/user
if(istype(usr, /mob/new_player))
user = usr
else
user = src
var/list/valid_facial_hairstyles = new()
for(var/facialhairstyle in facial_hair_styles_list)
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
@@ -192,9 +219,23 @@
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(!(species.name in S.species_allowed))
continue
valid_facial_hairstyles += facialhairstyle
if(species.flags & ALL_RPARTS) //If the user is a species who can have a robotic head...
if(species.name in S.species_allowed) //If this is a facial hair style native to the user's species...
if(!user.client.prefs.rlimb_data["head"]) //Check to see if they have the default head.
valid_facial_hairstyles += facialhairstyle //Give them their facial hair styles if they do.
continue
else //If they don't have the default head, they shouldn't be getting any facial hair styles they wouldn't normally.
continue
else
if(!user.client.prefs.rlimb_data["head"]) //If the facial hair style is not native to the user's species, and they're using the default head, don't let them access it.
continue
else
if("Human" in S.species_allowed) //If the user has a robotic head and the facial hair style can fit humans, let them use it as a postiche for their humanoid robot head.
valid_facial_hairstyles += facialhairstyle
continue
else //If the user is not a species who can have robotic heads, use the default handling.
if(!(species.name in S.species_allowed))
continue
valid_facial_hairstyles += facialhairstyle
return valid_facial_hairstyles
@@ -851,4 +851,4 @@
set desc = "Sets an extended description of your character's features."
set category = "IC"
flavor_text = TextPreview(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text)
update_flavor_text()
+37 -25
View File
@@ -839,15 +839,6 @@
U.accessories -= A
update_inv_w_uniform()
if (href_list["refresh"])
if((machine)&&(in_range(src, usr)))
show_inv(machine)
if (href_list["mach_close"])
var/t1 = text("window=[]", href_list["mach_close"])
unset_machine()
src << browse(null, t1)
if (href_list["criminal"])
if(hasHUD(usr,"security"))
@@ -1619,26 +1610,36 @@
// Allows IPC's to change their monitor display
/mob/living/carbon/human/proc/change_monitor()
set category = "IC"
set name = "Change Monitor Display"
set desc = "Change the display on your monitor."
set name = "Change Monitor/Optical Display"
set desc = "Change the display on your monitor or the colour of your optics."
if(stat || paralysis || stunned || weakened)
src << "<span class='warning'>You cannot change your monitor display in your current state.</span>"
if(incapacitated())
src << "<span class='warning'>You cannot change your monitor or optical display in your current state.</span>"
return
var/list/hair = list()
for(var/i in hair_styles_list)
var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i]
if(species.name in tmp_hair.species_allowed)
hair += i
if(species.flags & ALL_RPARTS) //If they can have a fully cybernetic body...
if(client.prefs.rlimb_data["head"]) //If head is present here, that means it's not the default Morpheus. Thus, no screen to adjust. Instead, let them change the colour of their optics!
var/optic_colour = input(src, "Select optic colour", rgb(r_markings, g_markings, b_markings)) as color|null
if(optic_colour)
r_markings = hex2num(copytext(optic_colour, 2, 4))
g_markings = hex2num(copytext(optic_colour, 4, 6))
b_markings = hex2num(copytext(optic_colour, 6, 8))
var/new_style = input(src, "Select a monitor display", "Monitor Display") as null|anything in hair
if(stat || paralysis || stunned || weakened)
return
if(new_style)
h_style = new_style
update_markings()
else if(!client.prefs.rlimb_data["head"])//Means that the character has the default Morpheus head, which has a screen. Time to customize.
var/list/hair = list()
for(var/i in hair_styles_list)
var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i]
if(species.name in tmp_hair.species_allowed)
hair += i
update_hair()
var/new_style = input(src, "Select a monitor display", "Monitor Display", h_style) as null|anything in hair
if(incapacitated())
return
if(new_style)
h_style = new_style
update_hair()
//Putting a couple of procs here that I don't know where else to dump.
//Mostly going to be used for Vox and Vox Armalis, but other human mobs might like them (for adminbuse).
@@ -1926,4 +1927,15 @@
return ..()
/mob/living/carbon/human/proc/get_age_pitch()
return 1.0 + 0.5*(30 - age)/80
return 1.0 + 0.5*(30 - age)/80
/mob/living/carbon/human/get_access()
. = ..()
if(wear_id)
. |= wear_id.GetAccess()
if(istype(w_uniform, /obj/item/clothing/under))
var/obj/item/clothing/under/U = w_uniform
if(U.accessories)
for(var/obj/item/clothing/accessory/A in U.accessories)
. |= A.GetAccess()
+1 -12
View File
@@ -200,11 +200,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
adjustCloneLoss(0.1)
/mob/living/carbon/human/handle_mutations_and_radiation()
if(getFireLoss())
if((RESIST_HEAT in mutations) || (prob(1)))
heal_organ_damage(0,1)
for(var/datum/dna/gene/gene in dna_genes)
if(!gene.block)
continue
@@ -833,13 +828,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(.) //alive
if(REGEN in mutations)
if(nutrition)
if(prob(10))
var/randumb = rand(1, 5)
nutrition -= randumb
heal_overall_damage(randumb, randumb)
if(nutrition < 0)
nutrition = 0
heal_overall_damage(0.1, 0.1)
if(!in_stasis)
handle_organs()
@@ -712,9 +712,9 @@
passive_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment.
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_DNA | NO_POISON | RADIMMUNE
clothing_flags = HAS_SOCKS
bodyflags = HAS_SKIN_COLOR
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_DNA | NO_POISON | RADIMMUNE | ALL_RPARTS
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_SKIN_COLOR | HAS_MARKINGS | HAS_HEAD_ACCESSORY
dietflags = 0 //IPCs can't eat, so no diet
blood_color = "#1F181F"
flesh_color = "#AAAAAA"
@@ -461,7 +461,7 @@ var/global/list/damage_icon_parts = list()
//if(!src.get_int_organ(/obj/item/organ/internal/brain) && src.get_species() != "Machine" )//make it obvious we have NO BRAIN
// hair_standing.Blend(debrained_s, ICON_OVERLAY)
if(hair_style && hair_style.species_allowed)
if(src.species.name in hair_style.species_allowed)
if((src.species.name in hair_style.species_allowed) || (src.species.flags & ALL_RPARTS))
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(src.get_species() == "Slime People") // I am el worstos
hair_s.Blend(rgb(r_skin, g_skin, b_skin, 160), ICON_AND)
@@ -499,7 +499,7 @@ var/global/list/damage_icon_parts = list()
if(f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
if(facial_hair_style && facial_hair_style.species_allowed)
if(src.species.name in facial_hair_style.species_allowed)
if((src.species.name in facial_hair_style.species_allowed) || (src.species.flags & ALL_RPARTS))
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(src.get_species() == "Slime People") // I am el worstos
facial_s.Blend(rgb(r_skin, g_skin, b_skin, 160), ICON_AND)
@@ -149,7 +149,7 @@
return
data["receiver_off"] = M.toff
data["ringer_off"] = M.silent
data["ringer_off"] = M.notify_silent
data["current_ref"] = null
data["current_name"] = user.current_pda_messaging
@@ -205,7 +205,7 @@
M.toff = href_list["toggler"] != "1"
return 1
else if(href_list["ringer"])
M.silent = href_list["ringer"] != "1"
M.notify_silent = href_list["ringer"] != "1"
return 1
else if(href_list["select"])
var/s = href_list["select"]
+2 -1
View File
@@ -349,4 +349,5 @@
/mob/living/silicon/adjustToxLoss(var/amount)
return
/mob/living/silicon/get_access()
return IGNORE_ACCESS //silicons always have access
@@ -5,7 +5,7 @@
icon_state = "cat2"
icon_living = "cat2"
icon_dead = "cat2_dead"
icon_resting = "cat_rest"
icon_resting = "cat2_rest"
gender = MALE
speak = list("Meow!", "Esp!", "Purr!", "HSSSSS")
speak_emote = list("purrs", "meows")
@@ -28,7 +28,8 @@
desc = "GCAT"
icon_state = "cat"
icon_living = "cat"
icon_dead = "cat2_dead"
icon_dead = "cat_dead"
icon_resting = "cat_rest"
gender = FEMALE
var/turns_since_scan = 0
var/mob/living/simple_animal/mouse/movement_target
@@ -32,31 +32,6 @@
..()
regenerate_icons()
/mob/living/simple_animal/pet/corgi/handle_hud_icons()
..()
if(fire)
if(fire_alert) fire.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for heat and 2 for cold.
else fire.icon_state = "fire0"
if(oxygen)
if(oxygen_alert) oxygen.icon_state = "oxy1"
else oxygen.icon_state = "oxy0"
if(toxin)
if(toxins_alert) toxin.icon_state = "tox1"
else toxin.icon_state = "tox0"
/mob/living/simple_animal/pet/corgi/handle_hud_icons_health()
..()
if(healths)
switch(health)
if(30 to INFINITY) healths.icon_state = "health0"
if(26 to 29) healths.icon_state = "health1"
if(21 to 25) healths.icon_state = "health2"
if(16 to 20) healths.icon_state = "health3"
if(11 to 15) healths.icon_state = "health4"
if(6 to 10) healths.icon_state = "health5"
if(1 to 5) healths.icon_state = "health6"
if(0) healths.icon_state = "health7"
/mob/living/simple_animal/pet/corgi/Life()
. = ..()
regenerate_icons()
@@ -73,19 +48,21 @@
user.set_machine(src)
if(user.stat) return
var/dat = "<div align='center'><b>Inventory of [name]</b></div><p>"
if(inventory_head)
dat += "<br><b>Head:</b> [inventory_head] (<a href='?src=\ref[src];remove_inv=head'>Remove</a>)"
else
dat += "<br><b>Head:</b> <a href='?src=\ref[src];add_inv=head'>Nothing</a>"
if(inventory_back)
dat += "<br><b>Back:</b> [inventory_back] (<a href='?src=\ref[src];remove_inv=back'>Remove</a>)"
else
dat += "<br><b>Back:</b> <a href='?src=\ref[src];add_inv=back'>Nothing</a>"
var/dat = {"<table>"}
user << browse(dat, text("window=mob[];size=325x500", real_name))
onclose(user, "mob[real_name]")
return
dat += "<tr><td><B>Head:</B></td><td><A href='?src=\ref[src];[inventory_head?"remove_inv":"add_inv"]=head'>[(inventory_head && !(inventory_head.flags&ABSTRACT)) ? inventory_head : "<font color=grey>Empty</font>"]</A></td></tr>"
dat += "<tr><td><B>Back:</B></td><td><A href='?src=\ref[src];[inventory_back?"remove_inv":"add_inv"]=back'>[(inventory_back && !(inventory_back.flags&ABSTRACT)) ? inventory_back : "<font color=grey>Empty</font>"]</A></td></tr>"
if(can_collar)
dat += "<tr><td>&nbsp;</td></tr>"
dat += "<tr><td><B>Collar:</B></td><td><A href='?src=\ref[src];[collar?"remove_inv":"add_inv"]=collar'>[(collar && !(collar.flags&ABSTRACT)) ? collar : "<font color=grey>Empty</font>"]</A></td></tr>"
dat += {"</table>
<A href='?src=\ref[user];mach_close=mob\ref[src]'>Close</A>
"}
var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 500)
popup.set_content(dat)
popup.open()
/mob/living/simple_animal/pet/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(inventory_head && inventory_back)
@@ -542,11 +519,7 @@
overlays += image('icons/mob/mask.dmi',"facehugger_corgipuppy")
else
overlays += image('icons/mob/mask.dmi',"facehugger_corgi")
if(pcollar)
overlays += collar
overlays += pettag
return
..(0)
/mob/living/simple_animal/pet/corgi/puppy
name = "\improper corgi puppy"
@@ -22,6 +22,7 @@
var/obj/item/inventory_head
var/obj/item/inventory_mask
can_hide = 1
can_collar = 1
/mob/living/simple_animal/crab/handle_automated_movement()
//CRAB movement
@@ -14,4 +14,5 @@
meat_amount = 3
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
response_harm = "kicks"
can_collar = 1
@@ -38,6 +38,7 @@
var/list/donors = list()
var/ready_evolve = 0
holder_type = /obj/item/weapon/holder/diona
can_collar = 1
/mob/living/simple_animal/diona/New()
..()
@@ -26,6 +26,7 @@
melee_damage_upper = 2
stop_automated_movement_when_pulled = 1
var/milk_content = 0
can_collar = 1
/mob/living/simple_animal/hostile/retaliate/goat/handle_automated_movement()
..()
@@ -111,6 +112,7 @@
attack_sound = 'sound/weapons/punch1.ogg'
health = 50
var/milk_content = 0
can_collar = 1
/mob/living/simple_animal/cow/New()
..()
@@ -178,6 +180,7 @@
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
small = 1
can_hide = 1
can_collar = 1
/mob/living/simple_animal/chick/New()
..()
@@ -220,6 +223,7 @@ var/global/chicken_count = 0
pass_flags = PASSTABLE | PASSMOB
small = 1
can_hide = 1
can_collar = 1
/mob/living/simple_animal/chicken/New()
..()
@@ -297,6 +301,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 50
can_collar = 1
/mob/living/simple_animal/turkey
name = "turkey"
@@ -318,6 +323,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "pecks"
health = 50
can_collar = 1
/mob/living/simple_animal/goose
name = "goose"
@@ -339,6 +345,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 50
can_collar = 1
/mob/living/simple_animal/seal
name = "seal"
@@ -360,6 +367,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 50
can_collar = 1
/mob/living/simple_animal/walrus
name = "walrus"
@@ -381,3 +389,4 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 50
can_collar = 1
@@ -22,3 +22,4 @@
can_hide = 1
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
meat_amount = 1
can_collar = 1
@@ -31,6 +31,7 @@
universal_speak = 0
can_hide = 1
holder_type = /obj/item/weapon/holder/mouse
can_collar = 1
/mob/living/simple_animal/mouse/handle_automated_speech()
..()
@@ -1,22 +1,8 @@
/mob/living/simple_animal/pet
icon = 'icons/mob/pets.dmi'
var/obj/item/clothing/accessory/petcollar/pcollar = null
var/image/collar = null
var/image/pettag = null
can_collar = 1
/mob/living/simple_animal/pet/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(istype(O, /obj/item/clothing/accessory/petcollar) && !pcollar)
var/obj/item/clothing/accessory/petcollar/P = O
pcollar = P
collar = image('icons/mob/pets.dmi', src, "[icon_state]collar")
pettag = image('icons/mob/pets.dmi', src, "[icon_state]tag")
regenerate_icons()
user << "<span class='notice'>You put the [P] around [src]'s neck.</span>"
if(P.tagname)
name = P.tagname
real_name = P.tagname
qdel(P)
return
if(istype(O, /obj/item/weapon/newspaper))
if(!stat)
user.visible_message("[user] baps [name] on the nose with the rolled up [O].")
@@ -27,12 +13,6 @@
else
..()
/mob/living/simple_animal/pet/New()
..()
if(pcollar)
pcollar = new(src)
regenerate_icons()
/mob/living/simple_animal/pet/revive()
..()
regenerate_icons()
@@ -41,7 +21,9 @@
..()
regenerate_icons()
/mob/living/simple_animal/pet/regenerate_icons()
overlays.Cut()
overlays += collar
overlays += pettag
/mob/living/simple_animal/pet/regenerate_icons(cut_overlays = 1)
if(cut_overlays)
overlays.Cut()
if(collar)
overlays += "[icon_state]collar"
overlays += "[icon_state]tag"
+16 -13
View File
@@ -34,6 +34,7 @@
icon_dead = "parrot_dead"
pass_flags = PASSTABLE
small = 1
can_collar = 1
speak = list("Hi","Hello!","Cracker?","BAWWWWK george mellons griffing me")
speak_emote = list("squawks","says","yells")
@@ -118,17 +119,21 @@
*/
/mob/living/simple_animal/parrot/show_inv(mob/user as mob)
user.set_machine(src)
if(user.stat) return
var/dat = "<div align='center'><b>Inventory of [name]</b></div><p>"
if(ears)
dat += "<br><b>Headset:</b> [ears] (<a href='?src=\ref[src];remove_inv=ears'>Remove</a>)"
else
dat += "<br><b>Headset:</b> <a href='?src=\ref[src];add_inv=ears'>Nothing</a>"
var/dat = {"<table>"}
user << browse(dat, text("window=mob[];size=325x500", name))
onclose(user, "mob[real_name]")
return
dat += "<tr><td><B>Headset:</B></td><td><A href='?src=\ref[src];[ears?"remove_inv":"add_inv"]=ears'>[(ears && !(ears.flags&ABSTRACT)) ? ears : "<font color=grey>Empty</font>"]</A></td></tr>"
if(can_collar)
dat += "<tr><td>&nbsp;</td></tr>"
dat += "<tr><td><B>Collar:</B></td><td><A href='?src=\ref[src];[collar?"remove_inv":"add_inv"]=collar'>[(collar && !(collar.flags&ABSTRACT)) ? collar : "<font color=grey>Empty</font>"]</A></td></tr>"
dat += {"</table>
<A href='?src=\ref[user];mach_close=mob\ref[src]'>Close</A>
"}
var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 500)
popup.set_content(dat)
popup.open()
/mob/living/simple_animal/parrot/Topic(href, href_list)
@@ -138,8 +143,6 @@
//Is the usr's mob type able to do this?
if(ishuman(usr) || isrobot(usr))
//Removing from inventory
if(href_list["remove_inv"])
var/remove_from = href_list["remove_inv"]
switch(remove_from)
@@ -157,8 +160,7 @@
else
usr << "\red There is nothing to remove from its [remove_from]."
return
//Adding things to inventory
show_inv(usr)
else if(href_list["add_inv"])
var/add_to = href_list["add_inv"]
if(!usr.get_active_hand())
@@ -205,6 +207,7 @@
if(headset_to_add.translate_binary)
available_channels.Add(":b")
show_inv(usr)
else
..()
@@ -67,6 +67,9 @@
var/speed = 1 //LETS SEE IF I CAN SET SPEEDS FOR SIMPLE MOBS WITHOUT DESTROYING EVERYTHING. Higher speed is slower, negative speed is faster
var/can_hide = 0
var/obj/item/clothing/accessory/petcollar/collar = null
var/can_collar = 0 // can add collar to mob or not
//Hot simple_animal baby making vars
var/childtype = null
var/scan_ready = 1
@@ -80,7 +83,15 @@
verbs -= /mob/verb/observe
if(!can_hide)
verbs -= /mob/living/simple_animal/verb/hide
if(collar)
if(!istype(collar))
collar = new(src)
regenerate_icons()
/mob/living/simple_animal/Destroy()
if(collar)
collar.forceMove(loc)
collar = null
/mob/living/simple_animal/Login()
if(src && src.client)
@@ -92,6 +103,30 @@
..()
health = Clamp(health, 0, maxHealth)
/mob/living/simple_animal/handle_hud_icons()
..()
if(fire)
if(fire_alert) fire.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for heat and 2 for cold.
else fire.icon_state = "fire0"
if(oxygen)
if(oxygen_alert) oxygen.icon_state = "oxy1"
else oxygen.icon_state = "oxy0"
if(toxin)
if(toxins_alert) toxin.icon_state = "tox1"
else toxin.icon_state = "tox0"
/mob/living/simple_animal/handle_hud_icons_health()
..()
if(healths && maxHealth > 0)
switch(health / maxHealth * 30)
if(30 to INFINITY) healths.icon_state = "health0"
if(26 to 29) healths.icon_state = "health1"
if(21 to 25) healths.icon_state = "health2"
if(16 to 20) healths.icon_state = "health3"
if(11 to 15) healths.icon_state = "health4"
if(6 to 10) healths.icon_state = "health5"
if(1 to 5) healths.icon_state = "health6"
if(0) healths.icon_state = "health7"
/mob/living/simple_animal/Life()
@@ -176,7 +211,7 @@
var/diff = areatemp - bodytemperature
diff = diff / 5
bodytemperature += diff
var/tox = environment.toxins
var/oxy = environment.oxygen
var/n2 = environment.nitrogen
@@ -401,6 +436,18 @@
else
user << "\blue [src] is dead, medical items won't bring it back to life."
return
else if(can_collar && !collar && istype(O, /obj/item/clothing/accessory/petcollar))
var/obj/item/clothing/accessory/petcollar/C = O
user.drop_item()
C.forceMove(src)
collar = C
collar.equipped(src)
regenerate_icons()
usr << "<span class='notice'>You put \the [C] around \the [src]'s neck.</span>"
if(C.tagname)
name = C.tagname
real_name = C.tagname
return
else if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead.
if(istype(O, /obj/item/weapon/kitchen/knife))
harvest()
@@ -525,6 +572,21 @@
density = initial(density)
update_canmove()
/mob/living/simple_animal/show_inv(mob/user as mob)
user.set_machine(src)
var/dat = {"<table>
<tr><td><B>Left Hand:</B></td><td><A href='?src=\ref[src];item=[slot_l_hand]'>[(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "<font color=grey>Empty</font>"]</A></td></tr>
<tr><td><B>Right Hand:</B></td><td><A href='?src=\ref[src];item=[slot_r_hand]'>[(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "<font color=grey>Empty</font>"]</A></td></tr>
<tr><td>&nbsp;</td></tr>"}
if(can_collar)
dat += "<tr><td><B>Collar:</B></td><td><A href='?src=\ref[src];[collar?"remove_inv":"add_inv"]=collar'>[(collar && !(collar.flags&ABSTRACT)) ? collar : "<font color=grey>Empty</font>"]</A></td></tr>"
dat += {"</table>
<A href='?src=\ref[user];mach_close=mob\ref[src]'>Close</A>
"}
var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 250)
popup.set_content(dat)
popup.open()
/mob/living/simple_animal/proc/make_babies() // <3 <3 <3
if(gender != FEMALE || stat || !scan_ready || !childtype || !simplespecies)
@@ -586,3 +648,54 @@
if(changed)
animate(src, transform = ntransform, time = 2, easing = EASE_IN|EASE_OUT)
/mob/living/simple_animal/Topic(href, href_list)
if(!usr.stat && usr.canmove && !usr.restrained() && in_range(src, usr))
if(href_list["remove_inv"])
if(!Adjacent(usr) || !(ishuman(usr) || isrobot(usr) || isalienadult(usr)))
return
var/remove_from = href_list["remove_inv"]
switch(remove_from)
if("collar")
if(!can_collar)
return
if(collar)
if(collar.flags & NODROP)
usr << "<span class='warning'>\The [collar] is stuck too hard to [src] for you to remove!</span>"
return
collar.dropped(src)
collar.forceMove(src.loc)
collar = null
regenerate_icons()
else
usr << "<span class='danger'>There is nothing to remove from its [remove_from].</span>"
return
show_inv(usr)
else if(href_list["add_inv"])
if(!Adjacent(usr) || !(ishuman(usr) || isrobot(usr) || isalienadult(usr)))
return
var/add_to = href_list["add_inv"]
switch(add_to)
if("collar")
if(!can_collar || collar)
return
var/obj/item/clothing/accessory/petcollar/C = usr.get_active_hand()
if(!C)
usr.visible_message("[usr] rubs [src]'s neck.","<span class='notice'>You rub [src]'s neck for a moment.</span>")
return
usr.drop_item()
C.forceMove(src)
collar = C
collar.equipped(src)
regenerate_icons()
usr << "<span class='notice'>You put \the [C] around \the [src]'s neck.</span>"
if(C.tagname)
name = C.tagname
real_name = C.tagname
show_inv(usr)
/mob/living/simple_animal/get_access()
. = ..()
if(collar)
. |= collar.GetAccess()
+15 -11
View File
@@ -495,16 +495,17 @@ var/list/slot_equipment_priority = list( \
/mob/proc/show_inv(mob/user)
user.set_machine(src)
var/dat = {"
<HR>
<B><FONT size=3>[name]</FONT></B>
<HR>
<BR><B>Left Hand:</B> <A href='?src=\ref[src];item=[slot_l_hand]'> [(l_hand&&!(l_hand.flags&ABSTRACT)) ? l_hand : "Nothing"]</A>
<BR><B>Right Hand:</B> <A href='?src=\ref[src];item=[slot_r_hand]'> [(r_hand&&!(r_hand.flags&ABSTRACT)) ? r_hand : "Nothing"]</A>
<BR><A href='?src=\ref[user];mach_close=mob\ref[src]'>Close</A>
var/dat = {"<table>
<tr><td><B>Left Hand:</B></td><td><A href='?src=\ref[src];item=[slot_l_hand]'>[(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "<font color=grey>Empty</font>"]</A></td></tr>
<tr><td><B>Right Hand:</B></td><td><A href='?src=\ref[src];item=[slot_r_hand]'>[(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "<font color=grey>Empty</font>"]</A></td></tr>
<tr><td>&nbsp;</td></tr>"}
dat += {"</table>
<A href='?src=\ref[user];mach_close=mob\ref[src]'>Close</A>
"}
user << browse(dat, "window=mob\ref[src];size=325x500")
onclose(user, "mob\ref[src]")
var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 250)
popup.set_content(dat)
popup.open()
//mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine()
/mob/verb/examinate(atom/A as mob|obj|turf in view())
@@ -662,7 +663,7 @@ var/list/slot_equipment_priority = list( \
if (flavor_text && flavor_text != "")
var/msg = replacetext(flavor_text, "\n", " ")
if(lentext(msg) <= 40 || !shrink)
return "<span class='notice'>[msg]</span>"
return "<span class='notice'>[html_encode(msg)]</span>" //Repeat after me, "I will not give players access to decoded HTML."
else
return "<span class='notice'>[copytext_preserve_html(msg, 1, 37)]... <a href='byond://?src=\ref[src];flavor_more=1'>More...</a></span>"
@@ -1451,4 +1452,7 @@ mob/proc/yank_out_object()
return 1 // Yes, you can
/mob/proc/IsVocal()
return 1
return 1
/mob/proc/get_access()
return list() //must return list or IGNORE_ACCESS
+7
View File
@@ -62,6 +62,13 @@ proc/isembryo(A)
return 1
return 0
/proc/ispet(A)
if(istype(A, /mob/living/simple_animal))
var/mob/living/simple_animal/SA = A
if(SA.can_collar)
return 1
return 0
/proc/iscrab(A)
if(istype(A, /mob/living/simple_animal/crab))
return 1
@@ -1,4 +1,5 @@
//The mob should have a gender you want before running this proc. Will run fine without H
/datum/preferences
//The mob should have a gender you want before running this proc. Will run fine without H
/datum/preferences/proc/random_character(gender_override)
if(gender_override)
gender = gender_override
@@ -130,62 +131,62 @@
b_eyes = blue
/datum/preferences/proc/randomize_skin_color()
var/red
var/green
var/blue
var/red
var/green
var/blue
var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino")
switch(col)
if("black")
red = 0
green = 0
blue = 0
if("grey")
red = rand (100, 200)
green = red
blue = red
if("brown")
red = 102
green = 51
blue = 0
if("chestnut")
red = 153
green = 102
blue = 0
if("blue")
red = 51
green = 102
blue = 204
if("lightblue")
red = 102
green = 204
blue = 255
if("green")
red = 0
green = 102
blue = 0
if("albino")
red = rand (200, 255)
green = rand (0, 150)
blue = rand (0, 150)
var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino")
switch(col)
if("black")
red = 0
green = 0
blue = 0
if("grey")
red = rand (100, 200)
green = red
blue = red
if("brown")
red = 102
green = 51
blue = 0
if("chestnut")
red = 153
green = 102
blue = 0
if("blue")
red = 51
green = 102
blue = 204
if("lightblue")
red = 102
green = 204
blue = 255
if("green")
red = 0
green = 102
blue = 0
if("albino")
red = rand (200, 255)
green = rand (0, 150)
blue = rand (0, 150)
red = max(min(red + rand (-25, 25), 255), 0)
green = max(min(green + rand (-25, 25), 255), 0)
blue = max(min(blue + rand (-25, 25), 255), 0)
red = max(min(red + rand (-25, 25), 255), 0)
green = max(min(green + rand (-25, 25), 255), 0)
blue = max(min(blue + rand (-25, 25), 255), 0)
r_skin = red
g_skin = green
b_skin = blue
r_skin = red
g_skin = green
b_skin = blue
/datum/preferences/proc/blend_backpack(var/icon/clothes_s,var/backbag,var/satchel,var/backpack="backpack")
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', backpack), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', satchel), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
return clothes_s
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', backpack), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', satchel), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
return clothes_s
/datum/preferences/proc/update_preview_icon(var/for_observer=0) //seriously. This is horrendous.
qdel(preview_icon_front)
@@ -226,12 +227,14 @@
var/icon/temp = new /icon("icon" = tail_icon, "icon_state" = tail_icon_state)
preview_icon.Blend(temp, ICON_OVERLAY)
for(var/name in list("r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","l_arm","l_hand"))
for(var/name in list("chest", "groin", "head", "r_arm", "r_hand", "r_leg", "r_foot", "l_leg", "l_foot", "l_arm", "l_hand"))
if(organ_data[name] == "amputated") continue
if(organ_data[name] == "cyborg")
var/datum/robolimb/R
if(rlimb_data[name]) R = all_robolimbs[rlimb_data[name]]
if(!R) R = basic_robolimb
if(name == "chest")
name = "torso"
preview_icon.Blend(icon(R.icon, "[name]"), ICON_OVERLAY) // This doesn't check gendered_icon. Not an issue while only limbs can be robotic.
continue
preview_icon.Blend(new /icon(icobase, "[name]"), ICON_OVERLAY)
@@ -64,7 +64,7 @@
name = "Bald"
icon_state = "bald"
gender = MALE
species_allowed = list("Human","Unathi","Vox","Diona","Kidan","Grey","Plasmaman","Skeleton")
species_allowed = list("Human", "Unathi", "Vox", "Diona", "Kidan", "Grey", "Plasmaman", "Skeleton")
short
name = "Short Hair" // try to capatilize the names please~
@@ -152,7 +152,7 @@
name = "Pompadour"
icon_state = "hair_pompadour"
gender = MALE
species_allowed = list("Human","Unathi")
species_allowed = list("Human", "Unathi")
quiff
name = "Quiff"
@@ -175,19 +175,19 @@
name = "Beehive"
icon_state = "hair_beehive"
gender = FEMALE
species_allowed = list("Human","Unathi")
species_allowed = list("Human", "Unathi")
bobcurl
name = "Bobcurl"
icon_state = "hair_bobcurl"
gender = FEMALE
species_allowed = list("Human","Unathi")
species_allowed = list("Human", "Unathi")
bob
name = "Bob"
icon_state = "hair_bobcut"
gender = FEMALE
species_allowed = list("Human","Unathi")
species_allowed = list("Human", "Unathi")
bowl
name = "Bowl"
@@ -203,7 +203,7 @@
name = "Buzzcut"
icon_state = "hair_buzzcut"
gender = MALE
species_allowed = list("Human","Unathi")
species_allowed = list("Human", "Unathi")
crew
name = "Crewcut"
@@ -265,12 +265,23 @@
mohawk
name = "Mohawk"
icon_state = "hair_d"
species_allowed = list("Human","Unathi")
species_allowed = list("Human", "Unathi")
jensen
name = "Adam Jensen Hair"
icon_state = "hair_jensen"
gender = MALE
cia
name = "CIA"
icon_state = "hair_cia"
gender = MALE
mulder
name = "Mulder"
icon_state = "hair_mulder"
gender = MALE
gelled
name = "Gelled Back"
icon_state = "hair_gelled"
@@ -284,7 +295,7 @@
spiky
name = "Spiky"
icon_state = "hair_spikey"
species_allowed = list("Human","Unathi")
species_allowed = list("Human", "Unathi")
kusangi
name = "Kusanagi Hair"
@@ -485,7 +496,7 @@
name = "Shaved"
icon_state = "bald"
gender = NEUTER
species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox","Diona","Kidan","Greys","Machine", "Vulpkanin", "Slime People")
species_allowed = list("Human", "Unathi", "Tajaran", "Skrell", "Vox", "Diona", "Kidan", "Greys", "Machine", "Vulpkanin", "Slime People")
watson
@@ -1074,7 +1085,7 @@
/datum/sprite_accessory/underwear
icon = 'icons/mob/underwear.dmi'
species_allowed = list("Human","Unathi","Vox","Diona","Vulpkanin","Kidan","Grey","Plasmaman","Skeleton")
species_allowed = list("Human", "Unathi", "Vox", "Diona", "Vulpkanin", "Kidan", "Grey", "Plasmaman", "Skeleton", "Machine")
nude
name = "Nude"
@@ -1222,7 +1233,7 @@
/datum/sprite_accessory/undershirt
icon = 'icons/mob/underwear.dmi'
species_allowed = list("Human","Unathi","Vox","Diona","Vulpkanin","Kidan","Grey","Plasmaman","Skeleton")
species_allowed = list("Human", "Unathi", "Vox", "Diona", "Vulpkanin", "Kidan", "Grey", "Plasmaman", "Skeleton", "Machine")
/datum/sprite_accessory/undershirt/nude
name = "Nude"
@@ -1508,13 +1519,13 @@
///////////////////////
/datum/sprite_accessory/socks
icon = 'icons/mob/underwear.dmi'
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skeleton")
species_allowed = list("Human", "Unathi", "Diona", "Grey", "Machine", "Tajaran", "Vulpkanin", "Slime People", "Skeleton")
/datum/sprite_accessory/socks/nude
name = "Nude"
icon_state = null
gender = NEUTER
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skeleton","Vox")
species_allowed = list("Human", "Unathi", "Diona", "Grey", "Machine", "Tajaran", "Vulpkanin", "Slime People", "Skeleton", "Vox")
/datum/sprite_accessory/socks/white_norm
@@ -1681,12 +1692,12 @@
/datum/sprite_accessory/head_accessory
icon = 'icons/mob/body_accessory.dmi'
species_allowed = list("Unathi", "Vulpkanin", "Tajaran")
species_allowed = list("Unathi", "Vulpkanin", "Tajaran", "Machine")
icon_state = "accessory_none"
/datum/sprite_accessory/head_accessory/none
name = "None"
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skeleton","Vox")
species_allowed = list("Human", "Unathi", "Diona", "Grey", "Machine", "Tajaran", "Vulpkanin", "Slime People", "Skeleton", "Vox")
icon_state = "accessory_none"
/datum/sprite_accessory/head_accessory/simple
@@ -1769,16 +1780,22 @@
icon_state = "ears_plain"
species_allowed = list("Tajaran")
/datum/sprite_accessory/head_accessory/ipc_antennae
name = "Antennae"
icon_state = "antennae"
species_allowed = list("Machine")
/* BODY MARKINGS */
/datum/sprite_accessory/body_markings
icon = 'icons/mob/body_accessory.dmi'
species_allowed = list("Unathi", "Tajaran", "Vulpkanin")
species_allowed = list("Unathi", "Tajaran", "Vulpkanin", "Machine")
icon_state = "accessory_none"
/datum/sprite_accessory/body_markings/none
name = "None"
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skeleton","Vox")
species_allowed = list("Human", "Unathi", "Diona", "Grey", "Machine", "Tajaran", "Vulpkanin", "Slime People", "Skeleton", "Vox")
icon_state = "accessory_none"
/datum/sprite_accessory/body_markings/stripe
@@ -1811,6 +1828,11 @@
species_allowed = list("Unathi")
icon_state = "markings_tigerheadface_una"
/datum/sprite_accessory/body_markings/optics
name = "Humanoid Optics"
species_allowed = list("Machine")
icon_state = "optics"
/datum/sprite_accessory/body_markings/tattoo // Tattoos applied post-round startup with tattoo guns in item_defines.dm
name = "base tattoo"
species_allowed = list()
+2 -12
View File
@@ -220,19 +220,9 @@
display_to << "<span class='danger'>Error: unable to deliver message.</span>"
display_spideros()
return
//Search for holder of the PDA.
var/mob/living/L = null
if(P.loc && isliving(P.loc))
L = P.loc
//Maybe they are a pAI!
else
L = get(P, /mob/living/silicon)
if(L)
L << "\icon[P] <b>Message from unknown source: </b>\"[t]\" (Unable to Reply)"
P.play_ringtone()
var/datum/data/pda/app/messenger/M = P.find_program(/datum/data/pda/app/messenger)
M.set_new(1)
M.notify("<b>Message from unknown source: </b>\"[t]\" (Unable to Reply)", 0)
if("Inject")
if( (href_list["tag"]=="radium"? (reagents.get_reagent_amount("radium"))<=(a_boost*a_transfer) : !reagents.get_reagent_amount(href_list["tag"])) )//Special case for radium. If there are only a_boost*a_transfer radium units left.
+44 -3
View File
@@ -29,19 +29,27 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/honkamt = 0 //How many honks left when infected with honk.exe
var/mimeamt = 0 //How many silence left when infected with mime.exe
var/detonate = 1 // Can the PDA be blown up?
var/newmessage = 0 //To remove hackish overlay check
var/ttone = "beep" //The ringtone!
var/list/ttone_sound = list("beep" = 'sound/machines/twobeep.ogg',
"boom" = 'sound/effects/explosionfar.ogg',
"slip" = 'sound/misc/slip.ogg',
"honk" = 'sound/items/bikehorn.ogg',
"SKREE" = 'sound/voice/shriek1.ogg',
"holy" = 'sound/items/PDA/ambicha4-short.ogg',
"xeno" = 'sound/voice/hiss1.ogg')
var/list/programs = list(
new/datum/data/pda/app/main_menu,
new/datum/data/pda/app/notekeeper,
new/datum/data/pda/app/messenger,
new/datum/data/pda/app/manifest,
new/datum/data/pda/app/chatroom,
new/datum/data/pda/app/atmos_scanner,
new/datum/data/pda/utility/scanmode/notes,
new/datum/data/pda/utility/flashlight)
var/list/shortcut_cache = list()
var/list/shortcut_cat_order = list()
var/list/notifying_programs = list()
var/obj/item/weapon/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both.
var/ownjob = null //related to above
@@ -133,7 +141,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
cat = list()
shortcut_cache[P.category] = cat
shortcut_cat_order += P.category
cat |= list(list(name = P.name, icon = P.icon, ref = "\ref[P]"))
cat |= list(list(name = P.name, icon = P.icon, notify_icon = P.notify_icon, ref = "\ref[P]"))
// force the order of a few core categories
shortcut_cat_order = list("General") \
@@ -250,12 +258,17 @@ var/global/list/obj/item/device/pda/PDAs = list()
start_program(find_program(/datum/data/pda/app/main_menu))
if(C.radio)
C.radio.hostpda = null
for(var/datum/data/pda/P in notifying_programs)
if(P in C.programs)
P.unnotify()
cartridge = null
update_shortcuts()
if ("Authenticate")//Checks for ID
id_check(usr, 1)
if("Retro")
retro_mode = !retro_mode
if("Ringtone")
return set_ringtone()
else
if(current_app)
. = current_app.Topic(href, href_list)
@@ -281,6 +294,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(can_use(usr))
start_program(find_program(/datum/data/pda/app/main_menu))
notifying_programs.Cut()
overlays.Cut()
usr << "<span class='notice'>You press the reset button on \the [src].</span>"
else
usr << "<span class='notice'>You cannot do this while restrained.</span>"
@@ -442,4 +457,30 @@ var/global/list/obj/item/device/pda/PDAs = list()
// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
/obj/item/device/pda/emp_act(severity)
for(var/atom/A in src)
A.emp_act(severity)
A.emp_act(severity)
/obj/item/device/pda/proc/play_ringtone()
var/S
if(ttone in ttone_sound)
S = ttone_sound[ttone]
else
S = 'sound/machines/twobeep.ogg'
playsound(loc, S, 50, 1)
for(var/mob/O in hearers(3, loc))
O.show_message(text("\icon[src] *[ttone]*"))
/obj/item/device/pda/proc/set_ringtone()
var/t = input("Please enter new ringtone", name, ttone) as text
if (in_range(src, usr) && loc == usr)
if (t)
if(hidden_uplink && hidden_uplink.check_trigger(usr, lowertext(t), lowertext(lock_code)))
usr << "The PDA softly beeps."
close(usr)
else
t = sanitize(copytext(t, 1, 20))
ttone = t
return 1
else
close(usr)
return 0
+6 -6
View File
@@ -17,7 +17,7 @@
set category = "AI IM"
set name = "Send PDA Message"
set src in usr
if(usr.stat == DEAD)
usr << "You can't send PDA messages because you are dead!"
return
@@ -36,7 +36,7 @@
set category = "AI IM"
set name = "Show Message Log"
set src in usr
if(usr.stat == DEAD)
usr << "You can't do that because you are dead!"
return
@@ -56,7 +56,7 @@
set category = "AI IM"
set name = "Toggle Sender/Receiver"
set src in usr
if(usr.stat == DEAD)
usr << "You can't do that because you are dead!"
return
@@ -69,13 +69,13 @@
set category = "AI IM"
set name = "Toggle Ringer"
set src in usr
if(usr.stat == DEAD)
usr << "You can't do that because you are dead!"
return
var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger)
M.silent = !M.silent
usr << "<span class='notice'>PDA ringer toggled [(M.silent ? "Off" : "On")]!</span>"
M.notify_silent = !M.notify_silent
usr << "<span class='notice'>PDA ringer toggled [(M.notify_silent ? "Off" : "On")]!</span>"
/obj/item/device/pda/ai/can_use()
return 1
+31
View File
@@ -1,6 +1,8 @@
// Base class for anything that can show up on home screen
/datum/data/pda
var/icon = "tasks"
var/notify_icon = "exclamation-circle"
var/notify_silent = 0
var/hidden = 0 // program not displayed in main menu
var/category = "General" // the category to list it in on the main menu
var/obj/item/device/pda/pda // if this is null, and the app is running code, something's gone wrong
@@ -11,6 +13,35 @@
/datum/data/pda/proc/start()
/datum/data/pda/proc/notify(message, blink = 1)
if(message)
//Search for holder of the PDA.
var/mob/living/L = null
if(pda.loc && isliving(pda.loc))
L = pda.loc
//Maybe they are a pAI!
else
L = get(pda, /mob/living/silicon)
if(L)
L << "\icon[pda] [message]"
nanomanager.update_user_uis(L, pda) // Update the receiving user's PDA UI so that they can see the new message
if(!notify_silent)
pda.play_ringtone()
if(blink && !(src in pda.notifying_programs))
pda.overlays.Cut()
pda.overlays += image('icons/obj/pda.dmi', "pda-r")
pda.notifying_programs |= src
/datum/data/pda/proc/unnotify()
if(src in pda.notifying_programs)
pda.notifying_programs -= src
if(!pda.notifying_programs.len)
pda.overlays.Cut()
/datum/data/pda/proc/
// An app has a button on the home screen and its own UI
/datum/data/pda/app
+246 -10
View File
@@ -1,16 +1,252 @@
var/list/chatrooms = list()
var/list/chatrooms = list(new /datum/chatroom("General Discussion"))
/datum/chatroom
var/name = "Generic Chatroom"
var/list/logged_in = list()
var/list/users = list()
var/list/invites = list()
var/list/logs = list() // chat logs
var/list/banned = list() // banned users
var/list/whitelist = list() // whitelisted users
var/list/muted = list()
var/topic = "" // topic message for the chatroom
var/password = "" // blank for no password.
var/operator = "" // name of the operator
var/topic = "Discussion" // topic message for the chatroom
var/is_public = 1
var/announcer = "CyberiadAI"
/datum/chatroom/proc/attempt_connect(var/obj/item/device/pda/device, var/obj/password)
if(!device)
/datum/chatroom/New(n)
name = n
/datum/chatroom/proc/post(user, message, username)
if(!user || !message)
return
if(!username)
if(istype(user, /datum/data/pda/app/chatroom))
var/datum/data/pda/app/chatroom/c = user
if(!c.pda.owner)
return
username = c.pda.owner
else
return
logs += list(list(username = username, message = message))
for(var/datum/data/pda/app/chatroom/u in users)
if(!u.toff && user != u)
u.notify("<b>Post from [username] in #[name], </b>\"[message]\" (<a href='?src=\ref[u];choice=Post;target=\ref[src]'>Post</a>)")
/datum/chatroom/proc/announce(user, message)
post(user, "<span class='average'>[message]</span>", announcer)
/datum/chatroom/proc/login(datum/data/pda/app/chatroom/user)
if(!user || !user.pda.owner)
return 0
if(user in users)
return 1
if(!is_public && !(user in invites))
return 0
users += user
announce(user, "[user.pda.owner] has entered #[name].")
return 1
/datum/chatroom/proc/logout(datum/data/pda/app/chatroom/user)
if(!user || !user.pda.owner || !(user in users))
return
users -= user
invites -= user
announce(user, "[user.pda.owner] has left #[name].")
/datum/data/pda/app/chatroom
name = "Chatbuddy"
icon = "hashtag"
notify_icon = "comments"
template = "pda_chatroom"
var/toff = 0
var/datum/chatroom/current_room = null
var/inviting = 0
var/channels_created = 0
var/max_channels_created = 3
var/latest_post = 0
var/auto_scroll = 1
/datum/data/pda/app/chatroom/start()
. = ..()
unnotify()
latest_post = 0
/datum/data/pda/app/chatroom/update_ui(mob/user as mob, list/data)
data["silent"] = notify_silent
data["toff"] = toff
if(!messaging_available())
data["no_server"] = 1
has_back = 0
else if(current_room)
data["room"] = current_room.name
data["topic"] = current_room.topic
if(inviting)
data["inviting"] = 1
var/list/pdas = list()
for(var/A in PDAs)
var/obj/item/device/pda/P = A
var/datum/data/pda/app/chatroom/C = P.find_program(/datum/data/pda/app/chatroom)
var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger)
if (!P.owner || P == pda || PM.m_hidden || (C in current_room.invites) || (C in current_room.users))
continue
pdas += list(list(name = "[P.owner] ([P.ownjob])", ref = "\ref[C]"))
data["people"] = pdas
else
data["history"] = current_room.logs
var/list/users[0]
for(var/U in current_room.users)
var/datum/data/pda/app/chatroom/ch = U
users += "<span class='good'>[ch.pda.owner]</span>"
for(var/U in (current_room.invites - current_room.users))
var/datum/data/pda/app/chatroom/ch = U
users += "<span class='average'>[ch.pda.owner]</span>"
data["users"] = users
data["auto_scroll"] = auto_scroll
data["latest_post"] = latest_post
latest_post = current_room.logs.len
has_back = 1
else
var/list/rooms[0]
for(var/datum/chatroom/c in chatrooms)
if((src in c.users) || (src in c.invites) || c.is_public)
rooms += list(list(name = "[c]", ref = "\ref[c]"))
data["rooms"] = rooms
has_back = 0
/datum/data/pda/app/chatroom/proc/messaging_available()
if(message_servers)
for(var/A in message_servers)
var/obj/machinery/message_server/MS = A
if(MS.active)
return 1
return 0
/datum/data/pda/app/chatroom/proc/check_messaging_available()
. = messaging_available()
if(!.)
usr << "<span class='notice'>ERROR: Messaging server is not responding.</span>"
/datum/data/pda/app/chatroom/Topic(href, list/href_list)
unnotify()
switch(href_list["choice"])
if("Toggle Chatroom")
toff = !toff
if("Toggle Ringer")
notify_silent = !notify_silent
if("Back")
if(inviting)
inviting = 0
else
current_room = null
latest_post = 0
if("Join")
if(!check_messaging_available())
return
if(href_list["room"])
current_room = locate(href_list["room"])
if(!(src in current_room.users))
if(!current_room.login(src))
current_room = null
latest_post = 0
if("Post")
if(!check_messaging_available())
return
var/datum/chatroom/target
if(href_list["target"])
target = locate(href_list["target"])
else
target = current_room
if(!target)
return
var/t = input("Please enter message", target) as text|null
if(!t)
return
t = sanitize(copytext(t, 1, MAX_MESSAGE_LEN))
t = readd_quotes(t)
if (!t || (!in_range(pda, usr) && pda.loc != usr))
return
target.post(src, t)
if("Topic")
if(!check_messaging_available() || !current_room)
return
var/t = input("Enter new topic:", current_room, current_room.topic) as text|null
if(!t)
return
t = sanitize(copytext(t, 1, MAX_MESSAGE_LEN))
t = readd_quotes(t)
if (!t || (!in_range(pda, usr) && pda.loc != usr))
return
current_room.topic = t
current_room.announce(src, "Topic has been changed to '[t]' by [pda.owner].")
if("Leave")
if(!current_room)
return
current_room.logout(src)
current_room = null
latest_post = 0
if("Invite")
if(!check_messaging_available() || !current_room)
return
inviting = 1
if("Invite PDA")
if(!check_messaging_available() || !current_room || !href_list["user"])
return
var/datum/data/pda/app/chatroom/C = locate(href_list["user"])
if(C)
current_room.invites += C
if(!C.toff)
C.notify("<b>Invite to #[current_room]</b> (<a href='?src=\ref[C];choice=Join;room=\ref[current_room]'>Join</a>)")
if("New Room")
if(!check_messaging_available())
return
if(channels_created >= max_channels_created)
alert("This PDA has already reached its maximum channels created.", name)
return
var/t = input("Enter room name:", name) as text|null
if(!t)
return
t = sanitize(copytext(t, 1, MAX_NAME_LEN))
t = readd_quotes(t)
var/access = input("Room access?", current_room) as null|anything in list("Public", "Private")
if(!access)
return
if (!t || (!in_range(pda, usr) && pda.loc != usr))
return
// check if already taken
for(var/datum/chatroom/C in chatrooms)
if(C.name == t)
alert("Channel with that name already exists.", name)
return
channels_created++
current_room = new /datum/chatroom(t)
chatrooms += current_room
latest_post = 0
current_room.invites += src
current_room.is_public = access == "Public"
current_room.login(src)
if(!current_room.is_public)
current_room.announce(src, "Users must be invited to join this room.")
if("Autoscroll")
auto_scroll = !auto_scroll
+5
View File
@@ -11,6 +11,11 @@
data["apps"] = pda.shortcut_cache
data["categories"] = pda.shortcut_cat_order
data["pai"] = !isnull(pda.pai) // pAI inserted?
var/list/notifying[0]
for(var/P in pda.notifying_programs)
notifying["\ref[P]"] = 1
data["notifying"] = notifying
/datum/data/pda/app/main_menu/Topic(href, list/href_list)
switch(href_list["choice"])
+45 -104
View File
@@ -1,82 +1,76 @@
/datum/data/pda/app/messenger
name = "Messenger"
icon = "comments-o"
title = "SpaceMessenger V4.0.1"
notify_icon = "comments"
title = "SpaceMessenger V4.1.0"
template = "pda_messenger"
var/silent = 0 //To beep or not to beep, that is the question
var/toff = 0 //If 1, messenger disabled
var/list/tnote[0] //Current Texts
var/last_text //No text spamming
var/list/ttone_sound = list("beep" = 'sound/machines/twobeep.ogg',
"boom" = 'sound/effects/explosionfar.ogg',
"slip" = 'sound/misc/slip.ogg',
"honk" = 'sound/items/bikehorn.ogg',
"SKREE" = 'sound/voice/shriek1.ogg',
"holy" = 'sound/items/PDA/ambicha4-short.ogg',
"xeno" = 'sound/voice/hiss1.ogg')
var/m_hidden = 0 // Is the PDA hidden from the PDA list?
var/active_conversation = null // New variable that allows us to only view a single conversation.
var/list/conversations = list() // For keeping up with who we have PDA messsages from.
var/latest_post = 0
var/auto_scroll = 1
/datum/data/pda/app/messenger/start()
. = ..()
set_new(0)
unnotify()
latest_post = 0
/datum/data/pda/app/messenger/update_ui(mob/user as mob, list/data)
data["silent"] = silent // does the pda make noise when it receives a message?
data["silent"] = notify_silent // does the pda make noise when it receives a message?
data["toff"] = toff // is the messenger function turned off?
data["active_conversation"] = active_conversation // Which conversation are we following right now?
var/convopdas[0]
var/pdas[0]
var/count = 0
for(var/A in PDAs)
var/obj/item/device/pda/P = A
var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger)
if (!P.owner || PM.toff || P == pda || PM.m_hidden)
continue
if(conversations.Find("\ref[P]"))
convopdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "1")))
else
pdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "0")))
count++
data["convopdas"] = convopdas
data["pdas"] = pdas
data["pda_count"] = count
data["messagescount"] = tnote.len
data["messages"] = tnote
has_back = active_conversation
if(active_conversation)
data["messages"] = tnote
for(var/c in tnote)
if(c["target"] == active_conversation)
data["convo_name"] = sanitize(c["owner"])
data["convo_job"] = sanitize(c["job"])
break
data["auto_scroll"] = auto_scroll
data["latest_post"] = latest_post
latest_post = tnote.len
else
var/convopdas[0]
var/pdas[0]
for(var/A in PDAs)
var/obj/item/device/pda/P = A
var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger)
var/list/plugins = list()
if(pda.cartridge)
for(var/A in pda.cartridge.messenger_plugins)
var/datum/data/pda/messenger_plugin/P = A
plugins += list(list(name = P.name, icon = P.icon, ref = "\ref[P]"))
data["plugins"] = plugins
if (!P.owner || PM.toff || P == pda || PM.m_hidden)
continue
if(conversations.Find("\ref[P]"))
convopdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "1")))
else
pdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "0")))
if(pda.cartridge)
data["charges"] = pda.cartridge.charges ? pda.cartridge.charges : 0
data["convopdas"] = convopdas
data["pdas"] = pdas
var/list/plugins = list()
if(pda.cartridge)
for(var/A in pda.cartridge.messenger_plugins)
var/datum/data/pda/messenger_plugin/P = A
plugins += list(list(name = P.name, icon = P.icon, ref = "\ref[P]"))
data["plugins"] = plugins
if(pda.cartridge)
data["charges"] = pda.cartridge.charges ? pda.cartridge.charges : 0
/datum/data/pda/app/messenger/Topic(href, list/href_list)
set_new(0)
unnotify()
switch(href_list["choice"])
if("Toggle Messenger")
toff = !toff
if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status
silent = !silent
notify_silent = !notify_silent
if("Clear")//Clears messages
if(href_list["option"] == "All")
tnote.Cut()
@@ -90,29 +84,19 @@
conversations.Remove(active_conversation)
active_conversation = null
if("Ringtone")
var/t = input("Please enter new ringtone", name, pda.ttone) as text
if (in_range(pda, usr) && pda.loc == usr)
if (t)
if(pda.hidden_uplink && pda.hidden_uplink.check_trigger(usr, lowertext(t), lowertext(pda.lock_code)))
usr << "The PDA softly beeps."
pda.close(usr)
else
t = sanitize(copytext(t, 1, 20))
pda.ttone = t
else
pda.close(usr)
return 0
latest_post = 0
if("Message")
var/obj/item/device/pda/P = locate(href_list["target"])
create_message(usr, P)
if(href_list["target"] in conversations) // Need to make sure the message went through, if not welp.
active_conversation = href_list["target"]
latest_post = 0
if("Select Conversation")
var/P = href_list["convo"]
for(var/n in conversations)
if(P == n)
active_conversation = P
latest_post = 0
if("Messenger Plugin")
if(!href_list["target"] || !href_list["plugin"])
return
@@ -122,30 +106,14 @@
usr << "PDA not found."
var/datum/data/pda/messenger_plugin/plugin = locate(href_list["plugin"])
if(plugin && plugin in pda.cartridge.messenger_plugins)
if(plugin && (plugin in pda.cartridge.messenger_plugins))
plugin.messenger = src
plugin.user_act(usr, P)
if("Back")
active_conversation = null
/datum/data/pda/app/messenger/proc/set_new(isnew)
if(pda.newmessage == isnew)
return
if(pda.newmessage)
//To clear message overlays.
pda.overlays.Cut()
pda.newmessage = 0
icon = "comments"
pda.update_shortcuts()
else
pda.overlays.Cut()
pda.overlays += image('icons/obj/pda.dmi', "pda-r")
pda.newmessage = 1
icon = "comments-o"
pda.update_shortcuts()
latest_post = 0
if("Autoscroll")
auto_scroll = !auto_scroll
/datum/data/pda/app/messenger/proc/create_message(var/mob/living/U, var/obj/item/device/pda/P)
var/t = input(U, "Please enter message", name, null) as text|null
@@ -207,39 +175,12 @@
if(!PM.conversations.Find("\ref[pda]"))
PM.conversations.Add("\ref[pda]")
PM.play_ringtone()
//Search for holder of the PDA.
var/mob/living/L = null
if(P.loc && isliving(P.loc))
L = P.loc
//Maybe they are a pAI!
else
L = get(P, /mob/living/silicon)
if(L)
L << "\icon[P] <b>Message from [pda.owner] ([pda.ownjob]), </b>\"[t]\" (<a href='byond://?src=\ref[PM];choice=Message;target=\ref[pda]'>Reply</a>)"
nanomanager.update_user_uis(L, P) // Update the receiving user's PDA UI so that they can see the new message
nanomanager.update_user_uis(U, P) // Update the sending user's PDA UI so that they can see the new message
set_new(1)
PM.notify("<b>Message from [pda.owner] ([pda.ownjob]), </b>\"[t]\" (<a href='?src=\ref[PM];choice=Message;target=\ref[pda]'>Reply</a>)")
log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]")
else
U << "<span class='notice'>ERROR: Messaging server is not responding.</span>"
/datum/data/pda/app/messenger/proc/play_ringtone()
if (!silent)
var/S
if(pda.ttone in ttone_sound)
S = ttone_sound[pda.ttone]
else
S = 'sound/machines/twobeep.ogg'
playsound(pda.loc, S, 50, 1)
for(var/mob/O in hearers(3, pda.loc))
if(!silent)
O.show_message(text("\icon[pda] *[pda.ttone]*"))
/datum/data/pda/app/messenger/proc/available_pdas()
var/list/names = list()
var/list/plist = list()
+6 -3
View File
@@ -34,10 +34,13 @@
. = ..(user, P)
if(.)
user.show_message("<span class=notice>Virus sent!</span>", 1)
var/datum/data/pda/app/messenger/M = P.find_program(/datum/data/pda/app/messenger)
var/datum/data/pda/app/M = P.find_program(/datum/data/pda/app/messenger)
if(M)
M.silent = 1
P.ttone = "silence"
M.notify_silent = 1
M = P.find_program(/datum/data/pda/app/chatroom)
if(M)
M.notify_silent = 1
P.ttone = "silence"
/datum/data/pda/messenger_plugin/virus/detonate
+10 -4
View File
@@ -50,9 +50,12 @@
/obj/item/device/pda/mime/New()
..()
var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger)
var/datum/data/pda/app/M = find_program(/datum/data/pda/app/messenger)
if(M)
M.silent = 1
M.notify_silent = 1
M = find_program(/datum/data/pda/app/chatroom)
if(M)
M.notify_silent = 1
/obj/item/device/pda/heads
default_cartridge = /obj/item/weapon/cartridge/head
@@ -142,9 +145,12 @@
/obj/item/device/pda/librarian/New()
..()
var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger)
var/datum/data/pda/app/M = find_program(/datum/data/pda/app/messenger)
if(M)
M.silent = 1 //Quiet in the library!
M.notify_silent = 1 //Quiet in the library!
M = find_program(/datum/data/pda/app/chatroom)
if(M)
M.notify_silent = 1 //Quiet in the library!
/obj/item/device/pda/clear
icon_state = "pda-transp"
@@ -87,6 +87,11 @@
..()
return
/datum/reagent/mitocholide/reaction_obj(var/obj/O, var/volume)
if(istype(O, /obj/item/organ))
var/obj/item/organ/Org = O
Org.rejuvenate()
/datum/reagent/cryoxadone
name = "Cryoxadone"
id = "cryoxadone"
@@ -251,6 +251,14 @@
build_path = /obj/item/device/assembly/voice
category = list("initial", "Miscellaneous")
/datum/design/videocam
name = "Video Camera"
id = "videocam"
build_type = AUTOLATHE
materials = list(MAT_METAL = 120, MAT_GLASS = 60)
build_path = /obj/item/device/videocam
category = list("initial", "Miscellaneous")
/datum/design/canvas
name = "11px by 11px Canvas"
id = "canvas"
+11
View File
@@ -246,6 +246,17 @@ proc/CallMaterialName(ID)
else if(href_list["copy_design"]) //Copy design data from the research holder to the design disk.
for(var/datum/design/D in files.known_designs)
if(href_list["copy_design_ID"] == D.id)
var/autolathe_friendly = 1
for(var/x in D.materials)
if( !(x in list(MAT_METAL, MAT_GLASS)))
autolathe_friendly = 0
D.category -= "Imported"
if(D.locked)
autolathe_friendly = 0
D.category -= "Imported"
if(D.build_type & (AUTOLATHE|PROTOLATHE|CRAFTLATHE)) // Specifically excludes circuit imprinter and mechfab
D.build_type = autolathe_friendly ? (D.build_type | AUTOLATHE) : D.build_type
D.category |= "Imported"
d_disk.blueprint = D
break
screen = 1.4
+59
View File
@@ -0,0 +1,59 @@
/obj/docking_port/mobile/assault_pod
name = "assault pod"
id = "steel_rain"
dwidth = 3
width = 7
height = 7
/obj/docking_port/mobile/assault_pod/request()
if(z == initial(src.z)) //No launching pods that have already launched
return ..()
/obj/docking_port/mobile/assault_pod/dock(obj/docking_port/stationary/S1)
..()
if(!istype(S1, /obj/docking_port/stationary/transit))
playsound(get_turf(src.loc), 'sound/effects/Explosion1.ogg',50,1)
/obj/item/device/assault_pod
name = "Assault Pod Targetting Device"
icon_state = "gangtool-red"
item_state = "walkietalkie"
desc = "Used to select a landing zone for assault pods."
var/shuttle_id = "steel_rain"
var/dwidth = 3
var/dheight = 0
var/width = 7
var/height = 7
var/lz_dir = 1
/obj/item/device/assault_pod/attack_self(mob/living/user)
var/target_area
target_area = input("Area to land", "Select a Landing Zone", target_area) in teleportlocs
var/area/picked_area = teleportlocs[target_area]
if(!src || qdeleted(src))
return
var/turf/T = safepick(get_area_turfs(picked_area))
if(!T)
return
var/obj/docking_port/stationary/landing_zone = new /obj/docking_port/stationary(T)
landing_zone.id = "assault_pod(\ref[src])"
landing_zone.name = "Landing Zone"
landing_zone.dwidth = dwidth
landing_zone.dheight = dheight
landing_zone.width = width
landing_zone.height = height
landing_zone.dir = lz_dir
landing_zone.register() //new docking ports must be registered
for(var/obj/machinery/computer/shuttle/S in machines)
if(S.shuttleId == shuttle_id)
S.possible_destinations = "[landing_zone.id]"
user << "Landing zone set."
qdel(src)
@@ -1,3 +1,80 @@
/obj/machinery/computer/emergency_shuttle
name = "emergency shuttle console"
desc = "For shuttle control."
icon_screen = "shuttle"
icon_keyboard = "tech_key"
var/auth_need = 3
var/list/authorized = list()
/obj/machinery/computer/emergency_shuttle/attackby(obj/item/weapon/card/W, mob/user, params)
if(stat & (BROKEN|NOPOWER))
return
if(!istype(W, /obj/item/weapon/card))
return
if(shuttle_master.emergency.mode != SHUTTLE_DOCKED)
return
if(!user)
return
if(shuttle_master.emergency.timeLeft() < 11)
return
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (istype(W, /obj/item/device/pda))
var/obj/item/device/pda/pda = W
W = pda.id
if (!W:access) //no access
user << "The access level of [W:registered_name]\'s card is not high enough. "
return
var/list/cardaccess = W:access
if(!istype(cardaccess, /list) || !cardaccess.len) //no access
user << "The access level of [W:registered_name]\'s card is not high enough. "
return
if(!(access_heads in W:access)) //doesn't have this access
user << "The access level of [W:registered_name]\'s card is not high enough. "
return 0
var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort")
if(shuttle_master.emergency.mode != SHUTTLE_DOCKED || user.get_active_hand() != W)
return 0
var/seconds = shuttle_master.emergency.timeLeft()
if(seconds <= 10)
return 0
switch(choice)
if("Authorize")
if(!authorized.Find(W:registered_name))
authorized += W:registered_name
if(auth_need - authorized.len > 0)
message_admins("[key_name_admin(user)] has authorized early shuttle launch.")
log_game("[key_name(user)] has authorized early shuttle launch in ([x], [y], [z]).")
minor_announcement.Announce("[auth_need - authorized.len] more authorization(s) needed until shuttle is launched early")
else
message_admins("[key_name_admin(user)] has launched the emergency shuttle [seconds] seconds before launch.")
log_game("[key_name(user)] has launched the emergency shuttle in ([x], [y], [z]) [seconds] seconds before launch.")
minor_announcement.Announce("The emergency shuttle will launch in 10 seconds")
shuttle_master.emergency.setTimer(100)
if("Repeal")
if(authorized.Remove(W:registered_name))
minor_announcement.Announce("[auth_need - authorized.len] authorizations needed until shuttle is launched early")
if("Abort")
if(authorized.len)
minor_announcement.Announce("All authorizations to launch the shuttle early have been revoked.")
authorized.Cut()
/obj/machinery/computer/emergency_shuttle/emag_act(mob/user)
if(!emagged && shuttle_master.emergency.mode == SHUTTLE_DOCKED)
var/time = shuttle_master.emergency.timeLeft()
message_admins("[key_name_admin(user)] has emagged the emergency shuttle: [time] seconds before launch.")
log_game("[key_name(user)] has emagged the emergency shuttle in ([x], [y], [z]): [time] seconds before launch.")
minor_announcement.Announce("The emergency shuttle will launch in 10 seconds", "SYSTEM ERROR:")
shuttle_master.emergency.setTimer(100)
emagged = 1
/obj/docking_port/mobile/emergency
name = "emergency shuttle"
id = "emergency"
@@ -111,14 +188,17 @@
G.dom_attempts = min(1,G.dom_attempts)
*/
if(SHUTTLE_DOCKED)
if(time_left <= 0 && shuttle_master.emergencyNoEscape)
priority_announcement.Announce("Hostile environment detected. Departure has been postponed indefinitely pending conflict resolution.")
sound_played = 0
mode = SHUTTLE_STRANDED
if(time_left <= 50 && !sound_played) //4 seconds left - should sync up with the launch
sound_played = 1
for(var/area/shuttle/escape/E in world)
E << 'sound/effects/hyperspace_begin.ogg'
if(time_left <= 0 && !shuttle_master.emergencyNoEscape)
//move each escape pod to its corresponding transit dock
for(var/obj/docking_port/mobile/pod/M in shuttle_master.mobile)
@@ -193,9 +273,16 @@
admin_controlled = 0
icon_state = "dorm_emag"
/obj/docking_port/stationary/random
name = "escape pod"
id = "pod"
dwidth = 1
width = 3
height = 4
var/target_area = /area/mine/unexplored
/obj/docking_port/stationary/random/initialize()
..()
var/target_area = /area/mine/unexplored
var/turfs = get_area_turfs(target_area)
var/T=pick(turfs)
var/list/turfs = get_area_turfs(target_area)
var/turf/T = pick(turfs)
src.loc = T
+6 -32
View File
@@ -396,7 +396,7 @@
var/obj/O = AM
if(istype(O, /obj/docking_port/stationary))
continue
O.loc = T1
O.forceMove(T1)
//close open doors
if(istype(O, /obj/machinery/door))
@@ -415,7 +415,7 @@
var/mob/M = AM
if(!M.move_on_shuttle)
continue
M.loc = T1
M.forceMove(T1)
//docking turbulence
if(M.client)
@@ -433,15 +433,12 @@
T1.shuttleRotate(rotation)
//lighting stuff
T1.reconsider_lights()
T1.lighting_build_overlays()
air_master.remove_from_active(T1)
T1.CalculateAdjacentTurfs()
air_master.add_to_active(T1,1)
T0.ChangeTurf(turf_type)
T0.reconsider_lights()
air_master.remove_from_active(T0)
T0.CalculateAdjacentTurfs()
air_master.add_to_active(T0,1)
@@ -515,7 +512,8 @@
if(!AM.anchored)
step(AM, dir)
else
qdel(AM)
if(AM.simulated) //lighting overlays are static
qdel(AM)
/*
//used to check if atom/A is within the shuttle's bounding box
/obj/docking_port/mobile/proc/onShuttleCheck(atom/A)
@@ -604,7 +602,7 @@
M = D
shuttleId = M.id
break
else if(!possible_destinations)
else if(!possible_destinations && shuttle_master) //possible destinations should **not** always exist; so, if it's specifically set to null, don't make it exist
M = shuttle_master.getShuttle(shuttleId)
if(M && !possible_destinations)
@@ -707,30 +705,6 @@
shuttleId = "whiteship"
possible_destinations = "whiteship_away;whiteship_home;whiteship_z4"
#define SYNDICATE_CHALLENGE_TIMER 12000 //20 minutes
/obj/machinery/computer/shuttle/syndicate
name = "syndicate shuttle terminal"
icon_screen = "syndishuttle"
icon_keyboard = "syndie_key"
req_access = list(access_syndicate)
shuttleId = "syndicate"
possible_destinations = "syndicate_away;syndicate_z5;syndicate_z3;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s"
var/challenge = FALSE
/obj/machinery/computer/shuttle/syndicate/recall
name = "syndicate shuttle recall terminal"
possible_destinations = "syndicate_away"
/obj/machinery/computer/shuttle/syndicate/Topic(href, href_list)
if(href_list["move"])
if(challenge && world.time < SYNDICATE_CHALLENGE_TIMER)
usr << "<span class='warning'>You've issued a combat challenge to the station! You've got to give them at least [round(((SYNDICATE_CHALLENGE_TIMER - world.time) / 10) / 60)] more minutes to allow them to prepare.</span>"
return 0
..()
#undef SYNDICATE_CHALLENGE_TIMER
/obj/machinery/computer/shuttle/vox
name = "skipjack control console"
req_access = list(access_vox)
@@ -764,7 +738,7 @@
if(underlays.len) //we have underlays, which implies some sort of transparency, so we want to a snapshot of the previous turf as an underlay
O = new()
O.underlays.Add(T)
T = new type(T)
T.ChangeTurf(type)
if(underlays.len)
T.underlays = O.underlays
if(T.icon_state != icon_state)
+38
View File
@@ -0,0 +1,38 @@
#define SYNDICATE_CHALLENGE_TIMER 12000 //20 minutes
/obj/machinery/computer/shuttle/syndicate
name = "syndicate shuttle terminal"
icon_screen = "syndishuttle"
icon_keyboard = "syndie_key"
req_access = list(access_syndicate)
shuttleId = "syndicate"
possible_destinations = "syndicate_away;syndicate_z5;syndicate_z3;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s"
var/challenge = FALSE
/obj/machinery/computer/shuttle/syndicate/recall
name = "syndicate shuttle recall terminal"
possible_destinations = "syndicate_away"
/obj/machinery/computer/shuttle/syndicate/Topic(href, href_list)
if(href_list["move"])
if(challenge && world.time < SYNDICATE_CHALLENGE_TIMER)
usr << "<span class='warning'>You've issued a combat challenge to the station! You've got to give them at least [round(((SYNDICATE_CHALLENGE_TIMER - world.time) / 10) / 60)] more minutes to allow them to prepare.</span>"
return 0
..()
/obj/machinery/computer/shuttle/syndicate/drop_pod
name = "syndicate assault pod control"
icon = 'icons/obj/terminals.dmi'
icon_state = "dorm_available"
req_access = list(access_syndicate)
shuttleId = "steel_rain"
possible_destinations = null
/obj/machinery/computer/shuttle/syndicate/drop_pod/Topic(href, href_list)
if(href_list["move"])
if(z != ZLEVEL_CENTCOMM)
usr << "<span class='warning'>Pods are one way!</span>"
return 0
..()
#undef SYNDICATE_CHALLENGE_TIMER
+28 -1
View File
@@ -57,7 +57,10 @@ var/list/organ_cache = list()
/obj/item/organ/proc/set_dna(var/datum/dna/new_dna)
if(new_dna)
dna = new_dna.Clone()
blood_DNA = list()
if(blood_DNA)
blood_DNA.Cut()
else
blood_DNA = list()
blood_DNA[dna.unique_enzymes] = dna.b_type
/obj/item/organ/proc/die()
@@ -173,6 +176,9 @@ var/list/organ_cache = list()
/obj/item/organ/proc/rejuvenate()
damage = 0
germ_level = 0
status &= ~ORGAN_DEAD
if(!owner)
processing_objects |= src
/obj/item/organ/proc/is_damaged()
return damage > 0
@@ -256,6 +262,27 @@ var/list/organ_cache = list()
if(3.0)
take_damage(0,3)
/obj/item/organ/internal/emp_act(severity)
if(!robotic)
return
if(robotic == 2)
switch (severity)
if (1.0)
take_damage(20,1)
if (2.0)
take_damage(7,1)
if(3.0)
take_damage(3,1)
else if(robotic == 1)
take_damage(11,1)
/obj/item/organ/internal/heart/emp_act(intensity)
if(owner && robotic == 2)
owner.heart_attack = 1
owner.visible_message("<span class='danger'>[owner] clutches their chest and gasps!</span>","<span class='userdanger'>You clutch your chest in pain!</span>")
else if(owner && robotic == 1)
take_damage(11,1)
/obj/item/organ/proc/remove(var/mob/living/user,special = 0)
if(!istype(owner))
return
+13 -12
View File
@@ -8,7 +8,8 @@ var/global/datum/robolimb/basic_robolimb
var/datum/robolimb/R = new limb_type()
all_robolimbs[R.company] = R
if(!R.unavailable_at_chargen)
chargen_robolimbs[R.company] = R
if(R != "head" && R != "chest" && R != "groin" ) //Part of the method that ensures only IPCs can access head, chest and groin prosthetics.
chargen_robolimbs[R.company] = R
/datum/robolimb
var/company = "Unbranded" // Shown when selecting the limb.
@@ -26,16 +27,6 @@ var/global/datum/robolimb/basic_robolimb
desc = "This limb has a militaristic black and green casing with gold stripes."
icon = 'icons/mob/human_races/cyberlimbs/hesphaistos.dmi'
/datum/robolimb/zenghu
company = "Zeng-Hu Pharmaceuticals"
desc = "This limb has a rubbery fleshtone covering with visible seams."
icon = 'icons/mob/human_races/cyberlimbs/zenghu.dmi'
/datum/robolimb/xion
company = "Xion Manufacturing Group"
desc = "This limb has a minimalist black and red casing."
icon = 'icons/mob/human_races/cyberlimbs/xion.dmi'
/datum/robolimb/ipc
company = "Morpheus Cyberkinetics"
desc = "This limb is simple and functional; no effort has been made to make it look human."
@@ -45,4 +36,14 @@ var/global/datum/robolimb/basic_robolimb
/datum/robolimb/wardtakahashi
company = "Ward-Takahashi"
desc = "This limb features sleek black and white polymers."
icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi.dmi'
icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi.dmi'
/datum/robolimb/xion
company = "Xion Manufacturing Group"
desc = "This limb has a minimalist black and red casing."
icon = 'icons/mob/human_races/cyberlimbs/xion.dmi'
/datum/robolimb/zenghu
company = "Zeng-Hu Pharmaceuticals"
desc = "This limb has a rubbery fleshtone covering with visible seams."
icon = 'icons/mob/human_races/cyberlimbs/zenghu.dmi'
@@ -133,9 +133,13 @@
/obj/item/organ/internal/xenos/hivenode/insert(mob/living/carbon/M, special = 0)
..()
M.faction |= "alien"
M.add_language("Hivemind")
M.add_language("Xenomorph")
/obj/item/organ/internal/xenos/hivenode/remove(mob/living/carbon/M, special = 0)
M.faction -= "alien"
M.remove_language("Hivemind")
M.remove_language("Xenomorph")
..()
/obj/item/organ/internal/xenos/neurotoxin
@@ -0,0 +1,4 @@
author: Fethas
delete-after: True
changes:
- rscadd: "Chaos types no longer random teleport, but will make the target hallucinate everyone looks like the guardian."
@@ -0,0 +1,6 @@
author: Fox McCloud
delete-after: True
changes:
- tweak: "Removes random 1% chance to heal fire damage"
- tweak: "Removes passive healing from resist heat mutation"
- tweak: "Regen mutation heals every cycle (albeit less, on average), but doesn't cost hunger"
+12
View File
@@ -0,0 +1,12 @@
author: KasparoVy
delete-after: True
changes:
- rscadd: "The ability to change your head, torso and groin as an IPC in the character creator. Non-IPCs cannot access the parts."
- rscadd: "Head, torso and groin sprites for all mechanical limb/bodypart brands but Morpheus and the unbranded ones (since those already exist) from Polaris."
- rscadd: "Faux-eye optics for non-Morpheus heads."
- rscadd: "The ability to change optic (eye) colour if you've got a non-Morpheus head."
- rscadd: "The ability to choose human hair styles (wigs) and facial hair styles (postiche) with non-Morpheus heads. Non-Morpheus heads cannot choose screens. Conversely, Morpheus heads cannot choose wigs or facial hair."
- rscadd: "Two hair styles from Polaris."
- rscadd: "The ability for IPCs to wear undergarments (shirts and trousers)."
- rscadd: "Antennae (colourable) for IPCs."
- tweak: "IPC monitor adjustment verb will now adjust optic colour if the head is non-Morpheus."
@@ -0,0 +1,6 @@
author: Regens
delete-after: True
changes:
- tweak: "Robotic hearts will now properly give the mob a heart attack instead of just damaging it when EMP'd"
- rscadd: "Assisted organs will now also take damage from EMP's"
- bugfix: "Internal robotic and assisted organs will now actually take damage from EMP's"
@@ -0,0 +1,5 @@
author: Crazylemon64
delete-after: True
changes:
- rscadd: "Splashing mitocholide on dead organs will make them live again."
- rscadd: "The body scanner now detects necrotic limbs and organs."
@@ -0,0 +1,5 @@
author: Tastyfish
delete-after: True
changes:
- rscadd: "Adds PDA chatrooms. Post memes! Talk to your fellow collaborators! Get caught!"
- tweak: "You can now set the PDA messenger to automatically scroll down to new messages."
@@ -0,0 +1,7 @@
author: tigercat2000
delete-after: True
changes:
- rscadd: "Nukeops now have an assault pod, they can use it for 30 TC. Loud and mean."
- bugfix: "Lighting overlays can no longer go below 0 lum_r/g/b"
- bugfix: "Shuttles will work with lighting better."
- bugfix: "Wizards can no longer teleport to prohibited areas such as Central Command."
@@ -0,0 +1,4 @@
author: Fox McCloud
delete-after: True
changes:
- bugfix: "Fixes not being able to speak over xeno common or hivemind when you receive the Xeno hive node"
@@ -0,0 +1,4 @@
author: Fox McCloud
delete-after: True
changes:
- rscadd: "Adds in the ability to transfer non-locked metal+glass only designs from the protolathe to autolathe"
@@ -0,0 +1,4 @@
author: FlattestGuitar
delete-after: True
changes:
- rscadd: "Adds a snow, navy and desert military jacket."
@@ -0,0 +1,5 @@
author: Tastyfish
delete-after: True
changes:
- rscadd: "Pet collars now act as death alarms and can have ID's attached to them."
- tweak: "All domestic animals can now wear collars."
@@ -0,0 +1,4 @@
author: Tastyfish
delete-after: True
changes:
- rscadd: "You can now make video cameras at the autolathe."
@@ -0,0 +1,4 @@
author: KasparoVy
delete-after: True
changes:
- bugfix: "Combat/SWAT boots can now be toecut and jacksandals can't."
@@ -0,0 +1,4 @@
author: TheDZD
delete-after: True
changes:
- bugfix: "Fixes an instance of old code being so incredibly, unbelievably, makes-me-want-to-stab-myself-in-the-eye-edly idiotic."
@@ -0,0 +1,4 @@
author: KasparoVy
delete-after: True
changes:
- bugfix: "ASAP fix to what would've broken the ability to configure prostheses in character creation."
@@ -0,0 +1,5 @@
author: KasparoVy
delete-after: True
changes:
- bugfix: "Adjusted masks no longer block CPR (including bandanas)."
- bugfix: "You can no longer run internals from adjusted breath masks (or airtight adjustable masks in general)."

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